/*
 * Copyright Sun Microsystems, Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * - Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 * - Redistribution in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in
 *   the documentation and/or other materials provided with the
 *   distribution.
 *
 * Neither the name of Sun Microsystems, Inc. or the names of
 * contributors may be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * This software is provided "AS IS," without a warranty of any
 * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
 * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
 * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
 * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
 * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
 * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
 * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 *
 * You acknowledge that Software is not designed, licensed or intended
 * for use in the design, construction, operation or maintenance of
 * any nuclear facility.
 */

import org.w3c.dom.Document;

/**
 * Main class for DOM Sample
 */
public class DOMSample {

  /**
   * File name of Order
   */
  static String orderFileName = "Order.xml";

  /**
   * @param args the command line arguments
   */
  public static void main(String[] args) {

    Document document = null;
    Order order = null;

    out("\nConstruct document using DOM in memory, save to file, and print it");
    // Build new DOM Document
    CreateOrderDOM cDOM = new CreateOrderDOM();
    document = cDOM.getDocument();
    out("New Order created");

    // Print XML content
    DOMUtil.printDOM(document);

    // Write to a file
    DOMUtil.writeXmlToFile("newOrder.xml",document);
    out("\n\nThe New Order stored to NewOrder.xml");

    // Create Order object based on Document
    order = new Order(document);
    out("\n\nPrint the Order's summary");
    order.print();

    out("\n\nConstruct document using existing XML Order," +
                      " apply discount, insert Tax and Total info to the" +
                      " Order, save to file, and print it");
    // Read XML from file to DOM
    document = DOMUtil.parse("Order.xml");

    if (document != null){
      // Print XML content
      out("\nPrint XML from file");
      DOMUtil.printDOM(document);

      // Get Order Price
      order = new Order(document);
      out("\nPrint the Order's summary");
      order.print();

      //Calculate total Items in Order
      int count = DOMUtil.countByTagName("Item",document);
      out("\nNumber Items in Order: " + count);

      out("Check for Discount");
      // Check for Discount
      if (order.isDiscount()){
        out("Apply Discount");
        order.applyDiscount();
      }

      out("\nResult Order");
      order.print();

      // Add Tax and Total to the Order XML
      order.AddTaxAndTotal();
      // Print XML content
      out("\nPrint XML that include Tax and Total");
      DOMUtil.printDOM(document);

      // Write to a file
      DOMUtil.writeXmlToFile("DiscountOrder.xml",document);
      out("\n\nThe Order modified and stored to DiscountOrder.xml");
    }
  }

  /**
   * Prints to the System output a message
   * @param message String
   */
  private static void out(String message) {
    System.out.println(message);
  }

}