/* Java Client for POS demo

/*  from Zack Stewart, Spring 2003 CIS560

 

package sql_frontend;

 

import java.io.*;

import java.math.*;

import java.lang.*;

import java.util.*;

import java.sql.*;

import java.awt.*;

import javax.swing.*;

import javax.swing.event.*;

import java.awt.event.*;

 

public class POSFrame extends JFrame {

  private String url = "jdbc:oracle:thin:@oracle.cis.ksu.edu:1521:ORACLE";

  private String query = null;

  private Connection oracle = null;

  private Statement stmt = null;

  private ResultSet result = null;

  private Object[][] transactions = null,

                      customers = null,

                       inventory = null;

  private Object[] columnNames = null;

 

  private JTable inventoryTable = null,

                  custTable = null,

                   transTable = null;

 

  /* standard GUI part … see screen snapshots

   

 

  public POSFrame() {

    try {

      DriverManager.registerDriver(

              new oracle.jdbc.driver.OracleDriver());

      oracle = DriverManager.getConnection(url, “USER", "PASSWD");

      stmt=oracle.createStatement();

      transButton_actionPerformed(null);

      invButton_actionPerformed(null);

      query = "select * from customer";

      result = stmt.executeQuery(query);

      columnNames = getColumnNames(result);

      customers = setToArray(result);

      custTable = new JTable(customers, columnNames);

         

      inventoryTable.setSelectionMode(

        ListSelectionModel.SINGLE_SELECTION);

      custTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

      jbInit();

    }catch(Exception e) {

      e.printStackTrace();

    }

  }

 

  private void jbInit() throws Exception {

    /* standard GUI inits

 

    this.getContentPane().add(customerPane, null);

    this.getContentPane().add(tablePane, null);

    tablePane.getViewport().add(inventoryTable, null);

    customerPane.getViewport().add(custTable, null);

 

  }

 

  public static void main(String[] args){new POSFrame();}

 

  void this_windowClosing(WindowEvent e) {

    try {

      if(oracle != null)

        oracle.close();

       . . .

  }

 

  void buyButton_actionPerformed(ActionEvent e) {

    if(!isInventoryOnscreen || inventoryTable.getSelectedRow() == -1 ||

       custTable.getSelectedRow() == -1){ return; }

    Object item = null;

    int row = inventoryTable.getSelectedRow();

    int customer = ((BigDecimal)customers[

                    custTable.getSelectedRow()][0]).intValue();

    int quantity = Integer.parseInt(quanField.getText());

    float total = quantity * ((BigDecimal)inventory[row][4]).floatValue();

    int updated = 0;

    int transaction = 0;

    try{

      item = inventory[row][0];

      query = "select quantity from inventory where ID = " + item;

      result = stmt.executeQuery(query);

      result.next();

      if(quantity > 0 && result.getInt(1) >= quantity){

        query = "select max(id) from transaction";

        result = stmt.executeQuery(query);

        result.next();

        transaction = result.getInt(1) + 1;

        query = "update inventory . . .”;

        stmt.executeUpdate(query);

        query = "insert into transaction . .  . ;

        stmt.executeUpdate(query);

        query = "insert into transactionitem . . . “ ;

        stmt.executeUpdate(query);

        query = "select quantity from inventory";

        result = stmt.executeQuery(query);

        for(int i = 0; result.next(); i++){

          inventory[i][3] = result.getObject(1);

        }

        inventoryTable.tableChanged(new TableModelEvent(inventoryTable.getModel()));

      }else{

        JOptionPane.showMessageDialog(this,"Quantity to sell exceeds stock!");

      }

    }catch(Exception x){ x.printStackTrace();}

  }

 

  void invButton_actionPerformed(ActionEvent e) {

    try{

      query = "select * from inventory";

      result = stmt.executeQuery(query);

      columnNames = getColumnNames(result);

      inventory = setToArray(result);

      inventoryTable = new JTable(inventory, columnNames);

      tablePane.getViewport().add(inventoryTable, null);

      isInventoryOnscreen = true;

    }catch(Exception x){ x.printStackTrace();}

  }

 

  void transButton_actionPerformed(ActionEvent e) {

    /* similar , but longer

     

  }

 

  Object[][] setToArray(ResultSet s){

    Vector data = new Vector();

    Object[][] table = null;

    int columns = 0 , rows = 0;

    try{

      columns = s.getMetaData().getColumnCount();

      while(s.next()){

        data.add(rows, new Vector());

        for(int i = 0; i < columns; i++){

          ((Vector)data.get(rows)).add(i,s.getObject(i+1));

        }

        rows++;

      }

      table = new Object[rows][columns];

      for(int i = 0; i < rows; i++){

        for(int j = 0; j < columns; j++){

          table[i][j] = ((Vector)data.get(i)).get(j);

        }

      }

    }catch(Exception e){ e.printStackTrace(); }

    return table;

  }

 

  Object[] getColumnNames(ResultSet s){

    Vector names = new Vector();

    int columns = 0;

    try{

      columns = s.getMetaData().getColumnCount();

      for(int i = 0; i < columns; i++){

        names.add(i,s.getMetaData().getColumnLabel(i+1));

      }

    }catch(Exception e){ e.printStackTrace(); }

    return names.toArray();

  }

   

}