View Javadoc

1   package org.neuclear.ledger.servlets;
2   
3   /*
4    *  The NeuClear Project and it's libraries are
5    *  (c) 2002-2004 Antilles Software Ventures SA
6    *  For more information see: http://neuclear.org
7    *
8    *  This library is free software; you can redistribute it and/or
9    *  modify it under the terms of the GNU Lesser General Public
10   *  License as published by the Free Software Foundation; either
11   *  version 2.1 of the License, or (at your option) any later version.
12   *
13   *  This library is distributed in the hope that it will be useful,
14   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16   *  Lesser General Public License for more details.
17   *
18   *  You should have received a copy of the GNU Lesser General Public
19   *  License along with this library; if not, write to the Free Software
20   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21   */
22  
23  import org.neuclear.commons.Utility;
24  import org.neuclear.commons.servlets.ServletMessages;
25  import org.neuclear.commons.servlets.ServletTools;
26  import org.neuclear.commons.time.TimeTools;
27  import org.neuclear.id.Identity;
28  import org.neuclear.id.resolver.Resolver;
29  import org.neuclear.ledger.LedgerController;
30  import org.neuclear.ledger.LowlevelLedgerException;
31  import org.neuclear.ledger.UnknownBookException;
32  import org.neuclear.ledger.browser.LedgerBrowser;
33  import org.neuclear.ledger.browser.PortfolioBrowser;
34  
35  import javax.servlet.ServletConfig;
36  import javax.servlet.ServletException;
37  import javax.servlet.http.HttpServlet;
38  import javax.servlet.http.HttpServletRequest;
39  import javax.servlet.http.HttpServletResponse;
40  import java.io.IOException;
41  import java.io.PrintWriter;
42  import java.security.Principal;
43  import java.text.DateFormat;
44  import java.text.NumberFormat;
45  import java.text.ParseException;
46  import java.util.Date;
47  import java.util.ResourceBundle;
48  
49  /***
50   * User: pelleb
51   * Date: Dec 26, 2003
52   * Time: 5:54:05 PM
53   */
54  public class PortfolioBrowserServlet extends HttpServlet {
55      public void init(ServletConfig config) throws ServletException {
56          title = ServletTools.getInitParam("title", config);
57          try {
58  //            ConfigurableContainer pico=(ConfigurableContainer) getServletContext().getAttribute("pico");
59  //            ledger = (LedgerBrowser) pico.getComponentInstance(Ledger.class) ;
60              ledger = (LedgerController) ServletLedgerFactory.getInstance().createLedger(config);
61              if (ledger instanceof LedgerBrowser) {
62                  browser = (LedgerBrowser) ledger;
63              }
64          } catch (Exception e) {
65              e.printStackTrace();
66              throw new ServletException(e);
67          }
68  
69      }
70  
71      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
72          response.setContentType("text/html; charset=UTF-8");
73  //        response.setCharacterEncoding("UTF-8");
74          System.setProperty("file.encoding", "UTF-8");
75          ResourceBundle messages = ServletMessages.getMessages("ledgermessages", request);
76          NumberFormat numbers = NumberFormat.getNumberInstance(request.getLocale());
77          numbers.setMaximumFractionDigits(2);
78          numbers.setMinimumFractionDigits(2);
79          DateFormat dateformat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, request.getLocale());
80          PrintWriter out = response.getWriter();
81          Principal user = request.getUserPrincipal();
82          ServletTools.printHeader(out, request, title, messages.getString("accountportfolio") + " " + Utility.denullString(user.getName()));
83          String url = ServletTools.getAbsoluteURL(request, request.getServletPath());
84          try {
85              String bookid = user.getName();
86              System.out.println("Browsing: " + bookid);
87  
88              PortfolioBrowser stmt = browse(bookid);
89              out.println("<table><tr><th>" + messages.getString("asset") + "</th><th>" + messages.getString("count") + "</th><th>" + messages.getString("balance") + "</th></tr>");
90              int linecount = 0;
91              while (stmt.next()) {
92                  final double balance = stmt.getBalance();
93                  Identity id = (Identity) Resolver.resolveFromCache(stmt.getLedger());
94                  out.print("<tr class=\"");
95                  if ((linecount++) % 2 == 1)
96                      out.print("odd");
97                  else
98                      out.print("even");
99                  if (balance < 0)
100                     out.print("negative");
101                 out.print("\" onMouseOver=\"if(this.className=='even') this.class='evenhover' else this.class='oddhover'\" " +
102                         "onMouseOut=\"if(this.class='evenhover') this.class='even' else this.class='odd'\">" +
103                         "<td style=\"size:small\" title=\"");
104                 out.print(stmt.getLedger());
105                 out.print("\"><a href=\"browse/");
106                 out.print(stmt.getLedger());
107                 out.print("\">");
108                 if (id != null)
109                     out.print(id.getNickname());
110                 else
111                     out.print(stmt.getLedger());
112                 out.print("</a></td><td>");
113                 out.print(stmt.getCount());
114                 out.print("</td><td>");
115                 out.print(numbers.format(balance));
116                 out.print("</td></tr>");
117 
118             }
119             out.println("</table><a href=\"");
120             out.println(ServletTools.getAbsoluteURL(request, "/"));
121             out.println("\">" + messages.getString("mainmenu") + "</a>");
122             out.println("</body></html>");
123         } catch (LowlevelLedgerException e) {
124             e.printStackTrace();
125         } catch (UnknownBookException e) {
126             e.printStackTrace();
127         }
128     }
129 
130 
131     private PortfolioBrowser browse(String book) throws LowlevelLedgerException, UnknownBookException {
132         return browser.browsePortfolio(ledger.getBook(book));
133     }
134 
135     private Date parseDate(String fromStr) {
136         if (Utility.isEmpty(fromStr))
137             return null;
138         try {
139             return TimeTools.parseTimeStamp(fromStr);
140         } catch (ParseException e) {
141             return null;
142         }
143     }
144 
145     private LedgerController ledger;
146     private LedgerBrowser browser;
147     private String title;
148 }