package examples.product; 

import javax.ejb.*;
import javax.naming.*;
import java.rmi.*;
import java.util.*;

/**
 * Client test application on a Container-Managed Entity Bean, Product.
 */
public class ProductClient {

	public static void main(String[] args) throws Exception {

		ProductHome home = null;

		try {
			/*
			 * Get a reference to the Product Home Object - the
			 * factory for Product EJB Objects
			 */
			Context ctx = new InitialContext(System.getProperties());
			home = (ProductHome) javax.rmi.PortableRemoteObject.narrow(ctx.lookup("RemoteProductHome"), ProductHome.class);

			/*
			 * Use the factory to create the Product EJB Object
			 */
			home.create("123-456-7890", "P5-350", "350 Mhz Pentium", 200);
			home.create("123-456-7891", "P5-400", "400 Mhz Pentium", 300);
			home.create("123-456-7892", "P5-450", "450 Mhz Pentium", 400);
			home.create("123-456-7893", "SD-64", "64 MB SDRAM", 50);
			home.create("123-456-7894", "SD-128", "128 MB SDRAM", 100);
			home.create("123-456-7895", "SD-256", "256 MB SDRAM", 200);

			/*
			 * Find a Product, and print out it's description
			 */
			Iterator i = home.findByName("SD-64").iterator();
			System.out.println("The following product descriptions match the product name SD-64:");
			while (i.hasNext()) {
				Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class);
				System.out.println(prod.getDescription());
			}

			/*
			 * Find all products that cost $200
			 */
			System.out.println("Calling finder to find all products that cost $200");
			i = home.findByBasePrice(200).iterator();

			while (i.hasNext()) {
				Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class);
				System.out.println(prod.getDescription());
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		finally {
			if (home != null) {
				System.out.println("Destroying products..");

				/*
				 * Find all the products
				 */
				Iterator i = home.findAllProducts().iterator();
				while (i.hasNext()) {
					try {
						Product prod = (Product) javax.rmi.PortableRemoteObject.narrow(i.next(), Product.class);
						if (prod.getProductID().startsWith("123")) {
							prod.remove();
						}
					}
					catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
}
