diff --git a/dgbuilder/tools/FormatXml.java b/dgbuilder/tools/FormatXml.java
new file mode 100644
index 0000000..7c6915f
--- /dev/null
+++ b/dgbuilder/tools/FormatXml.java
@@ -0,0 +1,49 @@
+import javax.xml.transform.*;
+import javax.xml.transform.stream.*;
+import java.io.*;
+import java.util.*;
+import java.nio.file.Paths;
+import java.nio.file.Files;
+import java.nio.charset.StandardCharsets;
+import java.nio.charset.Charset;
+public class FormatXml{
+public static String formatXml(String input, int indent) {
+    try {
+        Source xmlInput = new StreamSource(new StringReader(input));
+        StringWriter stringWriter = new StringWriter();
+        StreamResult xmlOutput = new StreamResult(stringWriter);
+        TransformerFactory transformerFactory = TransformerFactory.newInstance();
+        transformerFactory.setAttribute("indent-number", indent);
+        Transformer transformer = transformerFactory.newTransformer(); 
+        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+        transformer.transform(xmlInput, xmlOutput);
+        return xmlOutput.getWriter().toString();
+    } catch (Exception e) {
+        throw new RuntimeException(e); // simple exception handling, please review it
+    }
+}
+
+public static String prettyFormat(String input) {
+    return formatXml(input, 2);
+}
+
+public static String readFile(String path, Charset encoding) 
+  throws IOException 
+{
+  byte[] encoded = Files.readAllBytes(Paths.get(path));
+  return new String(encoded, encoding);
+}
+
+public static void main(String[] args){
+try{
+	if (args != null && args.length != 1){
+		System.out.println("Usage:java FormatXml xmlStr");
+		System.exit(-1);
+	}
+	String xmlStr = readFile(args[0], StandardCharsets.UTF_8);
+	System.out.println(prettyFormat(xmlStr));
+}catch(Exception e){
+	e.printStackTrace();
+}
+}
+}
diff --git a/dgbuilder/tools/PrintYangToProp.java b/dgbuilder/tools/PrintYangToProp.java
new file mode 100644
index 0000000..93aaac7
--- /dev/null
+++ b/dgbuilder/tools/PrintYangToProp.java
@@ -0,0 +1,1424 @@
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.io.FileDescriptor;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.io.*;
+import javax.json.*;
+import org.opendaylight.yangtools.yang.binding.Identifier;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.CaseFormat;
+
+public class PrintYangToProp {
+
+	private static final Logger LOG = LoggerFactory.getLogger(PrintYangToProp.class);
+	public static final String PROPERTIES_FILE="/opt/bvc/controller/configuration/flowred.properties";
+	private static Properties properties;
+	
+	static {
+
+		// Trick class loader into loading builders. Some of
+		// these will be needed later by Reflection classes, but need
+		// to explicitly "new" them here to get class loader to load them.
+/*
+		ServiceInformationBuilder b2 = new ServiceInformationBuilder();
+		ServiceDataBuilder b3 = new ServiceDataBuilder();
+		SdncRequestHeaderBuilder b4 = new SdncRequestHeaderBuilder();
+		RequestInformationBuilder b6 = new RequestInformationBuilder();
+
+                FlowredGroupInformationDataBuilder b29 = new FlowredGroupInformationDataBuilder();
+                FlowredInformationDataBuilder b48 = new FlowredInformationDataBuilder();
+
+		OperStatusBuilder b41 = new OperStatusBuilder();
+*/
+
+
+	}
+
+	public static void loadProperties() {
+		/*
+
+		File file = new File(PROPERTIES_FILE); 
+		properties = new Properties();
+		InputStream input = null;
+		if (file.isFile() && file.canRead()) {
+			try	{
+				input = new FileInputStream(file);
+				properties.load(input);
+				LOG.info("Loaded properties from " + PROPERTIES_FILE );
+			} catch (Exception e) {
+				LOG.error("Failed to load properties " + PROPERTIES_FILE +"\n",e);
+			} finally {
+				if (input != null) {
+					try {
+						input.close();
+					} catch (IOException e) {
+						LOG.error("Failed to close properties file " + PROPERTIES_FILE +"\n",e);
+					}
+				}
+			}
+		}
+		*/
+	}
+	
+	public static Properties toProperties(Properties props, Object fromObj) {
+		Class fromClass = null;
+		
+		if (fromObj != null)
+		{
+			fromClass = fromObj.getClass();
+		}
+		return (toProperties(props, "", fromObj, fromClass));
+	}
+	
+	public static Properties toProperties(Properties props, String pfx, Object fromObj)
+	{
+		Class fromClass = null;
+		
+		if (fromObj != null)
+		{
+			fromClass = fromObj.getClass();
+		}
+		
+		return(toProperties(props, pfx, fromObj, fromClass));
+	}
+
+	public static Properties toProperties(Properties props, String pfx,
+			Object fromObj, Class fromClass) {
+
+		if (fromObj == null) {
+			return (props);
+		}
+	
+		
+		String simpleName = fromClass.getSimpleName();
+
+		//LOG.debug("Extracting properties from " + fromClass.getName()
+		//		+ " class");
+		if (fromObj instanceof List) {
+
+			// Class is a List. List should contain yang-generated classes.
+			//LOG.debug(fromClass.getName() + " is a List");
+
+			List fromList = (List) fromObj;
+
+			for (int i = 0; i < fromList.size(); i++) {
+				toProperties(props, pfx + "[" + i + "]", fromList.get(i), fromClass);
+			}
+			props.setProperty(pfx + "_length", "" + fromList.size());
+
+		} else if (isYangGenerated(fromClass)) {
+			// Class is yang generated.
+			//LOG.debug(fromClass.getName() + " is a Yang-generated class");
+
+			String propNamePfx = null;
+
+			// If called from a list (so prefix ends in ']'), don't
+			// add class name again
+			if (pfx.endsWith("]")) {
+				propNamePfx = pfx;
+			} else {
+				if ((pfx != null) && (pfx.length() > 0)) {
+					propNamePfx = pfx ;
+				} else {
+					propNamePfx = toLowerHyphen(fromClass.getSimpleName());
+				}
+
+				if (propNamePfx.endsWith("-builder")) {
+					propNamePfx = propNamePfx.substring(0, propNamePfx.length()
+							- "-builder".length());
+				}
+
+				if (propNamePfx.endsWith("-impl")) {
+					propNamePfx = propNamePfx.substring(0, propNamePfx.length()
+							- "-impl".length());
+				}
+			}
+			
+			// Iterate through getter methods to figure out values we need to
+			// save from
+
+			for (Method m : fromClass.getMethods()) {
+				// LOG.debug("Checking " + m.getName() + " method");
+				if (isGetter(m)) {
+					// LOG.debug(m.getName() + " is a getter");
+					Class returnType = m.getReturnType();
+					String fieldName = toLowerHyphen(m.getName().substring(3));
+					if(m != null && m.getName().matches("^is[A-Z].*")){
+						fieldName = toLowerHyphen(m.getName().substring(2));
+					}
+
+					fieldName = fieldName.substring(0, 1).toLowerCase()
+							+ fieldName.substring(1);
+
+					// Is the return type a yang generated class?
+					if (isYangGenerated(returnType)) {
+						// Is it an enum?
+						if (returnType.isEnum()) {
+							// Return type is a typedef. Save its value.
+							try {
+								boolean isAccessible = m.isAccessible();
+								if (!isAccessible) {
+									m.setAccessible(true);
+								}
+
+								Object retValue = m.invoke(fromObj);
+
+								if (!isAccessible) {
+									m.setAccessible(isAccessible);
+								}
+								if (retValue != null) {
+									String propName = propNamePfx + "."
+											+ fieldName;
+									String propVal = retValue.toString();
+									String yangProp = "yang." + fieldName + "." + propVal;
+									if ( properties.containsKey(yangProp)) {
+										propVal = properties.getProperty(yangProp);
+										//LOG.debug("Adjusting property " + yangProp + " " + propVal);
+									}
+									//LOG.debug("Setting property " + propName
+									//		+ " to " + propVal);
+									props.setProperty(propName, propVal);
+								}
+							} catch (Exception e) {
+								LOG.error(
+										"Caught exception trying to convert Yang-generated enum returned by "
+												+ fromClass.getName() + "."
+												+ m.getName()
+												+ "() to Properties entry", e);
+							}
+						} else if (isIpv4Address(returnType)) {
+							// Save its value
+							try {
+								String propName = propNamePfx + "." + fieldName;
+								boolean isAccessible = m.isAccessible();
+								if (!isAccessible) {
+									m.setAccessible(true);
+								}
+								Ipv4Address retValue = (Ipv4Address) m.invoke(fromObj);
+								if (!isAccessible) {
+									m.setAccessible(isAccessible);
+								}
+
+								if (retValue != null) {
+									String propVal = retValue.getValue().toString();
+									//LOG.debug("Setting property " + propName
+									//		+ " to " + propVal);
+									props.setProperty(propName, propVal);
+
+								}
+							} catch (Exception e) {
+								LOG.error(
+										"Caught exception trying to convert value returned by "
+												+ fromClass.getName() + "."
+												+ m.getName()
+												+ "() to Properties entry", e);
+							}
+						} else if (isIpv6Address(returnType)) {
+							// Save its value
+							try {
+								String propName = propNamePfx + "." + fieldName;
+								boolean isAccessible = m.isAccessible();
+								if (!isAccessible) {
+									m.setAccessible(true);
+								}
+								Ipv6Address retValue = (Ipv6Address) m.invoke(fromObj);
+								if (!isAccessible) {
+									m.setAccessible(isAccessible);
+								}
+
+								if (retValue != null) {
+									String propVal = retValue.getValue().toString();
+									//LOG.debug("Setting property " + propName
+									//		+ " to " + propVal);
+									props.setProperty(propName, propVal);
+
+								}
+							} catch (Exception e) {
+								LOG.error(
+										"Caught exception trying to convert value returned by "
+												+ fromClass.getName() + "."
+												+ m.getName()
+												+ "() to Properties entry", e);
+							}
+						} else {
+							try {
+								boolean isAccessible = m.isAccessible();
+								if (!isAccessible) {
+									m.setAccessible(true);
+								}
+								Object retValue = m.invoke(fromObj);
+								if (!isAccessible) {
+									m.setAccessible(isAccessible);
+								}
+								if (retValue != null) {
+									toProperties(props, propNamePfx + "." + fieldName, retValue, returnType);
+								}
+							} catch (Exception e) {
+								LOG.error(
+										"Caught exception trying to convert Yang-generated class returned by"
+												+ fromClass.getName() + "."
+												+ m.getName()
+												+ "() to Properties entry", e);
+							}
+						}
+					} else if (returnType.equals(Class.class)) {
+
+						//LOG.debug(m.getName()
+						//		+ " returns a Class object - not interested");
+
+					} else if (List.class.isAssignableFrom(returnType)) {
+
+						// This getter method returns a list.
+						try {
+							boolean isAccessible = m.isAccessible();
+							if (!isAccessible) {
+								m.setAccessible(true);
+							}
+							Object retList = m.invoke(fromObj);
+							if (!isAccessible) {
+								m.setAccessible(isAccessible);
+							}
+							// Figure out what type of elements are stored in this array.
+							Type paramType = m.getGenericReturnType();
+							Type elementType = ((ParameterizedType) paramType)
+									.getActualTypeArguments()[0];
+							toProperties(props, propNamePfx + "." + fieldName,
+									retList, (Class)elementType);
+						} catch (Exception e) {
+							LOG.error(
+									"Caught exception trying to convert List returned by "
+											+ fromClass.getName() + "."
+											+ m.getName()
+											+ "() to Properties entry", e);
+						}
+
+					} else {
+
+						// Method returns something that is not a List and not
+						// yang-generated.
+						// Save its value
+						try {
+							String propName = propNamePfx + "." + fieldName;
+							boolean isAccessible = m.isAccessible();
+							if (!isAccessible) {
+								m.setAccessible(true);
+							}
+							Object propValObj = m.invoke(fromObj);
+							if (!isAccessible) {
+								m.setAccessible(isAccessible);
+							}
+
+							if (propValObj != null) {
+								String propVal = propValObj.toString();
+								//LOG.debug("Setting property " + propName
+								//		+ " to " + propVal);
+								props.setProperty(propName, propVal);
+
+							}
+						} catch (Exception e) {
+							LOG.error(
+									"Caught exception trying to convert value returned by "
+											+ fromClass.getName() + "."
+											+ m.getName()
+											+ "() to Properties entry", e);
+						}
+					}
+
+				}
+			}
+
+		} else {
+			// Class is not yang generated and not a list
+			// Do nothing.
+
+		}
+
+		return (props);
+	}
+
+	public static Object toBuilder(Properties props, Object toObj) {
+
+		return (toBuilder(props, "", toObj));
+	}
+
+	public static List toList(Properties props, String pfx, List toObj,
+			Class elemType) {
+
+		int maxIdx = -1;
+		boolean foundValue = false;
+
+		//LOG.debug("Saving properties to List<" + elemType.getName()
+		//		+ ">  from " + pfx);
+
+		// Figure out array size
+		for (Object pNameObj : props.keySet()) {
+			String key = (String) pNameObj;
+
+			if (key.startsWith(pfx + "[")) {
+				String idxStr = key.substring(pfx.length() + 1);
+				int endloc = idxStr.indexOf("]");
+				if (endloc != -1) {
+					idxStr = idxStr.substring(0, endloc);
+				}
+
+				try {
+					int curIdx = Integer.parseInt(idxStr);
+					if (curIdx > maxIdx) {
+						maxIdx = curIdx;
+					}
+				} catch (Exception e) {
+					LOG.error("Illegal subscript in property " + key);
+				}
+
+			}
+		}
+
+		//LOG.debug(pfx + " has max index of " + maxIdx);
+		for (int i = 0; i <= maxIdx; i++) {
+
+			String curBase = pfx + "[" + i + "]";
+
+			if (isYangGenerated(elemType)) {
+				String builderName = elemType.getName() + "Builder";
+				try {
+					Class builderClass = Class.forName(builderName);
+					Object builderObj = builderClass.newInstance();
+					Method buildMethod = builderClass.getMethod("build");
+					builderObj = toBuilder(props, curBase, builderObj, true);
+					if (builderObj != null) {
+						//LOG.debug("Calling " + builderObj.getClass().getName()
+						//		+ "." + buildMethod.getName() + "()");
+						Object builtObj = buildMethod.invoke(builderObj);
+						toObj.add(builtObj);
+						foundValue = true;
+					}
+
+				} catch (ClassNotFoundException e) {
+					LOG.warn("Could not find builder class " + builderName, e);
+				} catch (Exception e) {
+					LOG.error("Caught exception trying to populate list from "
+							+ pfx);
+				}
+			}
+
+		}
+
+		if (foundValue) {
+			return (toObj);
+		} else {
+			return (null);
+		}
+
+	}
+	
+	public static Object toBuilder(Properties props, String pfx, Object toObj) {
+		return(toBuilder(props, pfx, toObj, false));
+	}
+
+	public static Object toBuilder(Properties props, String pfx, Object toObj, boolean preservePfx) {
+		Class toClass = toObj.getClass();
+		boolean foundValue = false;
+
+		//LOG.debug("Saving properties to " + toClass.getName() + " class from "
+		//		+ pfx);
+
+		Ipv4Address addr;
+
+		if (isYangGenerated(toClass)) {
+			// Class is yang generated.
+			//LOG.debug(toClass.getName() + " is a Yang-generated class");
+
+			String propNamePfx = null;
+			if (preservePfx) {
+				propNamePfx = pfx;
+			} else {
+
+				if ((pfx != null) && (pfx.length() > 0)) {
+					propNamePfx = pfx + "."
+							+ toLowerHyphen(toClass.getSimpleName());
+				} else {
+					propNamePfx = toLowerHyphen(toClass.getSimpleName());
+				}
+
+				if (propNamePfx.endsWith("-builder")) {
+					propNamePfx = propNamePfx.substring(0, propNamePfx.length()
+							- "-builder".length());
+				}
+
+				if (propNamePfx.endsWith("-impl")) {
+					propNamePfx = propNamePfx.substring(0, propNamePfx.length()
+							- "-impl".length());
+				}
+			}
+
+			if (toObj instanceof Identifier) {
+				//LOG.debug(toClass.getName() + " is a Key - skipping");
+				return (toObj);
+			}
+
+			// Iterate through getter methods to figure out values we need to
+			// set
+
+			for (Method m : toClass.getMethods()) {
+				// LOG.debug("Is " + m.getName() + " method a setter?");
+				if (isSetter(m)) {
+					// LOG.debug(m.getName() + " is a setter");
+					Class paramTypes[] = m.getParameterTypes();
+					Class paramClass = paramTypes[0];
+
+					String fieldName = toLowerHyphen(m.getName().substring(3));
+					fieldName = fieldName.substring(0, 1).toLowerCase()
+							+ fieldName.substring(1);
+
+					String propName = propNamePfx + "." + fieldName;
+
+					String paramValue = props.getProperty(propName);
+					if (paramValue == null) {
+						//LOG.debug(propName + " is unset");
+					} else {
+						//LOG.debug(propName + " = " + paramValue);
+					}
+
+					// Is the return type a yang generated class?
+					if (isYangGenerated(paramClass)) {
+						// Is it an enum?
+						if (paramClass.isEnum()) {
+
+							//LOG.debug(m.getName() + " expects an Enum");
+							// Param type is a typedef.
+							if (paramValue != null) {
+								Object paramObj = null;
+
+								try {
+									paramObj = Enum.valueOf(paramClass,
+											toUpperCamelCase(paramValue));
+								} catch (Exception e) {
+									LOG.error(
+											"Caught exception trying to convert field "
+													+ propName + " to enum "
+													+ paramClass.getName(), e);
+								}
+
+								try {
+									boolean isAccessible = m.isAccessible();
+									if (!isAccessible) {
+										m.setAccessible(true);
+									}
+
+									//LOG.debug("Calling "
+									//		+ toObj.getClass().getName() + "."
+									//		+ m.getName() + "(" + paramValue
+									//		+ ")");
+									m.invoke(toObj, paramObj);
+
+									if (!isAccessible) {
+										m.setAccessible(isAccessible);
+									}
+									foundValue = true;
+
+								} catch (Exception e) {
+									LOG.error(
+											"Caught exception trying to create Yang-generated enum expected by"
+													+ toClass.getName()
+													+ "."
+													+ m.getName()
+													+ "() from Properties entry",
+											e);
+								}
+							}
+						} else {
+
+							String simpleName = paramClass.getSimpleName();
+
+							if ("Ipv4Address".equals(simpleName)
+									|| "Ipv6Address".equals(simpleName)) {
+								
+								if (paramValue != null) {
+									try {
+										IpAddress ipAddr = IpAddressBuilder
+												.getDefaultInstance(paramValue);
+
+
+										if ("Ipv4Address".equals(simpleName))
+										{
+											m.invoke(toObj, ipAddr.getIpv4Address());
+										}
+										else
+										{
+											m.invoke(toObj, ipAddr.getIpv6Address());
+
+										}
+										foundValue = true;
+									} catch (Exception e) {
+										LOG.error(
+												"Caught exception calling "
+														+ toClass.getName() + "."
+														+ m.getName() + "("
+														+ paramValue + ")", e);
+
+									}
+								}
+
+							} else {
+								// setter expects a yang-generated class. Need
+								// to
+								// create a builder to set it.
+
+								String builderName = paramClass.getName()
+										+ "Builder";
+								Class builderClass = null;
+								Object builderObj = null;
+								Object paramObj = null;
+
+								//LOG.debug(m.getName()
+								//		+ " expects a yang-generated class - looking for builder "
+								//		+ builderName);
+								try {
+									builderClass = Class.forName(builderName);
+									builderObj = builderClass.newInstance();
+									paramObj = toBuilder(props, propNamePfx,
+											builderObj);
+								} catch (ClassNotFoundException e) {
+									Object constObj = null;
+									try {
+										// See if I can find a constructor I can
+										// use
+										Constructor[] constructors = paramClass
+												.getConstructors();
+										// Is there a String constructor?
+										for (Constructor c : constructors) {
+											Class[] cParms = c
+													.getParameterTypes();
+											if ((cParms != null)
+													&& (cParms.length == 1)) {
+												if (String.class
+														.isAssignableFrom(cParms[0])) {
+													constObj = c
+															.newInstance(paramValue);
+												}
+											}
+										}
+
+										if (constObj == null) {
+											// Is there a Long constructor?
+											for (Constructor c : constructors) {
+												Class[] cParms = c
+														.getParameterTypes();
+												if ((cParms != null)
+														&& (cParms.length == 1)) {
+													if (Long.class
+															.isAssignableFrom(cParms[0])) {
+														constObj = c
+																.newInstance(Long
+																		.parseLong(paramValue));
+													}
+												}
+											}
+
+										}
+
+										if (constObj != null) {
+											try {
+												m.invoke(toObj, constObj);
+												foundValue = true;
+											} catch (Exception e2) {
+												LOG.error(
+														"Caught exception trying to call "
+																+ m.getName(),
+														e2);
+											}
+										}
+									} catch (Exception e1) {
+										LOG.warn(
+												"Could not find a suitable constructor for "
+														+ paramClass.getName(),
+												e1);
+									}
+
+									if (paramObj == null) {
+										LOG.warn("Could not find builder class "
+												+ builderName
+												+ " and could not find a String or Long constructor - trying just to set passing paramValue");
+
+									}
+
+								} catch (Exception e) {
+									LOG.error(
+											"Caught exception trying to create builder "
+													+ builderName, e);
+								}
+
+								if (paramObj != null) {
+
+									try {
+
+										Method buildMethod = builderClass
+												.getMethod("build");
+										//LOG.debug("Calling "
+										//		+ paramObj.getClass().getName()
+										//		+ "." + buildMethod.getName()
+										//		+ "()");
+										Object builtObj = buildMethod
+												.invoke(paramObj);
+
+										boolean isAccessible = m.isAccessible();
+										if (!isAccessible) {
+											m.setAccessible(true);
+										}
+
+										//LOG.debug("Calling "
+										//		+ toObj.getClass().getName()
+										//		+ "." + m.getName() + "()");
+										m.invoke(toObj, builtObj);
+										if (!isAccessible) {
+											m.setAccessible(isAccessible);
+										}
+										foundValue = true;
+
+									} catch (Exception e) {
+										LOG.error(
+												"Caught exception trying to set Yang-generated class expected by"
+														+ toClass.getName()
+														+ "."
+														+ m.getName()
+														+ "() from Properties entry",
+												e);
+									}
+								} else {
+									try {
+										boolean isAccessible = m.isAccessible();
+										if (!isAccessible) {
+											m.setAccessible(true);
+										}
+										//LOG.debug("Calling "
+										//		+ toObj.getClass().getName()
+										//		+ "." + m.getName() + "("
+										//		+ paramValue + ")");
+										m.invoke(toObj, paramValue);
+										if (!isAccessible) {
+											m.setAccessible(isAccessible);
+										}
+										foundValue = true;
+
+									} catch (Exception e) {
+										LOG.error(
+												"Caught exception trying to convert value returned by"
+														+ toClass.getName()
+														+ "."
+														+ m.getName()
+														+ "() to Properties entry",
+												e);
+									}
+								}
+							}
+						}
+					} else {
+
+						// Setter's argument is not a yang-generated class. See
+						// if it is a List.
+
+						if (List.class.isAssignableFrom(paramClass)) {
+
+							//LOG.debug("Parameter class " + paramClass.getName()
+							//		+ " is a List");
+
+							// Figure out what type of args are in List and pass
+							// that to toList().
+
+							Type paramType = m.getGenericParameterTypes()[0];
+							Type elementType = ((ParameterizedType) paramType)
+									.getActualTypeArguments()[0];
+							Object paramObj = new LinkedList();
+							try {
+								paramObj = toList(props, propName,
+										(List) paramObj, (Class) elementType);
+							} catch (Exception e) {
+								LOG.error("Caught exception trying to create list expected as argument to "
+										+ toClass.getName() + "." + m.getName());
+							}
+
+							if (paramObj != null) {
+								try {
+									boolean isAccessible = m.isAccessible();
+									if (!isAccessible) {
+										m.setAccessible(true);
+									}
+									//LOG.debug("Calling "
+									//		+ toObj.getClass().getName() + "."
+									//		+ m.getName() + "(" + paramValue
+									//		+ ")");
+									m.invoke(toObj, paramObj);
+									if (!isAccessible) {
+										m.setAccessible(isAccessible);
+									}
+									foundValue = true;
+
+								} catch (Exception e) {
+									LOG.error(
+											"Caught exception trying to convert List returned by"
+													+ toClass.getName() + "."
+													+ m.getName()
+													+ "() to Properties entry",
+											e);
+								}
+							}
+						} else {
+
+							// Setter expects something that is not a List and
+							// not yang-generated. Just pass the parameter value
+
+							//LOG.debug("Parameter class "
+							//		+ paramClass.getName()
+							//		+ " is not a yang-generated class or a List");
+
+							if (paramValue != null) {
+
+								Object constObj = null;
+
+								try {
+									// See if I can find a constructor I can use
+									Constructor[] constructors = paramClass
+											.getConstructors();
+									// Is there a String constructor?
+									for (Constructor c : constructors) {
+										Class[] cParms = c.getParameterTypes();
+										if ((cParms != null)
+												&& (cParms.length == 1)) {
+											if (String.class
+													.isAssignableFrom(cParms[0])) {
+												constObj = c
+														.newInstance(paramValue);
+											}
+										}
+									}
+
+									if (constObj == null) {
+										// Is there a Long constructor?
+										for (Constructor c : constructors) {
+											Class[] cParms = c
+													.getParameterTypes();
+											if ((cParms != null)
+													&& (cParms.length == 1)) {
+												if (Long.class
+														.isAssignableFrom(cParms[0])) {
+													constObj = c
+															.newInstance(Long
+																	.parseLong(paramValue));
+												}
+											}
+										}
+
+									}
+
+									if (constObj != null) {
+										try {
+											//LOG.debug("Calling "
+											//		+ toObj.getClass()
+											//				.getName() + "."
+											//		+ m.getName() + "("
+											//		+ constObj + ")");
+											m.invoke(toObj, constObj);
+											foundValue = true;
+										} catch (Exception e2) {
+											LOG.error(
+													"Caught exception trying to call "
+															+ m.getName(), e2);
+										}
+									} else {
+										try {
+											boolean isAccessible = m
+													.isAccessible();
+											if (!isAccessible) {
+												m.setAccessible(true);
+											}
+											//LOG.debug("Calling "
+											//		+ toObj.getClass()
+											//				.getName() + "."
+											//		+ m.getName() + "("
+											//		+ paramValue + ")");
+											m.invoke(toObj, paramValue);
+											if (!isAccessible) {
+												m.setAccessible(isAccessible);
+											}
+											foundValue = true;
+
+										} catch (Exception e) {
+											LOG.error(
+													"Caught exception trying to convert value returned by"
+															+ toClass.getName()
+															+ "."
+															+ m.getName()
+															+ "() to Properties entry",
+													e);
+										}
+									}
+								} catch (Exception e1) {
+									LOG.warn(
+											"Could not find a suitable constructor for "
+													+ paramClass.getName(), e1);
+								}
+
+								/*
+								 * try { boolean isAccessible =
+								 * m.isAccessible(); if (!isAccessible) {
+								 * m.setAccessible(true); } LOG.debug("Calling "
+								 * + toObj.getClass().getName() + "." +
+								 * m.getName() + "(" + paramValue + ")");
+								 * m.invoke(toObj, paramValue); if
+								 * (!isAccessible) {
+								 * m.setAccessible(isAccessible); } foundValue =
+								 * true;
+								 * 
+								 * } catch (Exception e) { LOG.error(
+								 * "Caught exception trying to convert value returned by"
+								 * + toClass.getName() + "." + m.getName() +
+								 * "() to Properties entry", e); }
+								 */
+							}
+						}
+					}
+				} // End of section handling "setter" method
+			} // End of loop through Methods
+		} // End of section handling yang-generated class
+
+		if (foundValue) {
+			return (toObj);
+		} else {
+			return (null);
+		}
+	}
+
+/*
+	public static void printPropertyList(PrintStream pstr, String pfx,
+			Class toClass) {
+		boolean foundValue = false;
+
+		//LOG.debug("Analyzing " + toClass.getName() + " class : pfx " + pfx);
+
+		if (isYangGenerated(toClass)
+				&& (!Identifier.class.isAssignableFrom(toClass))) {
+			// Class is yang generated.
+			//LOG.debug(toClass.getName() + " is a Yang-generated class");
+
+			if (toClass.getName().endsWith("Key")) {
+				if (Identifier.class.isAssignableFrom(toClass)) {
+					//LOG.debug(Identifier.class.getName()
+					//		+ " is assignable from " + toClass.getName());
+				} else {
+
+					//LOG.debug(Identifier.class.getName()
+					//		+ " is NOT assignable from " + toClass.getName());
+				}
+			}
+
+			String propNamePfx = null;
+			if (pfx.endsWith("]")) {
+				propNamePfx = pfx;
+			} else {
+
+				if ((pfx != null) && (pfx.length() > 0)) {
+					propNamePfx = pfx + "."
+							+ toLowerHyphen(toClass.getSimpleName());
+				} else {
+					propNamePfx = toLowerHyphen(toClass.getSimpleName());
+				}
+
+				if (propNamePfx.endsWith("-builder")) {
+					propNamePfx = propNamePfx.substring(0, propNamePfx.length()
+							- "-builder".length());
+				}
+
+				if (propNamePfx.endsWith("-impl")) {
+					propNamePfx = propNamePfx.substring(0, propNamePfx.length()
+							- "-impl".length());
+				}
+			}
+
+			// Iterate through getter methods to figure out values we need to
+			// set
+
+			for (Method m : toClass.getMethods()) {
+				//LOG.debug("Is " + m.getName() + " method a getter?");
+				if (isGetter(m)) {
+					//LOG.debug(m.getName() + " is a getter");
+					Class returnClass = m.getReturnType();
+
+					String fieldName = toLowerHyphen(m.getName().substring(3));
+					fieldName = fieldName.substring(0, 1).toLowerCase()
+							+ fieldName.substring(1);
+
+					String propName = propNamePfx + "." + fieldName;
+
+					// Is the return type a yang generated class?
+					if (isYangGenerated(returnClass)) {
+						// Is it an enum?
+						if (returnClass.isEnum()) {
+							//System.out.println(returnClass.getSimpleName());
+							//System.out.println(Arrays.asList(returnClass.getEnumConstants()));
+
+							//LOG.debug(m.getName() + " is an Enum");
+							pstr.print("\n" + propName + ":Enum:" + Arrays.asList(returnClass.getEnumConstants()) + "\n");
+
+						} else {
+							
+							String simpleName = returnClass.getSimpleName();
+							
+							if ("Ipv4Address".equals(simpleName) || "Ipv6Address".equals(simpleName)) {
+								//LOG.debug(m.getName()+" is an "+simpleName);
+								pstr.print("\n" + propName + ":" + simpleName + "\n");
+							} else {
+								printPropertyList(pstr, propNamePfx, returnClass);
+							}
+
+						}
+					} else {
+
+						// Setter's argument is not a yang-generated class. See
+						// if it is a List.
+
+						if (List.class.isAssignableFrom(returnClass)) {
+
+							//LOG.debug("Parameter class "
+									//+ returnClass.getName() + " is a List");
+
+							// Figure out what type of args are in List and pass
+							// that to toList().
+
+							Type returnType = m.getGenericReturnType();
+							Type elementType = ((ParameterizedType) returnType)
+									.getActualTypeArguments()[0];
+							Class elementClass = (Class) elementType;
+							//LOG.debug("Calling printPropertyList on list type ("
+									//+ elementClass.getName()
+									//+ "), pfx is ("
+								//	+ pfx
+								//	+ "), toClass is ("
+								//	+ toClass.getName() + ")");
+							printPropertyList(
+									pstr,
+									propNamePfx
+											+ "."
+											+ toLowerHyphen(elementClass
+													.getSimpleName()) + "[]",
+									elementClass);
+
+						} else if (!returnClass.equals(Class.class)) {
+
+							// Setter expects something that is not a List and
+							// not yang-generated. Just pass the parameter value
+
+							//LOG.debug("Parameter class "
+							//		+ returnClass.getName()
+							//		+ " is not a yang-generated class or a List");
+							String className=returnClass.getName();
+							
+							//"org.opendaylight.yangtools.yang.binding.Identifier" 
+							int nClassNameIndex = className.lastIndexOf('.');
+							String nClassName = className;
+							if(nClassNameIndex != -1){
+								nClassName=className.substring(nClassNameIndex+1);
+							}
+							pstr.print("\n" + propName +":" + nClassName +"\n");
+
+						}
+					}
+				} // End of section handling "setter" method
+			} // End of loop through Methods
+		} // End of section handling yang-generated class
+
+	}
+*/
+
+	public static Properties prop = new Properties();
+	public static ArrayList<String> propList = new ArrayList<String>();
+	public static Properties getProperties(PrintStream pstr, String pfx,
+			Class toClass) {
+		boolean foundValue = false;
+
+		//LOG.debug("Analyzing " + toClass.getName() + " class : pfx " + pfx);
+
+		if (isYangGenerated(toClass)
+				&& (!Identifier.class.isAssignableFrom(toClass))) {
+			// Class is yang generated.
+			//LOG.debug(toClass.getName() + " is a Yang-generated class");
+
+			if (toClass.getName().endsWith("Key")) {
+				if (Identifier.class.isAssignableFrom(toClass)) {
+					//LOG.debug(Identifier.class.getName()
+					//		+ " is assignable from " + toClass.getName());
+				} else {
+
+					//LOG.debug(Identifier.class.getName()
+					//		+ " is NOT assignable from " + toClass.getName());
+				}
+			}
+
+			String propNamePfx = null;
+			if (pfx.endsWith("]")) {
+				propNamePfx = pfx;
+			}else if(pfx.indexOf(".CLASS_FOUND") != -1){
+				pfx = pfx.replace(".CLASS_FOUND","");	
+				propNamePfx = pfx + "."
+					+ toLowerHyphen(toClass.getSimpleName());
+			} else {
+
+				if ((pfx != null) && (pfx.length() > 0)) {
+					propNamePfx = pfx + "."
+							+ toLowerHyphen(toClass.getSimpleName());
+				} else {
+					propNamePfx = toLowerHyphen(toClass.getSimpleName());
+				}
+
+				if (propNamePfx.endsWith("-builder")) {
+					propNamePfx = propNamePfx.substring(0, propNamePfx.length()
+							- "-builder".length());
+				}
+
+				if (propNamePfx.endsWith("-impl")) {
+					propNamePfx = propNamePfx.substring(0, propNamePfx.length()
+							- "-impl".length());
+				}
+			}
+
+			// Iterate through getter methods to figure out values we need to
+			// set
+
+			for (Method m : toClass.getMethods()) {
+				//LOG.debug("Is " + m.getName() + " method a getter?");
+				if (isGetter(m)) {
+				//	LOG.debug(m.getName() + " is a getter");
+					Class returnClass = m.getReturnType();
+
+					String fieldName = toLowerHyphen(m.getName().substring(3));
+					if(m != null && m.getName().matches("^is[A-Z].*")){
+						fieldName = toLowerHyphen(m.getName().substring(2));
+					}
+					fieldName = fieldName.substring(0, 1).toLowerCase()
+							+ fieldName.substring(1);
+
+					String propName = propNamePfx + "." + fieldName;
+					//System.out.println("****" + propName);
+
+					// Is the return type a yang generated class?
+					if (isYangGenerated(returnClass)) {
+						// Is it an enum?
+						if (returnClass.isEnum()) {
+
+							//LOG.debug(m.getName() + " is an Enum");
+							//pstr.print("\n" + propName);
+							//pstr.print("\n" + propName + ":Enum:" + Arrays.asList(returnClass.getEnumConstants()) + "\n");
+							pstr.print("\"" + propName + ":Enum:" + Arrays.asList(returnClass.getEnumConstants()) + "\",");
+							prop.setProperty(propName,"");
+							propList.add(propName);
+
+						} else {
+							
+							String simpleName = returnClass.getSimpleName();
+							//System.out.println("simpleName:" + simpleName);
+							
+							if ("Ipv4Address".equals(simpleName) || "Ipv6Address".equals(simpleName) || "IpAddress".equals(simpleName)) {
+								//LOG.debug(m.getName()+" is an "+simpleName);
+								//pstr.print("\n" + propName);
+								//pstr.print("\n" + propName + ":" + simpleName + "\n");
+								pstr.print("\"" + propName + ":" + simpleName + "\",");
+								prop.setProperty(propName,"");
+								propList.add(propName);
+							} else {
+								boolean isString = false;
+								boolean isNumber = false;
+								boolean isBoolean = false;
+								boolean isIdentifier = false;
+								//System.out.println("simpleName:" + simpleName);
+								//System.out.println("propName:" + propName);
+								for(Method mthd : returnClass.getMethods()){
+									String methodName = mthd.getName();
+									//System.out.println("methodName:" + methodName);
+									if(methodName.equals("getValue")){
+										Class retType = mthd.getReturnType();
+										//System.out.println("retType:" + retType);
+										isString = String.class.isAssignableFrom(retType);
+										isNumber = Number.class.isAssignableFrom(retType);
+										isBoolean = Boolean.class.isAssignableFrom(retType);
+										isIdentifier = Identifier.class.isAssignableFrom(retType);
+										//System.out.println("isString:" + isString);
+										//System.out.println("isNumber:" + isNumber);
+										//System.out.println("isNumber:" + isNumber);
+										break;
+									}
+								}
+
+								if(isString){
+									pstr.print("\"" + propName + ":String\",");
+									prop.setProperty(propName,"");
+									propList.add(propName);
+								}else if(isNumber){
+									pstr.print("\"" + propName + ":Number\",");
+									prop.setProperty(propName,"");
+									propList.add(propName);
+								}else if(isBoolean){
+									pstr.print("\"" + propName + ":Boolean\",");
+									prop.setProperty(propName,"");
+									propList.add(propName);
+								}else if(isIdentifier){
+									//System.out.println("isIdentifier");
+									//isIdentifer so skipping 
+									continue;
+								}else{
+								/*
+								System.out.println("fieldName:" + fieldName);
+								System.out.println("simpleName:" + simpleName);
+								System.out.println("returnClass:" + returnClass);
+								System.out.println("pstr:" + pstr);
+								System.out.println("propNamePfx:" + propNamePfx);
+								*/
+								getProperties(pstr, propNamePfx + ".CLASS_FOUND", returnClass);
+								}
+							}
+
+						}
+					} else {
+
+						// Setter's argument is not a yang-generated class. See
+						// if it is a List.
+
+						if (List.class.isAssignableFrom(returnClass)) {
+
+							//LOG.debug("Parameter class "
+							//		+ returnClass.getName() + " is a List");
+
+							// Figure out what type of args are in List and pass
+							// that to toList().
+
+							Type returnType = m.getGenericReturnType();
+							Type elementType = ((ParameterizedType) returnType)
+									.getActualTypeArguments()[0];
+							Class elementClass = (Class) elementType;
+							//LOG.debug("Calling printPropertyList on list type ("
+									//+ elementClass.getName()
+								//	+ "), pfx is ("
+								//	+ pfx
+								//	+ "), toClass is ("
+								//	+ toClass.getName() + ")");
+							//System.out.println("List propNamePfx:" + propNamePfx+ "." + toLowerHyphen(elementClass.getSimpleName()) + "[]");
+							if(String.class.isAssignableFrom(elementClass)){
+								pstr.print("\"" + propName + ":[String,String,...]\",");
+								prop.setProperty(propName,"");
+								propList.add(propName);
+							}else if(Number.class.isAssignableFrom(elementClass)){
+								pstr.print("\"" + propName + ":[Number,Number,...]\",");
+								prop.setProperty(propName,"");
+								propList.add(propName);
+							}else if(Boolean.class.isAssignableFrom(elementClass)){
+								pstr.print("\"" + propName + ":[Boolean,Boolean,...]\",");
+								prop.setProperty(propName,"");
+								propList.add(propName);
+							}else if(Identifier.class.isAssignableFrom(elementClass)){
+								continue;
+							}else{
+								getProperties(
+									pstr,
+									propNamePfx
+											+ "."
+											+ toLowerHyphen(elementClass
+													.getSimpleName()) + "[]",
+									elementClass);
+							}
+
+						} else if (!returnClass.equals(Class.class)) {
+
+							// Setter expects something that is not a List and
+							// not yang-generated. Just pass the parameter value
+
+							//LOG.debug("Parameter class "
+							//		+ returnClass.getName()
+							//		+ " is not a yang-generated class or a List");
+
+							//pstr.print("\n" + propName);
+							String className=returnClass.getName();
+							int nClassNameIndex = className.lastIndexOf('.');
+							String nClassName = className;
+							if(nClassNameIndex != -1){
+								nClassName=className.substring(nClassNameIndex+1);
+							}
+							boolean isString = String.class.isAssignableFrom(returnClass);
+							boolean isNumber = Number.class.isAssignableFrom(returnClass);
+							boolean isBoolean = Boolean.class.isAssignableFrom(returnClass);
+							//pstr.print("\n" + propName +":" + nClassName +"\n");
+							boolean isIdentifier = Identifier.class.isAssignableFrom(returnClass);
+							if(!isIdentifier && !nClassName.equals("[C")){
+								if(isNumber){
+									pstr.print("\"" + propName +":Number\",");
+								}else if(isBoolean){
+									pstr.print("\"" + propName +":Boolean\",");
+								}else{
+									if(nClassName.equals("[B")){
+										pstr.print("\"" + propName +":Binary\",");
+									}else{
+										pstr.print("\"" + propName +":" + nClassName +"\",");
+									}
+								}
+								prop.setProperty(propName,"");
+								propList.add(propName);
+							}
+
+						}
+					}
+				} // End of section handling "setter" method
+			} // End of loop through Methods
+		} // End of section handling yang-generated class
+
+		return prop;
+	}
+
+	public static boolean isYangGenerated(Class c) {
+		if (c == null) {
+			return (false);
+		} else {
+			//System.out.println(c.getName());
+			return (c.getName().startsWith("org.opendaylight.yang.gen."));
+		}
+	}
+	
+	public static boolean isIpv4Address(Class c) {
+		
+		if (c == null ) {
+			return (false);
+		}
+		String simpleName = c.getSimpleName();
+		return ("Ipv4Address".equals(simpleName)) ;
+	}
+	
+	public static boolean isIpv6Address(Class c) {
+		
+		if (c == null ) {
+			return (false);
+		} 
+		String simpleName = c.getSimpleName();
+		return ("Ipv6Address".equals(simpleName)) ;
+	}
+
+	public static String toLowerHyphen(String inStr) {
+		if (inStr == null) {
+			return (null);
+		}
+
+		String str = inStr.substring(0, 1).toLowerCase();
+		if (inStr.length() > 1) {
+			str = str + inStr.substring(1);
+		}
+
+		String regex = "(([a-z0-9])([A-Z]))";
+		String replacement = "$2-$3";
+
+		String retval = str.replaceAll(regex, replacement).toLowerCase();
+
+		//LOG.debug("Converting " + inStr + " => " + str + " => " + retval);
+		return (retval);
+	}
+
+	public static String toUpperCamelCase(String inStr) {
+		if (inStr == null) {
+			return (null);
+		}
+
+		String[] terms = inStr.split("-");
+		StringBuffer sbuff = new StringBuffer();
+		// Check if string begins with a digit
+		if (Character.isDigit(inStr.charAt(0))) {
+			sbuff.append('_');
+		}
+		for (String term : terms) {
+			sbuff.append(term.substring(0, 1).toUpperCase());
+			if (term.length() > 1) {
+				sbuff.append(term.substring(1));
+			}
+		}
+		return (sbuff.toString());
+
+	}
+
+	public static boolean isGetter(Method m) {
+		//System.out.println(m);
+		if (m == null) {
+			return (false);
+		}
+
+		if (Modifier.isPublic(m.getModifiers())
+				&& (m.getParameterTypes().length == 0)) {
+			if ((m.getName().matches("^is[A-Z].*") || m.getName().matches("^get[A-Z].*"))
+					&& m.getReturnType().equals(Boolean.class)) {
+				return (true);
+			}
+			if (m.getName().matches("^get[A-Z].*")
+					&& !m.getReturnType().equals(void.class)) {
+				return (true);
+			}
+
+		}
+
+		return (false);
+	}
+
+	public static boolean isSetter(Method m) {
+		if (m == null) {
+			return (false);
+		}
+
+		if (Modifier.isPublic(m.getModifiers())
+				&& (m.getParameterTypes().length == 1)) {
+			if (m.getName().matches("^set[A-Z].*")) {
+				Class[] paramTypes = m.getParameterTypes();
+				if (paramTypes[0].isAssignableFrom(Identifier.class)
+						|| Identifier.class.isAssignableFrom(paramTypes[0])) {
+					return (false);
+				} else {
+					return (true);
+				}
+			}
+
+		}
+
+		return (false);
+	}
+
+	public static void main(String[] args){
+		try{
+			PrintStream ps = new PrintStream(new FileOutputStream(FileDescriptor.out));
+			PrintYangToProp printYangToProp = new PrintYangToProp();
+			String className = args[0];
+			//ClassLoader classLoader = PrintYangToProp.class.getClassLoader();
+			//Class aClass = classLoader.loadClass(className);
+			Class cl = Class.forName(className);
+			//printPropertyList(ps,"",cl);
+			//JsonObject jsonObj = Json.createObjectBuilder().build();
+			Properties p = getProperties(ps,"",cl);	
+			//System.out.println(p);
+
+		}catch(Exception e){
+			e.printStackTrace();
+		}
+	}
+
+
+}
diff --git a/dgbuilder/tools/auto_app.sh b/dgbuilder/tools/auto_app.sh
new file mode 100755
index 0000000..a3e0f2e
--- /dev/null
+++ b/dgbuilder/tools/auto_app.sh
@@ -0,0 +1,24 @@
+toolsDir=$PROJECT_HOME/tools
+if [ "$#" != "1" ]
+then
+	echo "Usage: $0 appName"
+	exit
+fi
+appName="$1"
+mkdir tmpws
+cd tmpws
+mkdir logs
+mvn archetype:generate -DarchetypeGroupId=com.brocade.developer -DarchetypeArtifactId=brocade.dev.plugin.ext.archetype -DarchetypeVersion=1.2.0.100-SNAPSHOT >${toolsDir}/tmpws/logs/mvn_gen_archetype.log  2>&1  <<EOF
+org.openecomp.sdnc.app
+${appName}
+1.0.0-SNAPSHOT
+org.openecomp.sdnc.app
+Y
+EOF
+if [ "$?" == "0" ]
+then
+	echo "App created successfully"
+else
+	echo "App creation failed"
+fi
+${toolsDir}/update_app_impl_yang.sh "${appName}" $1
diff --git a/dgbuilder/tools/dot_to_json.js b/dgbuilder/tools/dot_to_json.js
new file mode 100644
index 0000000..7ff80e8
--- /dev/null
+++ b/dgbuilder/tools/dot_to_json.js
@@ -0,0 +1,138 @@
+var obj={};
+function dotToJson(str,value,obj){
+    //var objArr = path.split("."), part;
+    var objArr = str.split(".");
+	var prevStr;
+	var currObj;
+	var prevObj;
+	//console.log(str);
+	var isArray = false;
+	var prevObjIsArray = false;
+	for(var i=0;i<objArr.length -1;i++){
+		var subStr= objArr[i] ;
+		if(isArray){
+			prevObjIsArray = true;	
+		}
+		isArray = false;
+		if(subStr.indexOf(']') == subStr.length -1){
+			subStr = subStr.substring(0,subStr.length -2);
+			isArray = true;
+		}
+		//console.log("subStr:" + subStr + isArray);
+		//console.dir(prevObj);
+		if(isArray){
+			if(i==0 && obj[subStr] == undefined ){
+				//console.log("i==0 && obj[subStr] ");
+				obj[subStr]=[];
+			}else if(i==0 && obj[subStr][0] == undefined ){
+						obj[subStr][0]={};
+			}else if(i==0 && obj[subStr][0] != undefined ){
+				currObj= obj[subStr][0];
+			}else{
+				if(i == 1){
+					//console.log("i==1 && obj[prevStr] ");
+	 				prevObj=obj[prevStr];
+					if(prevObj[subStr] != undefined && prevObj[subStr][0] == undefined){
+						prevObj[subStr] = [];
+						prevObj[subStr][0] = {};
+						currObj = prevObj[subStr][0];
+					}else if(prevObj[subStr] != undefined && prevObj[subStr][0] != undefined){
+							currObj = prevObj[subStr][0];
+					}else if(prevObj[subStr] == undefined){
+						prevObj[subStr] = [];
+						prevObj[subStr][0] = {};
+						currObj = prevObj[subStr][0];
+					}
+				}else{
+					if(prevObj[subStr] == undefined){
+						prevObj[subStr]=[];
+						prevObj[subStr][0]={};
+						currObj = prevObj[subStr][0];
+					}else{
+						currObj = prevObj[subStr][0];
+					}
+				}
+			}
+		}else{
+			if(i==0 && obj[subStr] == undefined ){
+				obj[subStr] = {};
+				currObj= obj[subStr];
+			}else if(i==0 && obj[subStr] != undefined ){
+				currObj=obj[subStr];
+			//console.log("in gkjgjkg");
+			}else{
+				if(i == 1){
+	 				prevObj=obj[prevStr];
+					if(prevObj[subStr] == undefined){
+						prevObj[subStr] = {};
+						currObj = prevObj[subStr];
+					}else{
+						currObj = prevObj[subStr];
+					}
+				}else{
+					if(prevObj[subStr] == undefined){
+						prevObj[subStr] = {};
+						currObj = prevObj[subStr];
+					}else{
+						currObj = prevObj[subStr];
+					}
+				}
+			}
+		}
+		prevStr=subStr;
+		if(i <objArr.length-2){
+			//console.dir(currObj);
+			prevObj=currObj;	
+		}
+	}
+	var lastStr = objArr[objArr.length-1];
+	if(isArray){
+		currObj[lastStr] = value;
+	}else{
+		currObj[lastStr] = value;
+	}
+	//prevObj[lastStr] = value;
+	//console.dir(currObj);
+	return obj;
+}
+function printObj(obj){
+for( j in obj){
+	console.log(j + ":" + obj[j]);
+	if(typeof obj[j] == "object" ){
+		printObj(obj[j]);
+	}
+
+}
+}
+
+/*
+var nObj={};
+for(var i=0;i<a.length;i++){
+	dotToJson(a[i],'',nObj);
+}
+*/
+var sliValuesObj = require(process.argv[2]);
+var moduleName = process.argv[3];
+//console.dir(sliValuesObj);
+var a= sliValuesObj[moduleName + "_VALUES"];  
+var rpcs= sliValuesObj[moduleName + "_RPCS"];  
+var nObj={};
+nObj['moduleName'] = moduleName;
+console.log("module.exports = ");
+for(var i=0;i<a.length;i++){
+	var key =a[i].substring(0,a[i].indexOf(':'));
+	//console.log(key);
+	var value =a[i].substring(a[i].indexOf(':') +1);
+	if(value == undefined) value ="";
+	dotToJson(key,value,nObj);
+}
+
+nObj[moduleName + "_PROPS"] =[];
+for(var i=0;i<a.length;i++){
+	var key =a[i].substring(0,a[i].indexOf(':'));
+	nObj[moduleName + "_PROPS"].push(key);
+}
+
+nObj[moduleName + "_RPCS"] = rpcs;
+
+console.log(JSON.stringify(nObj,null,4));
diff --git a/dgbuilder/tools/format_json.sh b/dgbuilder/tools/format_json.sh
new file mode 100755
index 0000000..f86ad3c
--- /dev/null
+++ b/dgbuilder/tools/format_json.sh
@@ -0,0 +1,6 @@
+if [ "$#" != "1" ]
+then
+        echo "Usage: $0 jsonFileFullPath"
+        exit
+fi
+cat $1|python -m json.tool
diff --git a/dgbuilder/tools/format_xml.sh b/dgbuilder/tools/format_xml.sh
new file mode 100755
index 0000000..f0074e6
--- /dev/null
+++ b/dgbuilder/tools/format_xml.sh
@@ -0,0 +1,17 @@
+if [ "$#" != "1" ]
+then
+        echo "Usage: $0 xmlFileFullPath"
+        exit
+fi
+
+if [ -z "$PROJECT_HOME" ]
+then
+        export PROJECT_HOME=$(pwd)/..
+fi
+export CLASSPATH=$CLASSPATH:.
+if [ -e "$1" ]
+then
+	java FormatXml $1
+else
+	echo "File $1 does not exist" 
+fi
diff --git a/dgbuilder/tools/generate_props_from_yang.sh b/dgbuilder/tools/generate_props_from_yang.sh
new file mode 100755
index 0000000..4ce93af
--- /dev/null
+++ b/dgbuilder/tools/generate_props_from_yang.sh
@@ -0,0 +1,28 @@
+if [ -z "$PROJECT_HOME" ] 
+then
+	export PROJECT_HOME=$(pwd)/..
+fi
+
+toolsDir=$PROJECT_HOME/tools
+rm -rf ${toolsDir}/tmpws 
+mkdir ${toolsDir}/tmpws
+mkdir ${toolsDir}/tmpws/logs
+if [ "$#" != "1" ]
+then
+	echo "Command line:$0 $*" >${toolsDir}/tmpws/logs/err.log
+	echo "Usage: $0 yangFile" >>${toolsDir}/tmpws/logs/err.log
+	exit
+fi
+
+appName="yangApp"
+cd ${toolsDir}/tmpws
+mvn archetype:generate -DarchetypeGroupId=com.brocade.developer -DarchetypeArtifactId=brocade.dev.plugin.ext.archetype -DarchetypeVersion=1.2.0.100-SNAPSHOT >${toolsDir}/tmpws/logs/mvn_gen_archetype.log   2>&1  <<EOF
+org.openecomp.sdnc.app
+${appName}
+1.0.0-SNAPSHOT
+org.openecomp.sdnc.app
+Y
+EOF
+${toolsDir}/update_app_impl_yang.sh "${appName}" $1
+echo "Done..."
+
diff --git a/dgbuilder/tools/generate_props_from_yangs.sh b/dgbuilder/tools/generate_props_from_yangs.sh
new file mode 100755
index 0000000..8867cea
--- /dev/null
+++ b/dgbuilder/tools/generate_props_from_yangs.sh
@@ -0,0 +1,28 @@
+if [ -z "$PROJECT_HOME" ]
+then
+	export PROJECT_HOME=$(pwd)/..
+fi
+
+toolsDir=$PROJECT_HOME/tools
+rm -rf ${toolsDir}/tmpws 
+mkdir ${toolsDir}/tmpws
+mkdir ${toolsDir}/tmpws/logs
+if [ "$#" != "2" ]
+then
+	echo "Command line:$0 $*" >${toolsDir}/tmpws/logs/err.log
+	echo "Usage: $0 yangFilesdirectoryFullPath baseYangFile" >>${toolsDir}/tmpws/logs/err.log
+	exit
+fi
+
+appName="yangApp"
+cd ${toolsDir}/tmpws
+mvn archetype:generate -DarchetypeGroupId=com.brocade.developer -DarchetypeArtifactId=brocade.dev.plugin.ext.archetype -DarchetypeVersion=1.2.0.100-SNAPSHOT >${toolsDir}/tmpws/logs/mvn_gen_archetype.log   2>&1  <<EOF
+org.openecomp.sdnc.app
+${appName}
+1.0.0-SNAPSHOT
+org.openecomp.sdnc.app
+Y
+EOF
+${toolsDir}/update_app_impl_yangs.sh "${appName}" $1 $2
+echo "Done..."
+
diff --git a/dgbuilder/tools/generate_props_from_yangs_zip.sh b/dgbuilder/tools/generate_props_from_yangs_zip.sh
new file mode 100755
index 0000000..3960711
--- /dev/null
+++ b/dgbuilder/tools/generate_props_from_yangs_zip.sh
@@ -0,0 +1,36 @@
+if [ "$PROJECT_HOME" == "" ]
+then
+	export PROJECT_HOME=$(pwd)/..
+fi
+
+toolsDir=$PROJECT_HOME/tools
+if [ "$#" != "1" ]
+then
+	echo "Usage: $0 yangFilesZipFullPath"
+	exit
+fi
+yangFilesZipFullPath="$1"
+rm -rf $PROJECT_HOME/tools/tmp
+mkdir $PROJECT_HOME/tools/tmp
+mv ${yangFilesZipFullPath} $PROJECT_HOME/tools/tmp
+cd $PROJECT_HOME/tools/tmp
+zipFile=$(basename $yangFilesZipFullPath)
+unzip $PROJECT_HOME/tools/tmp/$zipFile
+rm ${zipFile}
+for i in $(ls *.yang)
+do
+	fName="$i"
+	extension="${fName##*.}"
+        moduleName="${fName%.*}"	
+ 	count=$(grep -w "import $moduleName" *.yang|wc -l)
+ 	if [ "$count" -eq "0" ]
+ 	then
+		rm -rf $PROJECT_HOME/yangFiles/$moduleName
+		mkdir $PROJECT_HOME/yangFiles/$moduleName
+		mv *.yang $PROJECT_HOME/yangFiles/$moduleName
+		cd $PROJECT_HOME/tools
+		echo ./generate_props_from_yangs.sh "$PROJECT_HOME/yangFiles/$moduleName" "$fName"
+		./generate_props_from_yangs.sh "$PROJECT_HOME/yangFiles/$moduleName" "$fName"
+		exit
+ 	fi	
+done
diff --git a/dgbuilder/tools/getModuleName.sh b/dgbuilder/tools/getModuleName.sh
new file mode 100755
index 0000000..cf0db19
--- /dev/null
+++ b/dgbuilder/tools/getModuleName.sh
@@ -0,0 +1,2 @@
+module=$(cat $1|egrep "module .*{"|awk '{print $2}'|sed -e 's/{//g')
+echo $module
diff --git a/dgbuilder/tools/getRpcsClassFromYang.sh b/dgbuilder/tools/getRpcsClassFromYang.sh
new file mode 100755
index 0000000..d7fc213
--- /dev/null
+++ b/dgbuilder/tools/getRpcsClassFromYang.sh
@@ -0,0 +1,85 @@
+toolsDir=$PROJECT_HOME/tools
+. ${toolsDir}/setClasspath
+if [ "$#" != "2" ]
+then
+	echo "Usage $0 yang_file generated_jar_file"
+	echo "example $0 /home/users/sdnc/src/aic-homing/model/src/main/yang/AicHoming.yang  /home/users/sdnc/src/aic-homing/model/target/aicHoming.model-2.0.0.jar"
+	exit
+fi
+yangFile="$1"
+jarFile="$2"
+module=$(cat $yangFile|egrep "module .*{"|awk '{print $2}'|sed -e 's/{//g')
+#echo "	\"$module\" : ["
+rpcs=$(grep rpc $yangFile|grep -v leaf|sed -e 's/^\s\+rpc//g'|awk '{print $1}')
+#echo ${rpcs}
+for i in `find ${toolsDir}/yangToolsJars -name "*.jar" -print`
+do
+#echo $i
+export CLASSPATH=$CLASSPATH:$i
+done
+export CLASSPATH=$2:$CLASSPATH:.:${toolsDir}/slf4j-api-1.7.2.jar:${toolsDir}/guava-14.0.1.jar:${toolsDir}/printYangToProp.jar
+allProps=""
+for rpc in $rpcs
+do
+rpcVal=$(echo $rpc|sed -e "s/\b\(.\)/\u\1/g"|sed s/\-//g)
+className=$(jar -tvf ${jarFile}|grep "org/opendaylight/yang/gen/"|grep  -w "${rpcVal}Input.class"|grep -v grep|awk '{print $NF}'|sed -e 's/\//./g'|sed -e 's/.class$//g')
+inputProps=""
+if [ "$className" != "" ]
+then
+	#java -cp $CLASSPATH PrintYangToProp $className 2>/dev/null|grep '*' |cut -d'*' -f2|sed -e "s/^[ \t]*//g"|sed -e "s/^/\t\t\"/g"|sed -e "s/$/\",/g"
+	inputProps=$(java -cp $CLASSPATH PrintYangToProp $className 2>${toolsDir}/tmpws/logs/err.log)
+fi
+className=$(jar -tvf ${jarFile}|grep "org/opendaylight/yang/gen/"|grep -w "${rpcVal}Output"|grep -v grep|awk '{print $NF}'|sed -e 's/\//./g'|sed -e 's/.class$//g')
+#echo $inputProps
+#echo $className
+outputProps=""
+if [ "$className" != "" ]
+then
+	#java -cp $CLASSPATH PrintYangToProp $className 2>/dev/null|grep '*' |cut -d'*' -f2|sed -e "s/^[ \t]*//g"|sed -e "s/^/\t\t\"/g"|sed -e "s/$/\",/g"
+	outputProps=$(java -cp $CLASSPATH PrintYangToProp $className 2>${toolsDir}/tmpws/logs/err.log)
+fi
+if [ -z "$allProps" ]
+then
+	allProps=$(echo ${inputProps}${outputProps}|sed -e s/,$//g)
+else
+	allProps=$(echo ${allProps},${inputProps}${outputProps}|sed -e s/,$//g)
+fi
+done
+#allProps=$(echo ${inputProps}${outputProps}|sed -e s/,$//g)
+#echo $allProps
+#OIFS=$IFS
+#IFS=','
+#arr2=$allProps
+#for x in $arr2
+#do
+#    echo "$x"
+#done
+#IFS=$OIFS
+#echo "	]"
+echo "module.exports = {"
+echo "\"moduleName\" : \"${module}\","
+echo "'${module}_VALUES' : "
+echo "[ $allProps ]"|python -m json.tool
+echo ","
+echo "'${module}_RPCS' : ["
+
+cnt=0
+#numOfRpcs=${#rpcs[@]}
+numOfRpcs=0;
+for rpc in $rpcs
+do
+	numOfRpcs=$((numOfRpcs+1))
+done
+
+for rpc in $rpcs
+do
+	cnt=$((cnt+1))
+	if [ $cnt -eq $numOfRpcs ]
+	then
+		echo "		\"$rpc\""
+	else
+		echo "		\"$rpc\","
+        fi
+done
+echo "	]"
+echo "}"
diff --git a/dgbuilder/tools/getRpcsClassFromYangs.sh b/dgbuilder/tools/getRpcsClassFromYangs.sh
new file mode 100755
index 0000000..f3ce4c8
--- /dev/null
+++ b/dgbuilder/tools/getRpcsClassFromYangs.sh
@@ -0,0 +1,85 @@
+toolsDir=$PROJECT_HOME/tools
+. ${toolsDir}/setClasspath
+if [ "$#" != "2" ]
+then
+	echo "Usage $0 yang_file generated_jar_file"
+	echo "example $0 /home/users/sdnc/src/appName/model/src/main/yang/app.yang  /home/users/sdnc/src/appName/model/target/appName.model-2.0.0.jar"
+	exit
+fi
+yangFile="$1"
+jarFile="$2"
+module=$(cat $yangFile|egrep "module .*{"|awk '{print $2}'|sed -e 's/{//g')
+#echo "	\"$module\" : ["
+rpcs=$(grep rpc $yangFile|grep -v leaf|sed -e 's/^\s\+rpc//g'|awk '{print $1}')
+for i in `find ${toolsDir}/yangToolsJars -name "*.jar" -print`
+do
+#echo $i
+export CLASSPATH=$CLASSPATH:$i
+done
+export CLASSPATH=$2:$CLASSPATH:.:${toolsDir}/slf4j-api-1.7.2.jar:${toolsDir}/guava-14.0.1.jar:${toolsDir}/printYangToProp.jar
+allProps=""
+for rpc in $rpcs
+do
+rpcVal=$(echo $rpc|sed -e "s/\b\(.\)/\u\1/g"|sed s/\-//g)
+#echo $rpcVal
+className=$(jar -tvf ${jarFile}|grep "org/opendaylight/yang/gen/"|grep -w "${rpcVal}Input.class"|grep -v grep|awk '{print $NF}'|sed -e 's/\//./g'|sed -e 's/.class$//g')
+#echo $className
+inputProps=""
+if [ "$className" != "" ]
+then
+	#java -cp $CLASSPATH PrintYangToProp $className 2>/dev/null|grep '*' |cut -d'*' -f2|sed -e "s/^[ \t]*//g"|sed -e "s/^/\t\t\"/g"|sed -e "s/$/\",/g"
+	inputProps=$(java -cp $CLASSPATH PrintYangToProp $className 2>${toolsDir}/tmpws/logs/err.log)
+fi
+className=$(jar -tvf ${jarFile}|grep "org/opendaylight/yang/gen/"|grep -w "${rpcVal}Output"|grep -v grep|awk '{print $NF}'|sed -e 's/\//./g'|sed -e 's/.class$//g')
+#echo $inputProps
+#echo $className
+outputProps=""
+if [ "$className" != "" ]
+then
+	#java -cp $CLASSPATH PrintYangToProp $className 2>/dev/null|grep '*' |cut -d'*' -f2|sed -e "s/^[ \t]*//g"|sed -e "s/^/\t\t\"/g"|sed -e "s/$/\",/g"
+	outputProps=$(java -cp $CLASSPATH PrintYangToProp $className 2>${toolsDir}/tmpws/logs/err.log)
+fi
+if [ -z "$allProps" ]
+then
+	allProps=$(echo ${inputProps}${outputProps}|sed -e s/,$//g)
+else
+	allProps=$(echo ${allProps},${inputProps}${outputProps}|sed -e s/,$//g)
+fi
+done
+#echo $allProps
+#OIFS=$IFS
+#IFS=','
+#arr2=$allProps
+#for x in $arr2
+#do
+#    echo "$x"
+#done
+#IFS=$OIFS
+#echo "	]"
+echo "module.exports = {"
+echo "\"moduleName\" : \"${module}\","
+echo "'${module}_VALUES' : "
+echo "[ $allProps ]"|python -m json.tool
+echo ","
+echo "'${module}_RPCS' : ["
+
+cnt=0
+#numOfRpcs=${#rpcs[@]}
+numOfRpcs=0;
+for rpc in $rpcs
+do
+	numOfRpcs=$((numOfRpcs+1))
+done
+
+for rpc in $rpcs
+do
+	cnt=$((cnt+1))
+	if [ $cnt -eq $numOfRpcs ]
+	then
+		echo "		\"$rpc\""
+	else
+		echo "		\"$rpc\","
+        fi
+done
+echo "	]"
+echo "}"
diff --git a/dgbuilder/tools/guava-14.0.1.jar b/dgbuilder/tools/guava-14.0.1.jar
new file mode 100644
index 0000000..3a3d925
--- /dev/null
+++ b/dgbuilder/tools/guava-14.0.1.jar
Binary files differ
diff --git a/dgbuilder/tools/javax.json-api-1.0.jar b/dgbuilder/tools/javax.json-api-1.0.jar
new file mode 100644
index 0000000..d276c79
--- /dev/null
+++ b/dgbuilder/tools/javax.json-api-1.0.jar
Binary files differ
diff --git a/dgbuilder/tools/jsonTool.js b/dgbuilder/tools/jsonTool.js
new file mode 100644
index 0000000..b4ed21f
--- /dev/null
+++ b/dgbuilder/tools/jsonTool.js
@@ -0,0 +1,377 @@
+var obj={};
+function dotToJson(str,value,obj){
+    //var objArr = path.split("."), part;
+    var objArr = str.split(".");
+	var prevStr;
+	var currObj;
+	var prevObj;
+	//console.log(str);
+	var isArray = false;
+	var prevObjIsArray = false;
+	for(var i=0;i<objArr.length -1;i++){
+		var subStr= objArr[i] ;
+		if(isArray){
+			prevObjIsArray = true;	
+		}
+		isArray = false;
+		if(subStr.indexOf(']') == subStr.length -1){
+			subStr = subStr.substring(0,subStr.length -2);
+			isArray = true;
+		}
+		//console.log("subStr:" + subStr + isArray);
+		//console.dir(prevObj);
+		if(isArray){
+			if(i==0 && obj[subStr] == undefined ){
+				//console.log("i==0 && obj[subStr] ");
+				obj[subStr]=[];
+			}else if(i==0 && obj[subStr][0] == undefined ){
+						obj[subStr][0]={};
+			}else if(i==0 && obj[subStr][0] != undefined ){
+				currObj= obj[subStr][0];
+			}else{
+				if(i == 1){
+					//console.log("i==1 && obj[prevStr] ");
+	 				prevObj=obj[prevStr];
+					if(prevObj[subStr][0] == undefined){
+						prevObj[subStr] = [];
+						prevObj[subStr][0] = {};
+						currObj = prevObj[subStr][0];
+					}else{
+						currObj = prevObj[subStr][0];
+					}
+				}else{
+					if(prevObj[subStr] == undefined){
+						prevObj[subStr]=[];
+						prevObj[subStr][0]={};
+						currObj = prevObj[subStr][0];
+					}else{
+						currObj = prevObj[subStr][0];
+					}
+				}
+			}
+		}else{
+			if(i==0 && obj[subStr] == undefined ){
+				obj[subStr] = {};
+				currObj= obj[subStr];
+			}else if(i==0 && obj[subStr] != undefined ){
+				currObj=obj[subStr];
+			//console.log("in gkjgjkg");
+			}else{
+				if(i == 1){
+	 				prevObj=obj[prevStr];
+					if(prevObj[subStr] == undefined){
+						prevObj[subStr] = {};
+						currObj = prevObj[subStr];
+					}else{
+						currObj = prevObj[subStr];
+					}
+				}else{
+					if(prevObj[subStr] == undefined){
+						prevObj[subStr] = {};
+						currObj = prevObj[subStr];
+					}else{
+						currObj = prevObj[subStr];
+					}
+				}
+			}
+		}
+		prevStr=subStr;
+		if(i <objArr.length-2){
+			//console.dir(currObj);
+			prevObj=currObj;	
+		}
+	}
+	var lastStr = objArr[objArr.length-1];
+	if(isArray){
+		currObj[lastStr] = value;
+	}else{
+		currObj[lastStr] = value;
+	}
+	//prevObj[lastStr] = value;
+	//console.dir(currObj);
+	return obj;
+}
+function printObj(obj){
+for( j in obj){
+	console.log(j + ":" + obj[j]);
+	if(typeof obj[j] == "object" ){
+		printObj(obj[j]);
+	}
+
+}
+}
+
+a=[
+'service-configuration-operation-input.service-information.service-instance-id',
+'service-configuration-operation-input.service-information.subscriber-name',
+'service-configuration-operation-input.service-information.service-type',
+'service-configuration-operation-input.svc-config-additional-data.management-ip',
+'service-configuration-operation-input.sdnc-request-header.svc-request-id',
+'service-configuration-operation-input.sdnc-request-header.svc-notification-url',
+'service-configuration-operation-input.sdnc-request-header.svc-action',
+'service-configuration-operation-input.vr-lan.routing-protocol',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-vr-lan-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].vr-designation',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-vr-lan-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-vr-lan-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-vr-lan-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].t-defaulted-v6-vrlan',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-vce-loopback-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-vce-wan-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-dhcp-server-enabled',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-dhcp-server-enabled',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].use-v4-default-pool',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-dhcp-default-pool-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-dhcp-default-pool-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].excluded-v4-dhcp-addresses-from-default-pool[].excluded-v4-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].excluded-v4-dhcp-addresses-from-default-pool[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].use-v6-default-pool',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-dhcp-default-pool-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-dhcp-default-pool-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].excluded-v6-dhcp-addresses-from-default-pool[].excluded-v6-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].excluded-v6-dhcp-addresses-from-default-pool[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-dhcp-pools[].v6-dhcp-pool-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-dhcp-pools[].v6-dhcp-pool-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-dhcp-pools[].v6-dhcp-relay-gateway-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-dhcp-pools[].v6-dhcp-relay-next-hop-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-dhcp-pools[].excluded-v6-addresses[].excluded-v6-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-dhcp-pools[].excluded-v6-addresses[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-dhcp-pools[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-dhcp-pools[].v4-dhcp-relay-next-hop-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-dhcp-pools[].v4-dhcp-pool-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-dhcp-pools[].v4-dhcp-pool-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-dhcp-pools[].v4-dhcp-relay-gateway-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-dhcp-pools[].excluded-v4-addresses[].excluded-v4-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-dhcp-pools[].excluded-v4-addresses[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-dhcp-pools[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-nat-enabled',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-nat-mapping-entries[].v4-nat-internal',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-nat-mapping-entries[].v4-nat-next-hop-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-nat-mapping-entries[].v4-nat-external',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-nat-mapping-entries[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].t-provided-v6-lan-public-prefixes[].request-index',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].t-provided-v6-lan-public-prefixes[].v6-next-hop-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].t-provided-v6-lan-public-prefixes[].v6-lan-public-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].t-provided-v6-lan-public-prefixes[].v6-lan-public-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].t-provided-v6-lan-public-prefixes[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].t-provided-v4-lan-public-prefixes[].request-index',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].t-provided-v4-lan-public-prefixes[].v4-lan-public-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].t-provided-v4-lan-public-prefixes[].v4-next-hop-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].t-provided-v4-lan-public-prefixes[].v4-lan-public-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].t-provided-v4-lan-public-prefixes[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-static-routes[].v6-static-route-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-static-routes[].v6-next-hop-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-static-routes[].v6-static-route-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-static-routes[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-static-routes[].v4-static-route-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-static-routes[].v4-next-hop-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-static-routes[].v4-static-route-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-static-routes[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-pat-enabled',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-pat-default-pool-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].use-v4-default-pool',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-pat-default-pool-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-pat-pools[].v4-pat-pool-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-pat-pools[].v4-pat-pool-next-hop-address',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-pat-pools[].v4-pat-pool-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-pat-pools[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-firewall-packet-filters[].v6-firewall-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-firewall-packet-filters[].v6-firewall-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-firewall-packet-filters[].allow-icmp-ping',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-firewall-packet-filters[].udp-port-list[].port-number',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-firewall-packet-filters[].udp-port-list[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-firewall-packet-filters[].tcp-port-list[].port-number',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-firewall-packet-filters[].tcp-port-list[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v6-firewall-packet-filters[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].stateful-firewall-lite-v4-enabled',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].stateful-firewall-lite-v6-enabled',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-firewall-packet-filters[].allow-icmp-ping',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-firewall-packet-filters[].udp-port-list[].port-number',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-firewall-packet-filters[].udp-port-list[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-firewall-packet-filters[].tcp-port-list[].port-number',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-firewall-packet-filters[].tcp-port-list[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-firewall-packet-filters[].v4-firewall-prefix',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-firewall-packet-filters[].v4-firewall-prefix-length',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].v4-firewall-packet-filters[].key',
+'service-configuration-operation-input.vr-lan.vr-lan-interface[].key',
+'service-configuration-operation-input.internet-evc-access-information.internet-evc-speed-value',
+'service-configuration-operation-input.internet-evc-access-information.ip-version',
+'service-configuration-operation-input.internet-evc-access-information.internet-evc-speed-units',
+'service-configuration-operation-input.l2-homing-information.preferred-aic-clli',
+'service-configuration-operation-input.l2-homing-information.evc-name',
+'service-configuration-operation-input.l2-homing-information.topology',
+'service-configuration-operation-input.internet-service-change-details.internet-evc-speed-value',
+'service-configuration-operation-input.internet-service-change-details.internet-evc-speed-units',
+'service-configuration-operation-input.internet-service-change-details.t-provided-v4-lan-public-prefixes[].request-index',
+'service-configuration-operation-input.internet-service-change-details.t-provided-v4-lan-public-prefixes[].v4-lan-public-prefix',
+'service-configuration-operation-input.internet-service-change-details.t-provided-v4-lan-public-prefixes[].v4-lan-public-prefix-length',
+'service-configuration-operation-input.internet-service-change-details.t-provided-v4-lan-public-prefixes[].key',
+'service-configuration-operation-input.internet-service-change-details.t-provided-v6-lan-public-prefixes[].request-index',
+'service-configuration-operation-input.internet-service-change-details.t-provided-v6-lan-public-prefixes[].v6-lan-public-prefix',
+'service-configuration-operation-input.internet-service-change-details.t-provided-v6-lan-public-prefixes[].v6-lan-public-prefix-length',
+'service-configuration-operation-input.internet-service-change-details.t-provided-v6-lan-public-prefixes[].key'
+];
+
+a=[
+    "service-configuration-operation-input.sdnc-request-header.svc-notification-url",
+    "service-configuration-operation-input.sdnc-request-header.svc-request-id",
+    "service-configuration-operation-input.sdnc-request-header.svc-action",
+    "service-configuration-operation-input.vpe-vpn-service.route-target",
+    "service-configuration-operation-input.vpe-vpn-service.e2e-vpn-key",
+    "service-configuration-operation-input.vpe-vpn-service.vpn-id",
+    "service-configuration-operation-input.vpe-vpn-service.vpn-vame",
+    "service-configuration-operation-input.vpe-vpn-service.spoke-routes.route-target",
+    "service-configuration-operation-input.vpe-vpn-service.spoke-routes.max-threshold",
+    "service-configuration-operation-input.vpe-vpn-service.spoke-routes.max-routes-limit",
+    "service-configuration-operation-input.vpe-vpn-service.v4-max-routes.max-routes-limit-warning",
+    "service-configuration-operation-input.vpe-vpn-service.v4-max-routes.max-routes-limit",
+    "service-configuration-operation-input.vpe-vpn-service.v6-max-routes.max-routes-limit-warning",
+    "service-configuration-operation-input.vpe-vpn-service.v6-max-routes.max-routes-limit",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.vpn-multicast-planned-region[].regions",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.vpn-multicast-planned-region[].key",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.vpn-v4-multicast-enabled",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.max-routes-limit-warning",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.max-routes-limit",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-data-mdt",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-static-rp-triplet[].rp-address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-static-rp-triplet[].c-groups[].group-address-prefix-length",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-static-rp-triplet[].c-groups[].c-group-address-prefix",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-static-rp-triplet[].c-groups[].key",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-static-rp-triplet[].key",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-pim-sm-static-override",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-pim-ssm-default-range",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-pim-ssm-groups[].v4-pim-ssm-group-address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-pim-ssm-groups[].v4-pim-ssm-group-address-prefix-length",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-pim-ssm-groups[].key",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-default-mdt",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-data-mdt-wildcard-mask",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.vpn-v6-multicast-enabled",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.max-routes-limit-warning",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.max-routes-limit",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-static-rp-triplet[].rp-address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-static-rp-triplet[].c-groups[].group-address-prefix-length",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-static-rp-triplet[].c-groups[].c-group-address-prefix",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-static-rp-triplet[].c-groups[].key",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-static-rp-triplet[].key",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-pim-sm-static-override",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-pim-ssm-default-range",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-pim-ssm-groups[].v6-pim-ssm-group-address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-pim-ssm-groups[].v6-pim-ssm-group-address-prefix-length",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-pim-ssm-groups[].key",
+    "service-configuration-operation-input.vpe-vpn-service.customer-id",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].router-distinguisher",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vpe-name",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vrf-import-details[].vrf-import",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vrf-import-details[].key",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].member",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].name",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vrf-name",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vrf-export-details[].vrf-export",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vrf-export-details[].key",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].apply-group-template[].apply-group",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].apply-group-template[].key",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].key",
+    "service-configuration-operation-input.service-information.subscriber-name",
+    "service-configuration-operation-input.service-information.subscriber-global-id",
+    "service-configuration-operation-input.service-information.service-type",
+    "service-configuration-operation-input.service-information.service-instance-id",
+    "service-configuration-operation-input.request-information.notification-url",
+    "service-configuration-operation-input.request-information.order-number",
+    "service-configuration-operation-input.request-information.order-version",
+    "service-configuration-operation-input.request-information.request-action",
+    "service-configuration-operation-input.request-information.request-sub-action",
+    "service-configuration-operation-input.request-information.source",
+    "service-configuration-operation-input.request-information.request-id",
+    "service-configuration-operation-output.configuration-response-common.svc-request-id",
+    "service-configuration-operation-output.configuration-response-common.response-message",
+    "service-configuration-operation-output.configuration-response-common.ack-final-indicator",
+    "service-configuration-operation-output.configuration-response-common.response-code"
+];
+var nObj={};
+for(var i=0;i<a.length;i++){
+	dotToJson(a[i],'',nObj);
+}
+var a = [
+    "service-configuration-operation-input.sdnc-request-header.svc-notification-url:String",
+    "service-configuration-operation-input.sdnc-request-header.svc-request-id:String",
+    "service-configuration-operation-input.sdnc-request-header.svc-action:Enum:[Createupdatevpn]",
+    "service-configuration-operation-input.vpe-vpn-service.route-target:String",
+    "service-configuration-operation-input.vpe-vpn-service.e2e-vpn-key:String",
+    "service-configuration-operation-input.vpe-vpn-service.vpn-id:Integer",
+    "service-configuration-operation-input.vpe-vpn-service.vpn-vame:String",
+    "service-configuration-operation-input.vpe-vpn-service.spoke-routes.route-target:String",
+    "service-configuration-operation-input.vpe-vpn-service.spoke-routes.max-threshold:Short",
+    "service-configuration-operation-input.vpe-vpn-service.spoke-routes.max-routes-limit:BigInteger",
+    "service-configuration-operation-input.vpe-vpn-service.v4-max-routes.max-routes-limit-warning:Short",
+    "service-configuration-operation-input.vpe-vpn-service.v4-max-routes.max-routes-limit:BigInteger",
+    "service-configuration-operation-input.vpe-vpn-service.v6-max-routes.max-routes-limit-warning:Short",
+    "service-configuration-operation-input.vpe-vpn-service.v6-max-routes.max-routes-limit:BigInteger",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.vpn-multicast-planned-region[].regions:Enum:[EMEA, US, AP, LA, Canada]",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.vpn-multicast-planned-region[].key:Identifier",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.vpn-v4-multicast-enabled:Enum:[Y, N]",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.max-routes-limit-warning:Short",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.max-routes-limit:BigInteger",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-data-mdt:Ipv4Address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-static-rp-triplet[].rp-address:Ipv4Address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-static-rp-triplet[].c-groups[].group-address-prefix-length:Short",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-static-rp-triplet[].c-groups[].c-group-address-prefix:Ipv4Address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-static-rp-triplet[].c-groups[].key:Identifier",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-static-rp-triplet[].key:Identifier",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-pim-sm-static-override:Enum:[Y, N]",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-pim-ssm-default-range:Enum:[Y, N]",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-pim-ssm-groups[].v4-pim-ssm-group-address:Ipv4Address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-pim-ssm-groups[].v4-pim-ssm-group-address-prefix-length:Short",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-pim-ssm-groups[].key:Identifier",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-default-mdt:Ipv4Address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v4-multicast.v4-data-mdt-wildcard-mask:Ipv4Address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.vpn-v6-multicast-enabled:Enum:[Y, N]",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.max-routes-limit-warning:Short",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.max-routes-limit:BigInteger",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-static-rp-triplet[].rp-address:Ipv6Address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-static-rp-triplet[].c-groups[].group-address-prefix-length:Short",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-static-rp-triplet[].c-groups[].c-group-address-prefix:Ipv6Address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-static-rp-triplet[].c-groups[].key:Identifier",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-static-rp-triplet[].key:Identifier",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-pim-sm-static-override:Enum:[Y, N]",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-pim-ssm-default-range:Enum:[Y, N]",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-pim-ssm-groups[].v6-pim-ssm-group-address:Ipv6Address",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-pim-ssm-groups[].v6-pim-ssm-group-address-prefix-length:Short",
+    "service-configuration-operation-input.vpe-vpn-service.multicast-parameters.v6-multicast.v6-pim-ssm-groups[].key:Identifier",
+    "service-configuration-operation-input.vpe-vpn-service.customer-id:String",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].router-distinguisher:String",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vpe-name:String",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vrf-import-details[].vrf-import:String",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vrf-import-details[].key:Identifier",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].member:String",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].name:String",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vrf-name:String",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vrf-export-details[].vrf-export:String",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].vrf-export-details[].key:Identifier",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].apply-group-template[].apply-group:String",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].apply-group-template[].key:Identifier",
+    "service-configuration-operation-input.vpe-vpn-service.vrf-details[].key:Identifier",
+    "service-configuration-operation-input.service-information.subscriber-name:String",
+    "service-configuration-operation-input.service-information.subscriber-global-id:String",
+    "service-configuration-operation-input.service-information.service-type:Enum:[NBIPVPN]",
+    "service-configuration-operation-input.service-information.service-instance-id:String",
+    "service-configuration-operation-input.request-information.notification-url:String",
+    "service-configuration-operation-input.request-information.order-number:String",
+    "service-configuration-operation-input.request-information.order-version:String",
+    "service-configuration-operation-input.request-information.request-action:Enum:[Layer3ServiceVPNRequest]",
+    "service-configuration-operation-input.request-information.request-sub-action:Enum:[ACTIVATE, COMPLETE, CANCEL, SUPP]",
+    "service-configuration-operation-input.request-information.source:String",
+    "service-configuration-operation-input.request-information.request-id:String"
+]
+var nObj={};
+for(var i=0;i<a.length;i++){
+	var key =a[i].substring(0,a[i].indexOf(':'));
+	console.log(key);
+	var value =a[i].substring(a[i].indexOf(':') +1);
+	if(value == undefined) value ="";
+	dotToJson(key,value,nObj);
+}
+//nObj={};,
+//var a1='service-configuration-operation-input[].vr-lan.vr-lan-interface[].v4-firewall-packet-filters[].v4-firewall-prefix-length';,
+	//dotToJson(a1,'',nObj);
+console.log(JSON.stringify(nObj,null,4));
+//console.log (stringToObj('abc.ebg.h',"",{}));
diff --git a/dgbuilder/tools/json_to_html b/dgbuilder/tools/json_to_html
new file mode 100644
index 0000000..51afe45
--- /dev/null
+++ b/dgbuilder/tools/json_to_html
@@ -0,0 +1,139 @@
+try{ 
+var jsonStr='{}';
+jsonObj=JSON.parse(jsonStr);
+var objectId =0;
+var level=0;
+var htmlStr=""
+htmlStr += "<html>";
+htmlStr += "<head>";
+htmlStr += "<script>";
+htmlStr += "function show(idVal){";
+htmlStr += "	var val = \"<table border='1'>\" + document.getElementById(idVal).value + \"</table>\";";
+htmlStr += "	document.getElementById('displayId').innerHTML = val;";
+htmlStr += "document.getElementById('displayId').style.display = \"block\";";
+//htmlStr += "alert(idVal);";
+//htmlStr += "alert(val);";
+htmlStr += "}";
+htmlStr += "</script>";
+htmlStr += "</head>";
+htmlStr += "<div id='displayId' style='display:none'></div>";
+htmlStr += "<div>\n<table border='1'>\n";
+printObjectValues(jsonObj,level);
+htmlStr += "\n</table>\n</div>";
+//var pattern = new RegExp("\\n","g");
+//htmlstr =htmlStr.replace(pattern,'');
+htmlStr += "</html>";
+console.log(htmlStr);
+
+function tabs(level){
+return '';	
+}
+function tabsOrig(level){
+	var tabs="";
+	for(var i=0;i<level;i++){
+		tabs += "\t";
+	}
+	return tabs;
+}
+
+function printObjectValues(jsonObj,level){
+var output="";
+var objectHtmlStr="";
+try{
+for (var key in jsonObj) {
+//console.log(key +":" + jsonObj.hasOwnProperty(key));
+  if (jsonObj.hasOwnProperty(key)) {
+	var v = jsonObj[key];
+	if(typeof v === 'object' && Array.isArray(v) === false){
+		var idVal = objectId++;
+		level++;
+		objectHtmlStr += tabs(level) + "<div>\n" ;
+		objectHtmlStr += tabs(level+1 ) +"<table border='1'>\n" ;
+
+		var str=printObjectValues(v,level+2);
+		if(str != null && str != ''){
+			htmlStr += tabs(level+2) + objectHtmlStr + "<tr><td style='background-color:green'><a href=\"javascript:show('obj_" + idVal + "')\">" + key + "</a>\n";
+			htmlStr +="<input id='obj_" + idVal + "' type='hidden' value='" + str.trim() + "'>\n";
+		}
+
+		htmlStr += tabs(level+1) + "</table>\n" ;
+		htmlStr += tabs(level) + "</div>\n";
+	}else if(typeof v === 'object' && Array.isArray(v) === true){
+		var idVal = objectId++;
+		level++;
+		objectHtmlStr += tabs(level) + "<div>\n";
+		objectHtmlStr += tabs(level+1) + "<table border='1'>\n";
+
+		var str = printArrayValues(v,key,level+2);
+		if(str != null && str != ''){
+			htmlStr += tabs(level+2) + objectHtmlStr + "<tr><td style='background-color:blue'><a href=\"javascript:show('obj_" + idVal + "')\">" + key + "</a>\n";
+		htmlStr+="<input id='obj_" + objectId + "' type='hidden' value='" +  str.trim() + "'>\n";
+		}
+
+		htmlStr += tabs(level+1) + "</table>\n" ;
+		htmlStr += tabs(level) + "</div>\n";
+	}else{
+		output += tabs(level) +"<tr><td>" + key + "</td><td>" + printValue(v) + "</td></tr>\n";
+	}
+  }
+}
+}catch(err){
+	console.log(err);
+}
+return output;
+}
+
+}catch(err){ 
+console.log( err );
+}
+
+function printArrayValues(arrObj,key,level){
+var output ="";
+var arrayHtmlStr ="";
+try{
+	for(var i=0;arrObj != null && i<arrObj.length;i++){
+		var o=arrObj[i];
+		if(typeof o === 'object' && Array.isArray(o) === false){
+			var idVal = objectId++;
+			level++;
+			arrayHtmlStr += tabs(level) + "<div>\n" ;
+			arrayHtmlStr += tabs(level+1 ) +"<table border='1'>\n" ;
+
+			var str = printObjectValues(o,level+2);
+			if(str != null && str != ''){
+				htmlStr += tabs(level+2 ) + arrayHtmlStr + "<tr><td><a href=\"javascript:show('obj_" + idVal + "')\">" +key + "[" + i + "]"  + "</a>\n";
+				htmlStr+="<input id='obj_" + idVal + "' type='hidden' value='" +str.trim() + "'>\n";
+			}
+			htmlStr += tabs(level+1) + "</table>\n";
+			htmlStr += tabs(level) + "</div>\n";
+		}else if(typeof o === 'object' && Array.isArray(v) === true){
+			var idVal = objectId++;
+			level++;
+			arrayHtmlStr += tabs(level) + "<div>\n" ;
+			arrayHtmlStr += tabs(level+1 ) +"<table border='1'>\n" ;
+
+			var str = printArrayValues(o,key,level);
+			if(str != null && str != ''){
+				htmlStr += tabs(level+2 ) + arrayHtmlStr + "<tr><td><a href=\"javascript:show('obj_" + idVal + "')\">Array</a>\n";
+				htmlStr+="<input id='obj_" + idVal + "' type='hidden' value='" +str.trim() + "'>\n";
+			}
+
+			htmlStr += tabs(level+1) + "</table>\n";
+			htmlStr += tabs(level) + "</div>\n";
+		}else{
+			output += tabs(level) + "<tr><td>" + printValue(o) + "</td></tr>\n";
+		}
+	}
+}catch(err){
+	console.log(err);
+}
+return output;
+}
+
+function printValue(obj){
+	if(obj != undefined){
+		return obj;
+	}else{
+		return "";
+	}
+}
diff --git a/dgbuilder/tools/json_to_html_table b/dgbuilder/tools/json_to_html_table
new file mode 100755
index 0000000..20c9cfe
--- /dev/null
+++ b/dgbuilder/tools/json_to_html_table
@@ -0,0 +1,144 @@
+try{ 
+var jsonStr='{}'; 
+jsonObj=JSON.parse(jsonStr);
+var htmlObj ={};
+var objectId =0;
+var level=0;
+var htmlStr=""
+htmlStr += "<html>";
+htmlStr += "<head>";
+htmlStr += "<script>";
+htmlStr += "function show(idVal){";
+htmlStr += "	var val = \"<table border='1'>\" + document.getElementById(idVal).value + \"</table>\";";
+htmlStr += "	document.getElementById('displayId').innerHTML = val;";
+htmlStr += "document.getElementById('displayId').style.display = \"block\";";
+//htmlStr += "alert(idVal);";
+//htmlStr += "alert(val);";
+htmlStr += "}";
+htmlStr += "</script>";
+htmlStr += "</head>";
+htmlStr += "<div id='displayId' style='display:none'></div>";
+htmlStr += "<div>\n<table border='1'>\n";
+console.log("<html><table border='1'>");
+printObjectValues(jsonObj,null,level);
+console.log("</table></html>");
+htmlStr += "\n</table>\n</div>";
+//var pattern = new RegExp("\\n","g");
+//htmlstr =htmlStr.replace(pattern,'');
+htmlStr += "</html>";
+//console.log(htmlStr);
+
+//console.dir(htmlObj);
+var keyObj={};
+for (var key in htmlObj) {
+	var idx = key.lastIndexOf(".");
+	if(idx != -1){
+ 		var str = key.substr(0,idx);
+		keyObj[str] ='';
+	}else{
+		keyObj[key] ='';
+	}	
+	//console.log(str);
+}
+
+console.dir(keyObj);
+console.log("<ul>");
+for (var key in keyObj) {
+	console.log("<li>" + key + "</li>");
+}
+console.log("</ul>");
+
+function tabs(level){
+return '';	
+}
+function tabsOrig(level){
+	var tabs="";
+	for(var i=0;i<level;i++){
+		tabs += "\t";
+	}
+	return tabs;
+}
+
+function printObjectValues(jsonObj,pkey,level){
+var output="";
+var objectHtmlStr="";
+try{
+for (var key in jsonObj) {
+  if (jsonObj.hasOwnProperty(key)) {
+	var v = jsonObj[key];
+	if(typeof v === 'object' && Array.isArray(v) === false){
+		var nkey="";
+		if(pkey != null){
+			nkey = pkey + "." + key;	
+		}else{
+			nkey = key;
+		}
+		var str=printObjectValues(v,nkey,level+2);
+	}else if(typeof v === 'object' && Array.isArray(v) === true){
+		var nkey="";
+		if(pkey != null){
+			nkey = pkey + "." + key;	
+		}else{
+			nkey = key;
+		}
+		var str = printArrayValues(v,nkey,level+2);
+	}else{
+		if(pkey != null){
+			//console.log(pkey + "." + key + ":" +printValue(v) );
+			console.log("<tr><td>" + pkey + "." + key + "</td><td>" +printValue(v) + "</td></tr>" );
+			htmlObj[pkey +  "." + key ] = printValue(v);
+		}else{
+			//console.log( key + ":" +printValue(v) );
+			console.log("<tr><td>" + key + "</td><td>" +printValue(v) + "</td></tr>" );
+			htmlObj[key ] = printValue(v);
+		}
+	        //printValue(v); 
+	}
+  }
+}
+}catch(err){
+	console.log(err);
+}
+return output;
+}
+
+}catch(err){ 
+console.log( err );
+}
+
+function printArrayValues(arrObj,pkey,level){
+var output ="";
+var arrayHtmlStr ="";
+try{
+	for(var i=0;arrObj != null && i<arrObj.length;i++){
+		var o=arrObj[i];
+		if(typeof o === 'object' && Array.isArray(o) === false){
+			var nkey = pkey +"[" + i + "]"  ;
+			var str = printObjectValues(o,nkey,level+2);
+		}else if(typeof o === 'object' && Array.isArray(v) === true){
+			var nkey = pkey +"[" + i + "]"  ;
+			var str = printArrayValues(o,nkey,level);
+		}else{
+			console.log("<tr><td>" + pkey + "." + key + "</td><td>" +printValue(o) + "</td></tr>" );
+			htmlObj[pkey +  "." + key ] = printValue(o);
+			//console.log(pkey + ":" +printValue(o) );
+			//output += tabs(level) + "<tr><td>" + printValue(o) + "</td></tr>\n";
+		}
+	}
+}catch(err){
+	console.log(err);
+}
+return output;
+}
+
+function printValue(obj){
+	if(obj != undefined){
+		if(typeof obj == 'string'){
+			return "'" +  obj + "'";
+		}else{
+			return obj;
+		}
+	}else{
+		return "";
+	}
+}
diff --git a/dgbuilder/tools/json_to_prop b/dgbuilder/tools/json_to_prop
new file mode 100755
index 0000000..f8830f3
--- /dev/null
+++ b/dgbuilder/tools/json_to_prop
@@ -0,0 +1,116 @@
+try{ 
+var jsonStr='{}';
+jsonObj=JSON.parse(jsonStr);
+var htmlObj ={};
+var objectId =0;
+var level=0;
+var htmlStr=""
+htmlStr += "<html>";
+htmlStr += "<head>";
+htmlStr += "<script>";
+htmlStr += "function show(idVal){";
+htmlStr += "	var val = \"<table border='1'>\" + document.getElementById(idVal).value + \"</table>\";";
+htmlStr += "	document.getElementById('displayId').innerHTML = val;";
+htmlStr += "document.getElementById('displayId').style.display = \"block\";";
+//htmlStr += "alert(idVal);";
+//htmlStr += "alert(val);";
+htmlStr += "}";
+htmlStr += "</script>";
+htmlStr += "</head>";
+htmlStr += "<div id='displayId' style='display:none'></div>";
+htmlStr += "<div>\n<table border='1'>\n";
+printObjectValues(jsonObj,null,level);
+htmlStr += "\n</table>\n</div>";
+//var pattern = new RegExp("\\n","g");
+//htmlstr =htmlStr.replace(pattern,'');
+htmlStr += "</html>";
+//console.log(htmlStr);
+
+function tabs(level){
+return '';	
+}
+function tabsOrig(level){
+	var tabs="";
+	for(var i=0;i<level;i++){
+		tabs += "\t";
+	}
+	return tabs;
+}
+
+function printObjectValues(jsonObj,pkey,level){
+var output="";
+var objectHtmlStr="";
+try{
+for (var key in jsonObj) {
+  if (jsonObj.hasOwnProperty(key)) {
+	var v = jsonObj[key];
+	if(typeof v === 'object' && Array.isArray(v) === false){
+		var nkey="";
+		if(pkey != null){
+			nkey = pkey + "." + key;	
+		}else{
+			nkey = key;
+		}
+		var str=printObjectValues(v,nkey,level+2);
+	}else if(typeof v === 'object' && Array.isArray(v) === true){
+		var nkey="";
+		if(pkey != null){
+			nkey = pkey + "." + key;	
+		}else{
+			nkey = key;
+		}
+		var str = printArrayValues(v,nkey,level+2);
+	}else{
+		if(pkey != null){
+			console.log(pkey + "." + key + ":" +printValue(v) );
+		}else{
+			console.log(key + ":" +printValue(v) );
+		}
+	        //printValue(v); 
+	}
+  }
+}
+}catch(err){
+	console.log(err);
+}
+return output;
+}
+
+}catch(err){ 
+console.log( err );
+}
+
+function printArrayValues(arrObj,pkey,level){
+var output ="";
+var arrayHtmlStr ="";
+try{
+	for(var i=0;arrObj != null && i<arrObj.length;i++){
+		var o=arrObj[i];
+		if(typeof o === 'object' && Array.isArray(o) === false){
+			var nkey = pkey +"[" + i + "]"  ;
+			var str = printObjectValues(o,nkey,level+2);
+		}else if(typeof o === 'object' && Array.isArray(v) === true){
+			var nkey = pkey +"[" + i + "]"  ;
+			var str = printArrayValues(o,nkey,level);
+		}else{
+			console.log(pkey + ":" +printValue(o) );
+			//output += tabs(level) + "<tr><td>" + printValue(o) + "</td></tr>\n";
+		}
+	}
+}catch(err){
+	console.log(err);
+}
+return output;
+}
+
+function printValue(obj){
+	if(obj != undefined){
+		if(typeof obj == 'string'){
+			return "'" +  obj + "'";
+		}else{
+			return obj;
+		}
+	}else{
+		return "";
+	}
+}
diff --git a/dgbuilder/tools/module-provider-impl.yang b/dgbuilder/tools/module-provider-impl.yang
new file mode 100644
index 0000000..6205910
--- /dev/null
+++ b/dgbuilder/tools/module-provider-impl.yang
@@ -0,0 +1,61 @@
+module yangApp-provider-impl {
+
+    yang-version 1;
+    namespace "brocade:training:yangApp:provider:impl";
+    prefix "yangApp-provider-impl";
+
+    import config { prefix config; revision-date 2013-04-05; }
+    import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; }
+
+     description
+        "This module contains the base YANG definitions for
+        yangApp-provider impl implementation.";
+
+    revision "2014-05-23" {
+        description
+            "Initial revision.";
+    }
+
+    // This is the definition of the service implementation as a module identity.
+    identity yangApp-provider-impl {
+            base config:module-type;
+
+            // Specifies the prefix for generated java classes.
+            config:java-name-prefix yangAppProvider;
+    }
+
+    // Augments the 'configuration' choice node under modules/module.
+    // We consume the three main services, RPCs, DataStore, and Notifications
+    augment "/config:modules/config:module/config:configuration" {
+        case yangApp-provider-impl {
+            when "/config:modules/config:module/config:type = 'yangApp-provider-impl'";
+
+            container rpc-registry {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity mdsal:binding-rpc-registry;
+                    }
+                }
+            }
+
+            container notification-service {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity mdsal:binding-notification-service;
+                    }
+                }
+            }
+
+            container data-broker {
+                uses config:service-ref {
+                    refine type {
+                        mandatory false;
+                        config:required-identity mdsal:binding-async-data-broker;
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/dgbuilder/tools/module-provider-impl.yang.bak b/dgbuilder/tools/module-provider-impl.yang.bak
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dgbuilder/tools/module-provider-impl.yang.bak
diff --git a/dgbuilder/tools/output_js/.gitignore b/dgbuilder/tools/output_js/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/dgbuilder/tools/output_js/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/dgbuilder/tools/printYangProps.sh b/dgbuilder/tools/printYangProps.sh
new file mode 100755
index 0000000..7d1d0fa
--- /dev/null
+++ b/dgbuilder/tools/printYangProps.sh
@@ -0,0 +1,8 @@
+toolsDir=$PROJECT_HOME/tools
+. ${toolsDir}/setClasspath
+if [ "$#" != "1" ]
+then
+	echo "Usage $0 className_without_the_dot_class_ext"
+	exit
+fi
+ java PrintYangToProp $1 
diff --git a/dgbuilder/tools/printYangToProp.jar b/dgbuilder/tools/printYangToProp.jar
new file mode 100644
index 0000000..01b7310
--- /dev/null
+++ b/dgbuilder/tools/printYangToProp.jar
Binary files differ
diff --git a/dgbuilder/tools/rs b/dgbuilder/tools/rs
new file mode 100755
index 0000000..3d92b62
--- /dev/null
+++ b/dgbuilder/tools/rs
@@ -0,0 +1,2 @@
+#replaces / with a .
+echo $1|sed -e s%/%.%g
diff --git a/dgbuilder/tools/setClasspath b/dgbuilder/tools/setClasspath
new file mode 100755
index 0000000..082d31a
--- /dev/null
+++ b/dgbuilder/tools/setClasspath
@@ -0,0 +1,10 @@
+toolsDir=${PROJECT_HOME}/tools
+export CLASSPATH=
+export CLASSPATH=${toolsDir}/guava-14.0.1.jar:$CLASSPATH
+export CLASSPATH=${toolsDir}/javax.json-api-1.0.jar:$CLASSPATH
+export CLASSPATH=${toolsDir}/slf4j-api-1.7.2.jar:$CLASSPATH
+
+for i in `find ${toolsDir}/tmpws/jars -name "*.jar" -print`
+do
+export CLASSPATH=$CLASSPATH:$i
+done
diff --git a/dgbuilder/tools/slf4j-api-1.7.2.jar b/dgbuilder/tools/slf4j-api-1.7.2.jar
new file mode 100644
index 0000000..1a88708
--- /dev/null
+++ b/dgbuilder/tools/slf4j-api-1.7.2.jar
Binary files differ
diff --git a/dgbuilder/tools/update_app_impl_yang.sh b/dgbuilder/tools/update_app_impl_yang.sh
new file mode 100755
index 0000000..9ae5610
--- /dev/null
+++ b/dgbuilder/tools/update_app_impl_yang.sh
@@ -0,0 +1,45 @@
+toolsDir=$PROJECT_HOME/tools
+appRootDir=$1
+yangFileFullPath=$2
+yangFile=$(basename $yangFileFullPath)
+
+if [ "$#" != "2" ]
+then
+	echo "Usage: $0 appRootDir yangModuleName example:$0 bwcal bwcal"
+	exit
+fi
+cd ${toolsDir}/tmpws
+#cp ${toolsDir}/module-provider-impl.yang ${toolsDir}/tmpws
+
+if [ ! -e "${toolsDir}/module-provider-impl.yang" ]
+then
+	echo "${toolsDir}/module-provider-impl.yang should exist"
+	exit
+fi
+
+#echo "appRootDir:$appRootDir"
+#echo "yangFileFullPath:$yangFileFullPath"
+#echo "yangFile:$yangFile"
+
+cp ${yangFileFullPath} ${appRootDir}/model/src/main/yang/${yangFile}
+if [ "$?" != "0" ]
+then
+	echo "Could not copy the yang file. Exiting ..."
+	exit
+fi
+
+moduleName=$(cat $yangFileFullPath|egrep "module .*{"|cut -d' ' -f2|cut -d'{' -f1)
+#echo $moduleName
+sed -i.bak s/\$MODULE/$1/g ${toolsDir}/module-provider-impl.yang
+cp ${toolsDir}/module-provider-impl.yang ${appRootDir}/provider/src/main/yang/${appRootDir}-provider-impl.yang 
+cd $appRootDir
+mvn clean install  >${toolsDir}/tmpws/logs/mvn_install.log 2>&1
+mkdir ${toolsDir}/tmpws/jars
+cp ./model/target/${appRootDir}.model-1.0.0-SNAPSHOT.jar ${toolsDir}/tmpws/jars
+
+mv  ${toolsDir}/output_js/${moduleName}_inputs.js ${toolsDir}/output_js/${moduleName}_inputs_prev.js >/dev/null 2>&1
+
+${toolsDir}/getRpcsClassFromYang.sh ${yangFileFullPath} ${toolsDir}/tmpws/${appRootDir}/model/target/${appRootDir}.model-1.0.0-SNAPSHOT.jar > ${toolsDir}/output_js/${moduleName}.js
+
+node ${toolsDir}/dot_to_json.js ${toolsDir}/output_js/${moduleName}.js $moduleName >${toolsDir}/output_js/${moduleName}_inputs.js
+cp ${toolsDir}/output_js/${moduleName}_inputs.js $PROJECT_HOME/generatedJS
diff --git a/dgbuilder/tools/update_app_impl_yangs.sh b/dgbuilder/tools/update_app_impl_yangs.sh
new file mode 100755
index 0000000..612f97d
--- /dev/null
+++ b/dgbuilder/tools/update_app_impl_yangs.sh
@@ -0,0 +1,51 @@
+toolsDir=$PROJECT_HOME/tools
+appRootDir=$1
+yangFilesDirFullPath=$2
+baseYangFile=$3
+
+#echo ${appRootDir} 
+#echo ${yangFilesDirFullPath} 
+#echo ${baseYangFile} 
+if [ "$#" -lt "3" ]
+then
+	echo "Usage: $0 appRootDir yangFilesDirectoryFullPath baseYangFile  example:$0 asdcApi /home/brocade/sdnc/asdcApi ASDC-API.yang"
+	exit
+fi
+cd ${toolsDir}/tmpws
+#cp ${toolsDir}/module-provider-impl.yang ${toolsDir}/tmpws
+
+if [ ! -e "${toolsDir}/module-provider-impl.yang" ]
+then
+	echo "module-provider-impl.yang should exist in the current directory"
+	exit
+fi
+
+#echo "appRootDir:$appRootDir"
+#echo "yangFileFullPath:$yangFileFullPath"
+#echo "yangFile:$yangFile"
+cp ${yangFilesDirFullPath}/*.yang ${appRootDir}/model/src/main/yang
+if [ "$?" != "0" ]
+then
+	echo "Could not copy the yang file. Exiting ..."
+	exit
+fi
+
+moduleName=$(cat ${yangFilesDirFullPath}/${baseYangFile}|egrep "module .*{"|cut -d' ' -f2|cut -d'{' -f1)
+sed -i.bak s/\$MODULE/$1/g ${toolsDir}/module-provider-impl.yang
+cp ${toolsDir}/module-provider-impl.yang ${appRootDir}/provider/src/main/yang/${appRootDir}-provider-impl.yang 
+cd $appRootDir
+mvn clean install  >${toolsDir}/tmpws/logs/mvn_install.log 2>&1
+if [ "$?" != "0" ]
+then
+	echo "mvn compile failed"
+	exit 1	
+fi
+mkdir ${toolsDir}/tmpws/jars
+cp ./model/target/${appRootDir}.model-1.0.0-SNAPSHOT.jar ${toolsDir}/tmpws/jars
+
+mv ${toolsDir}/output_js/${moduleName}.js ${toolsDir}/output_js/${moduleName}.js_prev >/dev/null  2>&1 
+${toolsDir}/getRpcsClassFromYangs.sh ${yangFilesDirFullPath}/${baseYangFile} ${toolsDir}/tmpws/${appRootDir}/model/target/${appRootDir}.model-1.0.0-SNAPSHOT.jar > ${toolsDir}/output_js/${moduleName}.js
+
+mv  ${toolsDir}/output_js/${moduleName}_inputs.js ${toolsDir}/output_js/${moduleName}_inputs_prev.js >/dev/null 2>&1
+node ${toolsDir}/dot_to_json.js ${toolsDir}/output_js/${moduleName}.js $moduleName >>${toolsDir}/output_js/${moduleName}_inputs.js
+cp ${toolsDir}/output_js/${moduleName}_inputs.js $PROJECT_HOME/generatedJS
