package auction; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.naming.*; import javax.ejb.*; import java.rmi.RemoteException; import java.util.*; import java.text.NumberFormat; import bidder.*; import registration.*; import seller.*; import pool.*; import search.*; public class AuctionServlet extends HttpServlet { Context ctx=null; private String detailsTemplate; public void init(ServletConfig config) throws ServletException{ super.init(config); try { ctx = getInitialContext(); }catch (Exception e){ System.err.println("failed to contact EJB server"+e); } try { detailsTemplate=readFile(config.getInitParameter("detailstemplate")); } catch(IOException e) { System.err.println("Error in AuctionServlet "+e); } } public void service(HttpServletRequest request, HttpServletResponse response) throws IOException { String cmd; response.setContentType("text/html"); ServletOutputStream out = response.getOutputStream(); if (ctx == null ) { try { ctx = getInitialContext(); }catch (Exception e){ System.err.println("failed to contact EJB server"+e); } } cmd=request.getParameter("action"); if(cmd !=null) { if(cmd.equals("list")) { listAllItems(out); } else if(cmd.equals("newlist")) { listAllNewItems(out); } else if(cmd.equals("search")) { searchItems(out, request); } else if(cmd.equals("close")) { listClosingItems(out); } else if (cmd.equals("insert")) { insertItem(out, request); } else if (cmd.equals("details")) { itemDetails(out, request ); } else if (cmd.equals("bid")) { itemBid(out, request) ; } else if (cmd.equals("register")) { registerUser(out, request); } } else { // no command set setTitle(out, "error"); } setFooter(out); out.flush(); } static private void addLine(String message, ServletOutputStream out) throws IOException { if(message !=null) { out.println("
"+message); } } static public Context getInitialContext() throws Exception { Properties p = new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.TengahInitialContextFactory"); return new InitialContext(p); } private void listAllItems(ServletOutputStream out) throws IOException{ String text = "Click Item number for description and to place bid."; setTitle(out, "Auction results"); try { addLine("
"+text, out); BidderHome bhome=(BidderHome) ctx.lookup("bidder"); Bidder bid=bhome.create(); Enumeration enum=(Enumeration)bid.getItemList(); if(enum != null) { displayitems(enum, out); addLine("", out); } } catch (Exception e) { addLine("AuctionServlet List All Items error",out); System.out.println("AuctionServlet :"+e); } out.flush(); } private void listAllNewItems(ServletOutputStream out) throws IOException { setTitle(out, "New Auction Items"); try { addLine("", out); String text = "Click Item number for description and to place bid."; addLine(text, out); BidderHome bhome=(BidderHome) ctx.lookup("bidder"); Bidder bid=bhome.create(); Enumeration enum=(Enumeration)bid.getNewItemList(); if(enum != null) { displayitems(enum, out); addLine("", out); } } catch (Exception e) { addLine("AuctionServlet List New Items error", out); System.out.println("AuctionServlet :"+e); } out.flush(); } private void searchItems(ServletOutputStream out, HttpServletRequest request) throws IOException { String searchString=request.getParameter("searchString"); String text = "Click Item number for description and to place bid."; setTitle(out, "Search Results"); try { addLine("
"+text, out); AuctionItemHome ahome = (AuctionItemHome) ctx.lookup("auctionitems"); SearchHome shome=(SearchHome) ctx.lookup("search"); Search search=shome.create(); Enumeration enum=(Enumeration) search.getMatchingItemsList(searchString); addLine("", out); while ((enum != null) && (enum.hasMoreElements())) { while(enum.hasMoreElements()) { AuctionItem ai=ahome.findByPrimaryKey((AuctionItemPK)enum.nextElement()); displayLineItem(ai, out); } } addLine("
ItemSummaryCurrent High bidNumber of bidsClosing Date
", out); } catch (Exception e) { addLine("AuctionServlet Search Items error", out); System.out.println("AuctionServlet :"+e); } out.flush(); } private void listClosingItems(ServletOutputStream out) throws IOException{ setTitle(out, "Items Due to Close Today"); String text = "Click Item number for description and to place bid."; setTitle(out, "Items Due to Close Today"); try { addLine("
"+text, out); BidderHome bhome=(BidderHome) ctx.lookup("bidder"); Bidder bid=bhome.create(); Enumeration enum=(Enumeration)bid.getClosedItemList(); if(enum != null) { displayitems(enum, out); addLine("", out); } } catch (Exception e) { addLine("AuctionServlet List Closed Items error", out); System.out.println("AuctionServlet :"+e); } out.flush(); } private void insertItem(ServletOutputStream out, HttpServletRequest request) throws IOException{ setTitle(out, "Insert Auction Item"); String seller=request.getParameter("seller"); String description=request.getParameter("description"); String summary=request.getParameter("summary"); String password=request.getParameter("password"); String price=request.getParameter("startprice"); double startprice=0.00; try{ startprice=((Number)NumberFormat.getCurrencyInstance().parse("$"+price)).doubleValue(); }catch(java.text.ParseException e){ System.out.println("money problem"+e); return; }catch (NumberFormatException e) { System.out.println("money problem"+e); return; } int auctiondays=7; try{ auctiondays=Integer.parseInt(request.getParameter("auctiondays")); } catch(NumberFormatException e){ System.out.println("problem parsing auction days"+e); return; } if(auctiondays<=0 || auctiondays>7) { auctiondays=7; } try { SellerHome home = (SellerHome) ctx.lookup("seller"); Seller si= home.create(); if(si != null) { int result= si.insertItem(seller, password, description, auctiondays, startprice, summary); if (result >0) { addLine("Inserted item "+summary, out); addLine("Details available here", out); } else { addLine("Error inserting item", out); return; } addLine("", out); } } catch (Exception e) { addLine("AuctionServlet Insert Item error", out); System.out.println("AuctionServlet :"+e); } out.flush(); } private void itemDetails(ServletOutputStream out, HttpServletRequest request) throws IOException{ setTitle(out, "Item Details"); String item=request.getParameter("item"); int itemid=0; try { itemid=Integer.parseInt(item); }catch (NumberFormatException e) { System.out.println("problem with item id "+itemid); return; } try { AuctionItemHome home = (AuctionItemHome) ctx.lookup("auctionitems"); AuctionItemPK pk=new AuctionItemPK(); pk.id=itemid; AuctionItem ai=home.findByPrimaryKey(pk); displayPageItem(ai, out); addLine("

Do you want to bid on this item?", out); addLine("

", out); addLine("Enter your user id: ", out); addLine("and password:", out); addLine("Your bid amount:", out); addLine("", out); addLine("", out); addLine("
", out); } catch (Exception e) { addLine("AuctionServlet List Item error", out); System.out.println("AuctionServlet
:"+e); } out.flush(); } private void itemBid(ServletOutputStream out, HttpServletRequest request) throws IOException{ setTitle(out, "Item Bid"); String item=request.getParameter("item"); String buyer=request.getParameter("buyer"); String password=request.getParameter("password"); String bid=request.getParameter("amount"); int itemid=0; double bidamount=0; try { itemid=Integer.parseInt(item); }catch (NumberFormatException e) { System.out.println("problem with item id " +itemid); return; } try { bidamount=Double.valueOf(bid).doubleValue(); }catch (NumberFormatException e) { System.out.println("problem with bid" +bid); return; } try { BidderHome bhome = (BidderHome) ctx.lookup("bidder"); Bidder bidbean=bhome.create(); int result=bidbean.placeBid(itemid, buyer, password, bidamount); switch(result) { case Auction.OUT_BID: addLine("Your bid was not high enough", out); break; case Auction.HIGH_BID: addLine("You are the high bidder", out); break; case Auction.AUCTION_OVER: addLine("This auction has finished", out); break; case Auction.INVALID_USER: addLine("Invalid user or password", out); break; default: addLine("Problem submitting bid", out); } } catch (Exception e) { addLine("AuctionServlet Bid error", out); System.out.println("AuctionServlet :"+e); } out.flush(); } private void registerUser(ServletOutputStream out, HttpServletRequest request) throws IOException{ setTitle(out, "Register User"); String user=request.getParameter("user"); String password=request.getParameter("password"); String creditcard=request.getParameter("creditcard"); String emailaddress=request.getParameter("emailaddress"); try { RegistrationHome home = (RegistrationHome) ctx.lookup("registration"); Registration reguser= home.create(user, password, emailaddress, creditcard); if(reguser != null) { addLine("Created user: "+reguser.getUser(), out); addLine("", out); } else { addLine("Error creating user id, possibly already exists ", out); } } catch(Exception e) { addLine("AuctionServlet registration error", out); System.out.println("AuctionServlet :"+e); } out.flush(); } static private void displayitems(Enumeration e, ServletOutputStream out) throws Exception{ addLine("", out); while((e !=null) && (e.hasMoreElements())) { while(e.hasMoreElements()) { displayLineItem((AuctionItem) e.nextElement(), out); } } addLine("
ItemSummaryCurrent High bidNumber of bidsClosing Date
", out); } static private void displayLineItem(AuctionItem auctionItem, ServletOutputStream out) throws RemoteException, IOException { StringBuffer line= new StringBuffer(); int bidcount=auctionItem.getBidCount(); int key=(int)auctionItem.getId(); line.append(""+key+""); line.append(""+auctionItem.getSummary() +""); if(bidcount >0) { line.append(""+NumberFormat.getCurrencyInstance().format(auctionItem.getHighBid()) +""); } else { line.append("-"); } line.append(""+bidcount+""); line.append(""+auctionItem.getEndDate() +""); addLine(line.toString(), out); } static private void displayPageItem(AuctionItem auctionItem, ServletOutputStream out) throws RemoteException, IOException { int bidcount=auctionItem.getBidCount(); addLine(auctionItem.getSummary(), out); addLine("Auction Item Number: "+auctionItem.getPrimaryKey(), out); if(bidcount >0) { addLine("

Current price: "+NumberFormat.getCurrencyInstance().format(auctionItem.getHighBid()), out); addLine("Minimum increment: "+NumberFormat.getCurrencyInstance().format(auctionItem.getIncrement()), out); } else { addLine("

Current price: "+NumberFormat.getCurrencyInstance().format(auctionItem.getStartPrice()), out); } addLine("# of bids: "+bidcount, out); addLine("

Auction Started: "+auctionItem.getStartDate(), out); addLine("Auction Ends: "+auctionItem.getEndDate(), out); addLine("

Seller: "+auctionItem.getSeller(), out); if(bidcount >0) { addLine("High Bidder: "+auctionItem.getHighBidder(), out); } else { addLine("High Bidder: "+"-", out); } addLine("


", out); addLine("Description: "+auctionItem.getDescription(), out); } private String readFile (String file) throws IOException { if (file != null) { StringBuffer buffer = new StringBuffer(); BufferedReader reader = new BufferedReader (new FileReader (file)); String line; while ( (line=reader.readLine()) != null ) { buffer.append (line+'\n'); } reader.close(); return buffer.toString(); } else { return null; } } private void setTitle(ServletOutputStream out, String title) { try { out.println(""+title+""); out.println(""); } catch(IOException e) { System.out.println("Unable to set title"+e); } } private void setFooter(ServletOutputStream out) { try { out.println("


Register"); out.println("|"); out.println("New Items"); out.println("|"); out.println("Closing Items"); out.println("|"); out.println("All Items"); out.println("|"); out.println("Sell Items"); out.println("
"); } catch (IOException e) { System.out.println("Unable to set footer"+e); } } }