/*
 * Copyright (c) 1998, 2020 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 v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.sdo.helper.xmlhelper.save;

import commonj.sdo.DataObject;
import commonj.sdo.Type;
import commonj.sdo.helper.XMLDocument;
import org.eclipse.persistence.sdo.SDOProperty;

public class SavePurchaseOrderTestCases extends SDOXMLHelperSaveTestCases {
    public SavePurchaseOrderTestCases(String name) {
        super(name);
    }

    protected String getControlFileName() {
        return ("./org/eclipse/persistence/testing/sdo/helper/xmlhelper/purchaseOrderNS.xml");
    }

    protected String getNoSchemaControlFileName() {
        return ("./org/eclipse/persistence/testing/sdo/helper/xmlhelper/purchaseOrderNSNoSchema.xml");
    }

    protected String getSchemaName() {
        return "./org/eclipse/persistence/testing/sdo/helper/xmlhelper/PurchaseOrder.xsd";
    }

    protected String getControlRootName() {
        return "purchaseOrder";
    }

    protected XMLDocument getXMLDocumentToSave() {
        DataObject purchaseOrder = dataFactory.create(getControlRootURI(), "PurchaseOrderType");

        purchaseOrder.set(purchaseOrder.getInstanceProperty("orderDate"), "1999-10-20");

        DataObject shipTo = purchaseOrder.createDataObject("shipTo");
        shipTo.set(shipTo.getInstanceProperty("country"), "US");
        shipTo.set(shipTo.getInstanceProperty("name"), "Alice Smith");
        shipTo.set(shipTo.getInstanceProperty("street"), "123 Maple Street");
        shipTo.set(shipTo.getInstanceProperty("city"), "Mill Valley");
        shipTo.set(shipTo.getInstanceProperty("state"), "CA");
        shipTo.set(shipTo.getInstanceProperty("zip"), "90952");

        DataObject billTo = purchaseOrder.createDataObject("billTo");
        billTo.set(billTo.getInstanceProperty("country"), "US");
        billTo.set(billTo.getInstanceProperty("name"), "Robert Smith");
        billTo.set(billTo.getInstanceProperty("street"), "8 Oak Avenue");
        billTo.set(billTo.getInstanceProperty("city"), "Mill Valley");
        billTo.set(billTo.getInstanceProperty("state"), "PA");
        billTo.set(billTo.getInstanceProperty("zip"), "95819");

        purchaseOrder.set(purchaseOrder.getInstanceProperty("comment"), "Hurry, my lawn is going wild!");

        DataObject items = purchaseOrder.createDataObject("items");
        DataObject item1 = items.createDataObject("item");

        item1.set(item1.getInstanceProperty("partNum"), "872-AA");
        item1.set(item1.getInstanceProperty("productName"), "Lawnmower");
        item1.set(item1.getInstanceProperty("quantity"), "1");
        item1.set(item1.getInstanceProperty("USPrice"), "148.95");
        item1.set(item1.getInstanceProperty("comment"), "Confirm this is electric");

        /*
        item1.set("partNum", "872-AA");
        item1.set("productName", "Lawnmower");
        item1.setInt("quantity", 1);
        item1.setString("USPrice", "148.95");
        item1.set("comment", "Confirm this is electric");
        */
        DataObject item2 = items.createDataObject("item");

        /*item2.set("partNum", "926-AA");
        item2.set("productName", "Baby Monitor");
        item1.setInt("quantity", 1);
        item2.setString("USPrice", "39.98");
                */
        item2.set(item2.getInstanceProperty("partNum"), "926-AA");
        item2.set(item2.getInstanceProperty("productName"), "Baby Monitor");
        item2.set(item2.getInstanceProperty("quantity"), "1");
        item2.set(item2.getInstanceProperty("USPrice"), "39.98");
        //item2.setString(item2.getProperty("shipDate"), "1999-05-21");
        item2.set(item2.getInstanceProperty("shipDate"), "1999-05-21");

        XMLDocument doc = xmlHelper.createDocument(purchaseOrder, getControlRootURI(), getControlRootName());
        return doc;
    }

    protected void registerTypes() {
        Type intType = typeHelper.getType("commonj.sdo", "Int");
        Type stringType = typeHelper.getType("commonj.sdo", "String");
        Type dateType = typeHelper.getType("commonj.sdo", "Date");
        Type addressType = registerAddressType();
        Type itemsType = registerItemsType();

        // create a new Type for Customers
        DataObject purchaseOrderTypeType = dataFactory.create("commonj.sdo", "Type");

        SDOProperty prop = (SDOProperty)purchaseOrderTypeType.getType().getProperty("uri");
        purchaseOrderTypeType.set(prop, CONTROL_ROOT_URI);

        prop = (SDOProperty)purchaseOrderTypeType.getType().getProperty("name");
        purchaseOrderTypeType.set(prop, "PurchaseOrderType");

        // create a orderDateProperty
        addProperty(purchaseOrderTypeType, "orderDate", dateType);

        DataObject shipToProp = addProperty(purchaseOrderTypeType, "shipTo", addressType);
        shipToProp.setBoolean("containment", true);

        DataObject billToProp = addProperty(purchaseOrderTypeType, "billTo", addressType);
        billToProp.setBoolean("containment", true);

        addProperty(purchaseOrderTypeType, "comment", stringType);

        DataObject itemsProp = addProperty(purchaseOrderTypeType, "items", itemsType);
        itemsProp.setBoolean("containment", true);

        typeHelper.define(purchaseOrderTypeType);
    }

    private Type registerAddressType() {
        Type stringType = typeHelper.getType("commonj.sdo", "String");

        // create a new Type for addressType
        DataObject addressType = dataFactory.create("commonj.sdo", "Type");

        SDOProperty prop = (SDOProperty)addressType.getType().getProperty("uri");
        addressType.set(prop, CONTROL_ROOT_URI);

        prop = (SDOProperty)addressType.getType().getProperty("name");
        addressType.set(prop, "AddressType");

        addProperty(addressType, "country", stringType);
        addProperty(addressType, "name", stringType);
        addProperty(addressType, "street", stringType);
        addProperty(addressType, "city", stringType);
        addProperty(addressType, "state", stringType);
        addProperty(addressType, "zip", stringType);

        return typeHelper.define(addressType);
    }

    private Type registerItemType() {
        Type stringType = typeHelper.getType("commonj.sdo", "String");
        Type intType = typeHelper.getType("commonj.sdo", "Int");
        Type floatType = typeHelper.getType("commonj.sdo", "Float");
        Type dateType = typeHelper.getType("commonj.sdo", "Date");

        // create a new Type for addressType
        DataObject itemType = dataFactory.create("commonj.sdo", "Type");

        SDOProperty prop = (SDOProperty)itemType.getType().getProperty("uri");
        itemType.set(prop, CONTROL_ROOT_URI);

        prop = (SDOProperty)itemType.getType().getProperty("name");
        itemType.set(prop, "Item");

        addProperty(itemType, "partNum", stringType);
        addProperty(itemType, "productName", stringType);
        addProperty(itemType, "quantity", intType);
        addProperty(itemType, "USPrice", floatType);
        addProperty(itemType, "comment", stringType);
        addProperty(itemType, "shipDate", dateType);

        return typeHelper.define(itemType);

    }

    private Type registerItemsType() {
        Type stringType = typeHelper.getType("commonj.sdo", "String");
        Type itemType = registerItemType();

        // create a new Type for itemsType
        DataObject itemsType = dataFactory.create("commonj.sdo", "Type");

        SDOProperty prop = (SDOProperty)itemsType.getType().getProperty("uri");
        itemsType.set(prop, CONTROL_ROOT_URI);

        prop = (SDOProperty)itemsType.getType().getProperty("name");
        itemsType.set(prop, "Items");

        DataObject itemProp = addProperty(itemsType, "item", itemType);
        itemProp.setBoolean("containment", true);
        itemProp.setBoolean("many", true);

        return typeHelper.define(itemsType);

    }
}
