package auction; import java.io.*; import javax.naming.*; import javax.ejb.*; import java.rmi.RemoteException; import java.util.*; import java.text.NumberFormat; import admin.ResultsModel; import bidder.*; import registration.*; import seller.*; import search.*; import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; import java.awt.*; import java.text.*; import javax.swing.table.*; import javax.swing.tree.*; public class AuctionClient implements ActionListener{ //Change the standalone value to false if you want to //run this program with your ejb server final static boolean standaloneMode=true; javax.naming.Context ctx=null; JMenuBar mb = new JMenuBar(); JMenu file = new JMenu("File"); JMenu reports = new JMenu("Reports"); JMenuItem filePrint = new JMenuItem("Print"); JSeparator separator = new JSeparator(); JMenuItem fileQuit = new JMenuItem("Quit"); JMenuItem itemList = new JMenuItem("List All Items"); JMenuItem browseItems = new JMenuItem("Browse Items"); JFrame frame=new JFrame(); JViewport innerPort, headers; JScrollBar scrollBar; JScrollPane scrollPane; JTable fixedTable, scrollTable; TableColumnModel fixedColumnModel, scrollColumnModel; int rowHeight=64; JTree tree; DefaultMutableTreeNode[] nodes; JTextField findField; JPanel homePanel=null; JPanel browsePanel=null; JPanel scrollPanel=null; public AuctionClient() { if(!standaloneMode) { try { ctx = getInitialContext(); } catch (Exception e) { System.out.println("error contacting EJB server"+e); } } /* Add menu items to menus */ file.add(filePrint); file.add(separator); file.add(fileQuit); reports.add(itemList); reports.add(browseItems); mb.add(file); mb.add(reports); frame.setJMenuBar(mb); filePrint.addActionListener(this); fileQuit.addActionListener(this); itemList.addActionListener(this); browseItems.addActionListener(this); homePanel = new JPanel(); homePanel.setLayout(new CardLayout()); browsePanel = new JPanel(); browsePanel.setLayout(new BorderLayout()); scrollPanel = new JPanel(); scrollPanel.setLayout(new BorderLayout()); homePanel.add(scrollPanel, "List All Items"); homePanel.add(browsePanel, "Browse Items"); frame.getContentPane().add(homePanel, BorderLayout.CENTER); frame.setSize(200,100); frame.setVisible(true); } public void actionPerformed(ActionEvent evt) { Object obj = evt.getSource(); if (obj == itemList) { try { listAllItems(); ((CardLayout)homePanel.getLayout()).show(homePanel, ((JMenuItem)obj).getText()); } catch (Exception e) { System.out.println("Exception: "+e); } } else if (obj == browseItems) { try { browseItems(); ((CardLayout)homePanel.getLayout()).show(homePanel, ((JMenuItem)obj).getText()); } catch (Exception e) { System.out.println("Exception: "+e); } } else if (obj == fileQuit) { frame.dispose(); System.exit(0); } } static public javax.naming.Context getInitialContext() throws Exception { Properties p = new Properties(); p.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.TengahInitialContextFactory"); return new InitialContext(p); } private void listAllItems() throws IOException { ResultsModel rm=new ResultsModel(); if(!standaloneMode) { try { BidderHome bhome=(BidderHome) ctx.lookup("bidder"); Bidder bid=bhome.create(); Enumeration enum=(Enumeration)bid.getItemList(); if(enum != null) { rm.update(enum); } } catch (Exception e) { System.out.println("AuctionServlet :"+e); } } else { TestData td= new TestData(); rm.update(td.results()); } scrollTable=new JTable(rm); adjustColumnWidth(scrollTable.getColumn("End Date"), 150); scrollTable.setRowHeight(rowHeight); adjustColumnWidth(scrollTable.getColumn("Description"), 120); scrollColumnModel = scrollTable.getColumnModel(); fixedColumnModel = new DefaultTableColumnModel(); TableColumn col = scrollColumnModel.getColumn(0); scrollColumnModel.removeColumn(col); fixedColumnModel.addColumn(col); fixedTable = new JTable(rm,fixedColumnModel); fixedTable.setRowHeight(scrollTable.getRowHeight()); headers = new JViewport(); ListSelectionModel fixedSelection = fixedTable.getSelectionModel(); fixedSelection.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { ListSelectionModel lsm = (ListSelectionModel)e.getSource(); if (!lsm.isSelectionEmpty()) { setScrollableRow(); } } }); ListSelectionModel scrollSelection = scrollTable.getSelectionModel(); scrollSelection.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { ListSelectionModel lsm = (ListSelectionModel)e.getSource(); if (!lsm.isSelectionEmpty()) { setFixedRow(); } } }); CustomRenderer custom = new CustomRenderer(); custom.setHorizontalAlignment(JLabel.CENTER); scrollColumnModel.getColumn(2).setCellRenderer(custom); scrollColumnModel.getColumn(3).setCellRenderer(new CustomButtonRenderer()); CustomButtonEditor customEdit=new CustomButtonEditor(frame); scrollColumnModel.getColumn(3).setCellEditor(customEdit); headers.add(scrollTable.getTableHeader()); JPanel topPanel = new JPanel(); topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.X_AXIS)); adjustColumnWidth(fixedColumnModel.getColumn(0), 100); JTableHeader fixedHeader=fixedTable.getTableHeader(); fixedHeader.setAlignmentY(Component.TOP_ALIGNMENT); topPanel.add(fixedHeader); topPanel.add(Box.createRigidArea(new Dimension(2, 0))); topPanel.setPreferredSize(new Dimension(400, 40)); JPanel headerPanel = new JPanel(); headerPanel.setAlignmentY(Component.TOP_ALIGNMENT); headerPanel.setLayout(new BorderLayout()); JScrollPane scrollpane = new JScrollPane(); scrollBar = scrollpane.getHorizontalScrollBar(); headerPanel.add(headers, "North"); headerPanel.add(scrollBar, "South"); topPanel.add(headerPanel); scrollTable.setPreferredScrollableViewportSize( new Dimension(300,rowHeight*scrollTable.getRowCount())); fixedTable.setPreferredScrollableViewportSize( new Dimension(100,rowHeight*fixedTable.getRowCount())); fixedTable.setPreferredSize( new Dimension(100,rowHeight*fixedTable.getRowCount())); innerPort = new JViewport(); innerPort.setView(scrollTable); scrollpane.setViewport(innerPort); scrollBar.getModel().addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { Point q = headers.getViewPosition(); Point p = innerPort.getViewPosition(); int val = scrollBar.getModel().getValue(); p.x = val; q.x = val; headers.setViewPosition(p); headers.repaint(headers.getViewRect()); innerPort.setViewPosition(p); innerPort.repaint(innerPort.getViewRect()); } }); scrollTable.getTableHeader().setUpdateTableInRealTime(false); JPanel bottomPanel = new JPanel(); bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.X_AXIS)); fixedTable.setAlignmentY(Component.TOP_ALIGNMENT); bottomPanel.add(fixedTable); bottomPanel.add(Box.createRigidArea(new Dimension(2, 0))); innerPort.setAlignmentY(Component.TOP_ALIGNMENT); bottomPanel.add(innerPort); bottomPanel.add(Box.createRigidArea(new Dimension(2, 0))); scrollPane= new JScrollPane(bottomPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); JViewport outerPort = new JViewport(); outerPort.add(bottomPanel); scrollPane.setColumnHeaderView(topPanel); scrollPane.setViewport(outerPort); //scrollpane.getViewport().putClientProperty // ("EnableWindowBlit", Boolean.TRUE); scrollTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); scrollPanel.add(scrollPane); scrollTable.validate(); frame.setSize(450,200); } void setFixedRow() { int index=scrollTable.getSelectedRow(); fixedTable.setRowSelectionInterval(index, index); } void setScrollableRow() { int index=fixedTable.getSelectedRow(); scrollTable.setRowSelectionInterval(index, index); } void adjustColumnWidth(TableColumn c, int size) { c.setPreferredWidth(size); c.setMaxWidth(size); c.setMinWidth(size); } private void browseItems() throws IOException { JPanel findPanel; JButton findButton; Vector newItems=new Vector(); Vector closedItems=new Vector(); Bidder bid=null; Enumeration enum; String[] treelabels = { "All Auctions", "Closed Auction", "New Auctions"}; try { if (!standaloneMode) { BidderHome bhome=(BidderHome) ctx.lookup("bidder"); bid=bhome.create(); enum=(Enumeration)bid.getNewItemList(); } else { TestNewTreeData tntd= new TestNewTreeData(); enum=tntd.results(); } while((enum !=null) && (enum.hasMoreElements())) { while(enum.hasMoreElements()) { AuctionItem auctionItem=(AuctionItem)enum.nextElement(); newItems.addElement(new Integer(auctionItem.getId())); } } if (!standaloneMode) { enum=(Enumeration)bid.getClosedItemList(); } else { TestClosedTreeData tctd= new TestClosedTreeData(); enum=tctd.results(); } while((enum !=null) && (enum.hasMoreElements())) { while(enum.hasMoreElements()) { AuctionItem auctionItem=(AuctionItem)enum.nextElement(); closedItems.addElement(new Integer(auctionItem.getId())); } } } catch (Exception e) { System.out.println("AuctionServlet :"+e); } nodes = new DefaultMutableTreeNode[treelabels.length]; DefaultMutableTreeNode[] closednodes = new DefaultMutableTreeNode[closedItems.size()]; DefaultMutableTreeNode[] newnodes = new DefaultMutableTreeNode[newItems.size()]; for (int i=0; i= 30) { label.setIcon(new ImageIcon("Hot.gif")); } else { label.setIcon(new ImageIcon("Normal.gif")); } return (JLabel)label; } } class CustomButtonEditor extends DefaultCellEditor { final JButton mybutton; JFrame frame; CustomButtonEditor(JFrame frame) { super(new JCheckBox()); mybutton = new JButton(); this.editorComponent = mybutton; this.clickCountToStart = 2; this.frame=frame; mybutton.setOpaque(true); mybutton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { fireEditingStopped(); } }); } protected void fireEditingStopped() { super.fireEditingStopped(); } public Object getCellEditorValue() { JDialog jd= new JDialog(frame, "Time left"); Calendar today=Calendar.getInstance(); Calendar end=Calendar.getInstance(); SimpleDateFormat in=new SimpleDateFormat("yyyy-MM-dd"); try { end.setTime(in.parse(mybutton.getText())); } catch (Exception e){ System.out.println("Error in date"+mybutton.getText()+e); } int days = 0; while(today.before(end)) { today.roll(Calendar.DATE,true); days++; } jd.setSize(200,100); if(today.after(end)) { jd.getContentPane().add(new JLabel("Auction completed")); } else { jd.getContentPane().add(new JLabel("Days left="+days)); } jd.setVisible(true); return new String(mybutton.getText()); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { ((JButton) editorComponent).setText(((JButton)value).getText()); if (isSelected) { ((JButton) editorComponent).setForeground(table.getSelectionForeground()); ((JButton) editorComponent).setBackground(table.getSelectionBackground()); } else { ((JButton) editorComponent).setForeground(table.getForeground()); ((JButton) editorComponent).setBackground(table.getBackground()); } return editorComponent; } } class CustomButtonRenderer extends JButton implements TableCellRenderer { public CustomButtonRenderer() { setOpaque(true); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (isSelected) { ((JButton)value).setForeground(table.getSelectionForeground()); ((JButton)value).setBackground(table.getSelectionBackground()); } else { ((JButton)value).setForeground(table.getForeground()); ((JButton)value).setBackground(table.getBackground()); } return (JButton)value; } }