1 package org.neuclear.ledger.servlets;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
59
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
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 }