mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
349 lines
6.8 KiB
Java
349 lines
6.8 KiB
Java
package example.corba;
|
|
|
|
import java.io.*;
|
|
import java.sql.*;
|
|
import org.omg.CosNaming.*;
|
|
|
|
/*
|
|
* This class is the frontend to our mini CORBA application.
|
|
*
|
|
* It has no GUI, just a text frontend to keep it simple.
|
|
*
|
|
* $Id: StockClient.java,v 1.5 2001/11/19 23:19:20 momjian Exp $
|
|
*/
|
|
public class StockClient
|
|
{
|
|
org.omg.CosNaming.NamingContext nameService;
|
|
|
|
stock.StockDispenser dispenser;
|
|
stock.StockItem item;
|
|
|
|
BufferedReader in;
|
|
|
|
public StockClient(String[] args)
|
|
{
|
|
try
|
|
{
|
|
// We need this for our IO
|
|
in = new BufferedReader(new InputStreamReader(System.in));
|
|
|
|
// Initialize the orb
|
|
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
|
|
|
|
// Get a reference to the Naming Service
|
|
org.omg.CORBA.Object nameServiceObj = orb.resolve_initial_references("NameService");
|
|
if (nameServiceObj == null)
|
|
{
|
|
System.err.println("nameServiceObj == null");
|
|
return;
|
|
}
|
|
|
|
nameService = org.omg.CosNaming.NamingContextHelper.narrow(nameServiceObj);
|
|
if (nameService == null)
|
|
{
|
|
System.err.println("nameService == null");
|
|
return;
|
|
}
|
|
|
|
// Resolve the dispenser
|
|
NameComponent[] dispName = {
|
|
new NameComponent("StockDispenser", "Stock")
|
|
};
|
|
dispenser = stock.StockDispenserHelper.narrow(nameService.resolve(dispName));
|
|
if (dispenser == null)
|
|
{
|
|
System.err.println("dispenser == null");
|
|
return;
|
|
}
|
|
|
|
// Now run the front end.
|
|
run();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
System.out.println(e.toString());
|
|
e.printStackTrace();
|
|
System.exit(1);
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args)
|
|
{
|
|
new StockClient(args);
|
|
}
|
|
|
|
public void run()
|
|
{
|
|
// First reserve a StockItem
|
|
try
|
|
{
|
|
item = dispenser.reserveItem();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
System.out.println(e.toString());
|
|
e.printStackTrace();
|
|
System.exit(1);
|
|
}
|
|
|
|
mainMenu();
|
|
|
|
// finally free the StockItem
|
|
try
|
|
{
|
|
dispenser.releaseItem(item);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
System.out.println(e.toString());
|
|
e.printStackTrace();
|
|
System.exit(1);
|
|
}
|
|
}
|
|
|
|
private void mainMenu()
|
|
{
|
|
boolean run = true;
|
|
while (run)
|
|
{
|
|
System.out.println("\nCORBA Stock System\n");
|
|
System.out.println(" 1 Display stock item");
|
|
System.out.println(" 2 Remove item from stock");
|
|
System.out.println(" 3 Put item into stock");
|
|
System.out.println(" 4 Order item");
|
|
System.out.println(" 5 Display all items");
|
|
System.out.println(" 0 Exit");
|
|
int i = getMenu("Main", 5);
|
|
switch (i)
|
|
{
|
|
case 0:
|
|
run = false;
|
|
break;
|
|
|
|
case 1:
|
|
displayItem();
|
|
break;
|
|
|
|
case 2:
|
|
bookOut();
|
|
break;
|
|
|
|
case 3:
|
|
bookIn();
|
|
break;
|
|
|
|
case 4:
|
|
order(0);
|
|
break;
|
|
|
|
case 5:
|
|
displayAll();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void displayItem()
|
|
{
|
|
try
|
|
{
|
|
int id = getMenu("\nStockID to display", item.getLastID());
|
|
if (id > 0)
|
|
{
|
|
item.fetchItem(id);
|
|
System.out.println("========================================");
|
|
|
|
String status = "";
|
|
if (!item.isItemValid())
|
|
status = " ** Superceded **";
|
|
|
|
int av = item.getAvailable();
|
|
|
|
System.out.println(" Stock ID: " + id + status +
|
|
"\nItems Available: " + av +
|
|
"\nItems on order: " + item.getOrdered() +
|
|
"\n Description: " + item.getDescription());
|
|
System.out.println("========================================");
|
|
|
|
if (av > 0)
|
|
if (yn("Take this item out of stock?"))
|
|
{
|
|
int rem = 1;
|
|
if (av > 1)
|
|
rem = getMenu("How many?", av);
|
|
if (rem > 0)
|
|
item.removeStock(rem);
|
|
}
|
|
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
System.out.println(e.toString());
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private void bookOut()
|
|
{
|
|
try
|
|
{
|
|
int id = getMenu("\nStockID to take out", item.getLastID());
|
|
if (id > 0)
|
|
{
|
|
item.fetchItem(id);
|
|
int av = item.getAvailable();
|
|
if (av > 0)
|
|
if (yn("Take this item out of stock?"))
|
|
{
|
|
int rem = 1;
|
|
if (av > 1)
|
|
rem = getMenu("How many?", av);
|
|
if (rem > 0)
|
|
item.removeStock(rem);
|
|
}
|
|
else
|
|
{
|
|
System.out.println("This item is not in stock.");
|
|
int order = item.getOrdered();
|
|
if (order > 0)
|
|
System.out.println("There are " + item.getOrdered() + " items on order.");
|
|
else
|
|
{
|
|
if (item.isItemValid())
|
|
{
|
|
System.out.println("You will need to order some more " + item.getDescription());
|
|
order(id);
|
|
}
|
|
else
|
|
System.out.println("This item is now obsolete");
|
|
}
|
|
}
|
|
}
|
|
else
|
|
System.out.println(item.getDescription() + "\nThis item is out of stock");
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
System.out.println(e.toString());
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
// book an item into stock
|
|
private void bookIn()
|
|
{
|
|
try
|
|
{
|
|
int id = getMenu("\nStockID to book in", item.getLastID());
|
|
item.fetchItem(id);
|
|
System.out.println(item.getDescription());
|
|
|
|
if (item.getOrdered() > 0)
|
|
{
|
|
int am = getMenu("How many do you want to book in", item.getOrdered());
|
|
if (am > 0)
|
|
item.addNewStock(am);
|
|
}
|
|
else
|
|
System.out.println("You don't have any of this item on ordered");
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
System.out.println(e.toString());
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
// Order an item
|
|
private void order(int id)
|
|
{
|
|
try
|
|
{
|
|
if (id == 0)
|
|
id = getMenu("\nStockID to order", item.getLastID());
|
|
item.fetchItem(id);
|
|
System.out.println(item.getDescription());
|
|
int am = getMenu("How many do you want to order", 999);
|
|
if (am > 0)
|
|
item.orderStock(am);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
System.out.println(e.toString());
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private void displayAll()
|
|
{
|
|
try
|
|
{
|
|
boolean cont = true;
|
|
int nr = item.getLastID();
|
|
String header = "\nId\tAvail\tOrdered\tDescription";
|
|
System.out.println(header);
|
|
for (int i = 1;i <= nr && cont;i++)
|
|
{
|
|
item.fetchItem(i);
|
|
System.out.println("" + i + "\t" + item.getAvailable() + "\t" + item.getOrdered() + "\t" + item.getDescription());
|
|
if ((i % 20) == 0)
|
|
{
|
|
if ((cont = yn("Continue?")))
|
|
System.out.println(header);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
System.out.println(e.toString());
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private int getMenu(String title, int max)
|
|
{
|
|
int v = -1;
|
|
while (v < 0 || v > max)
|
|
{
|
|
System.out.print(title);
|
|
System.out.print(" [0-" + max + "]: ");
|
|
System.out.flush();
|
|
try
|
|
{
|
|
v = Integer.parseInt(in.readLine());
|
|
}
|
|
catch (Exception nfe)
|
|
{
|
|
v = -1;
|
|
}
|
|
}
|
|
return v;
|
|
}
|
|
|
|
private boolean yn(String title)
|
|
{
|
|
try
|
|
{
|
|
while (true)
|
|
{
|
|
System.out.print(title);
|
|
System.out.flush();
|
|
String s = in.readLine();
|
|
if (s.startsWith("y") || s.startsWith("Y"))
|
|
return true;
|
|
if (s.startsWith("n") || s.startsWith("N"))
|
|
return false;
|
|
}
|
|
}
|
|
catch (Exception nfe)
|
|
{
|
|
System.out.println(nfe.toString());
|
|
nfe.printStackTrace();
|
|
System.exit(1);
|
|
}
|
|
return false;
|
|
}
|
|
}
|