/*******************************************************************************
 * Copyright (c) 2011, 2015 Oracle and/or its affiliates. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
 * which accompanies this distribution.
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *    Denise Smith - February 20, 2013
 ******************************************************************************/
package org.eclipse.persistence.testing.jaxb.xmlschematype;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.Duration;
import javax.xml.datatype.XMLGregorianCalendar;

import org.eclipse.persistence.testing.jaxb.JAXBWithJSONTestCases;

public class XSDSchemaTypesTestCases extends JAXBWithJSONTestCases{
	
    private final static String XML_RESOURCE = "org/eclipse/persistence/testing/jaxb/xmlschematype/xsdtypes.xml";
    private final static String XML_WRITE_RESOURCE = "org/eclipse/persistence/testing/jaxb/xmlschematype/xsdtypeswrite.xml";
    private final static String JSON_RESOURCE = "org/eclipse/persistence/testing/jaxb/xmlschematype/xsdtypes.json";
    private final static String JSON_WRITE_RESOURCE = "org/eclipse/persistence/testing/jaxb/xmlschematype/xsdtypeswrite.json";

	public XSDSchemaTypesTestCases(String name) throws Exception {
	    super(name);
	    setControlDocument(XML_RESOURCE);  
	    setControlJSON(JSON_RESOURCE);
	    setControlJSON(JSON_WRITE_RESOURCE);
	    setWriteControlDocument(XML_WRITE_RESOURCE);
	    Class[] classes = new Class[1];
	    classes[0] = XSDTypesHolder.class;
	    setClasses(classes);
	    initXsiType();
	}

	@Override
	protected Map<String, String> getAdditationalNamespaces() {
	    Map<String, String> namespaces = new HashMap<>();
	    namespaces.put("myns", "ns0");
	    return namespaces;
	}

	@Override
	protected Object getControlObject() {	
		try { 
    		DatatypeFactory factory = DatatypeFactory.newInstance();
		
		    XSDTypesHolder holder = new XSDTypesHolder();
		    holder.things = new ArrayList();
		    holder.things.add(new BigInteger("10"));
		    holder.things.add(new BigInteger("10"));
		    holder.things.add(new BigInteger("-10"));
		    holder.things.add(new BigInteger("10"));		    
     		
		    XMLGregorianCalendar cal = factory.newXMLGregorianCalendar();
	    	cal.setMonth(10);
		    holder.things.add(cal);
		    
		    cal = factory.newXMLGregorianCalendar();
		    cal.setDay(10);
		    holder.things.add(cal);
		    
		    cal = factory.newXMLGregorianCalendar();
		    cal.setMonth(10);
		    cal.setDay(10);
		    holder.things.add(cal);
		    
		    cal = factory.newXMLGregorianCalendar();
		    cal.setYear(2013);		    
		    holder.things.add(cal);
		    
		    cal = factory.newXMLGregorianCalendar();
		    cal.setMonth(10);
		    cal.setYear(2013);
		    holder.things.add(cal);
		    
		    Duration dur =  factory.newDuration("PT130S");
		    holder.things.add(dur);
		    
		    String s = "this is a test";
		    holder.things.add(s);
		    
		    holder.things.add("abc".getBytes());
		    
		    return holder;
		} catch (DatatypeConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			fail();
		}
		return null;
		
	}
}
