package com;

import java.util.Hashtable;
import java.util.Map;

import org.apache.xmlbeans.SchemaType;
import org.apache.xmlbeans.SchemaTypeSystem;
import org.apache.xmlbeans.XmlBeans;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlOptions;
import org.apache.xmlbeans.impl.xsd2inst.SampleXmlUtil;

import com.eibus.xml.nom.Document;



public class Schema2InstanceGenerator 
{
	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		
		test1();
	}
	private static void test1()
	{
		try 
		{
			Document doc = new Document();
			String rootElementName = "city";
			
			//String schemaFileName = "catalog.xsd";
			//String sourceSchema = Node.writeToString(doc.load(schemaFileName), false);
			String sourceSchema = schemaWithTargetnamespace;
			
			XmlOptions xmlOptions = new XmlOptions();
			//New Change
			xmlOptions.setUseDefaultNamespace();
			xmlOptions.setSavePrettyPrint();
			Map m = new Hashtable();
			m.put("http://mycomp/city", "adi");
			
			xmlOptions.setSaveSuggestedPrefixes(m);
			
			//New Change
			CobocEntityResolver cobocEntityResolver = new CobocEntityResolver();
			xmlOptions.setEntityResolver(cobocEntityResolver);
			XmlObject schemaObj = XmlObject.Factory.parse(sourceSchema);
			XmlObject[] schemaArray = new XmlObject[1];
			schemaArray[0] = schemaObj;
			SchemaTypeSystem sts = XmlBeans.compileXsd(schemaArray, XmlBeans.getBuiltinTypeSystem(), xmlOptions);
			SchemaType globalElems[] = sts.documentTypes();
			SchemaType target = null;
	        for(int i = 0; i < globalElems.length; i++)
	        {
	        	String currElementName = globalElems[i].getDocumentElementName().getLocalPart();
	        	//System.out.println(currElementName);
	        	if(rootElementName.equals(currElementName))
	        	{
	        		
	        		target = globalElems[i];
	        		break;
	        	}
	        }
	        System.out.println(target);
	        System.out.println("\n \n Result  : " + SampleXmlUtil.createSampleForType(target));
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		} 
		
	}
	private static String schemaWithTargetnamespace = "<schema xmlns=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"http://mycomp/city\">" +
									    "<element name=\"city\">" +
									    "<complexType>" +
									        "<all>" +
									            "<element name=\"name\"/>" +
									            "<element name=\"population\"/>" +
									        "</all>" +
									   "</complexType>" +
									   "</element>" +
									"</schema>" ;
	
	private static String schemaWithoutTargetnamespace = "<schema xmlns=\"http://www.w3.org/2001/XMLSchema\">" +
														    "<element name=\"city\">" +
														    "<complexType>" +
														        "<all>" +
														            "<element name=\"name\"/>" +
														            "<element name=\"population\"/>" +
														        "</all>" +
														   "</complexType>" +
														   "</element>" +
														"</schema>" ;
															
	
	
		
}
