PageRenderTime 46ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/zkwebui/WEB-INF/src/org/adempiere/webui/window/AboutWindow.java

https://bitbucket.org/emmie/adempiere-patches
Java | 405 lines | 322 code | 53 blank | 30 comment | 14 complexity | f94050a94b731a1654e298068eeea809 MD5 | raw file
  1. /******************************************************************************
  2. * Product: Adempiere ERP & CRM Smart Business Solution *
  3. * Copyright (C) 2008 Low Heng Sin. All Rights Reserved. *
  4. * This program is free software; you can redistribute it and/or modify it *
  5. * under the terms version 2 of the GNU General Public License as published *
  6. * by the Free Software Foundation. This program is distributed in the hope *
  7. * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
  8. * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
  9. * See the GNU General Public License for more details. *
  10. * You should have received a copy of the GNU General Public License along *
  11. * with this program; if not, write to the Free Software Foundation, Inc., *
  12. * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
  13. *****************************************************************************/
  14. package org.adempiere.webui.window;
  15. import java.util.Vector;
  16. import org.adempiere.webui.component.Button;
  17. import org.adempiere.webui.component.Checkbox;
  18. import org.adempiere.webui.component.Label;
  19. import org.adempiere.webui.component.ListHead;
  20. import org.adempiere.webui.component.ListHeader;
  21. import org.adempiere.webui.component.Listbox;
  22. import org.adempiere.webui.component.SimpleListModel;
  23. import org.adempiere.webui.component.Tab;
  24. import org.adempiere.webui.component.Tabbox;
  25. import org.adempiere.webui.component.Tabpanel;
  26. import org.adempiere.webui.component.Tabpanels;
  27. import org.adempiere.webui.component.Tabs;
  28. import org.adempiere.webui.component.ToolBarButton;
  29. import org.adempiere.webui.component.Window;
  30. import org.adempiere.webui.theme.ThemeManager;
  31. import org.compiere.Adempiere;
  32. import org.compiere.model.MUser;
  33. import org.compiere.util.CLogErrorBuffer;
  34. import org.compiere.util.CLogMgt;
  35. import org.compiere.util.Env;
  36. import org.compiere.util.Msg;
  37. import org.zkoss.util.media.AMedia;
  38. import org.zkoss.zhtml.Pre;
  39. import org.zkoss.zhtml.Text;
  40. import org.zkoss.zk.ui.event.Event;
  41. import org.zkoss.zk.ui.event.EventListener;
  42. import org.zkoss.zk.ui.event.Events;
  43. import org.zkoss.zk.ui.event.SizeEvent;
  44. import org.zkoss.zul.Div;
  45. import org.zkoss.zul.Filedownload;
  46. import org.zkoss.zul.Hbox;
  47. import org.zkoss.zul.Image;
  48. import org.zkoss.zul.Separator;
  49. import org.zkoss.zul.Vbox;
  50. /**
  51. *
  52. * @author Low Heng Sin
  53. *
  54. */
  55. public class AboutWindow extends Window implements EventListener {
  56. /**
  57. *
  58. */
  59. private static final long serialVersionUID = -257313771447940626L;
  60. private Checkbox bErrorsOnly;
  61. private Listbox logTable;
  62. private Tabbox tabbox;
  63. private Tabpanels tabPanels;
  64. private Button btnDownload;
  65. private Button btnErrorEmail;
  66. private Tab tabLog;
  67. public AboutWindow() {
  68. super();
  69. init();
  70. }
  71. private void init() {
  72. this.setWidth("500px");
  73. this.setHeight("450px");
  74. this.setPosition("center");
  75. this.setTitle(ThemeManager.getBrowserTitle());
  76. this.setClosable(true);
  77. this.setSizable(true);
  78. this.addEventListener(Events.ON_SIZE, this);
  79. Vbox layout = new Vbox();
  80. layout.setWidth("100%");
  81. layout.setParent(this);
  82. tabbox = new Tabbox();
  83. tabbox.setParent(layout);
  84. tabbox.setWidth("480px");
  85. tabbox.setHeight("380px");
  86. // tabbox.setSclass("lite");
  87. Tabs tabs = new Tabs();
  88. tabs.setParent(tabbox);
  89. tabPanels = new Tabpanels();
  90. tabPanels.setParent(tabbox);
  91. tabPanels.setWidth("480px");
  92. //about
  93. Tab tab = new Tab();
  94. tab.setLabel(Msg.getMsg(Env.getCtx(), "About"));
  95. tab.setParent(tabs);
  96. Tabpanel tabPanel = createAbout();
  97. tabPanel.setParent(tabPanels);
  98. //Credit
  99. tab = new Tab();
  100. tab.setLabel(Msg.getMsg(Env.getCtx(), "Credits"));
  101. tab.setParent(tabs);
  102. tabPanel = createCredit();
  103. tabPanel.setParent(tabPanels);
  104. //Info
  105. tab = new Tab();
  106. tab.setLabel(Msg.getMsg(Env.getCtx(), "Info"));
  107. tab.setParent(tabs);
  108. tabPanel = createInfo();
  109. tabPanel.setParent(tabPanels);
  110. //Trace
  111. tab = new Tab();
  112. tab.setLabel("Errors");
  113. tabLog = tab;
  114. tab.setParent(tabs);
  115. tabPanel = createTrace();
  116. tabPanel.setParent(tabPanels);
  117. Hbox hbox = new Hbox();
  118. hbox.setParent(layout);
  119. hbox.setPack("end");
  120. hbox.setWidth("100%");
  121. Button btnOk = new Button();
  122. btnOk.setImage("/images/Ok24.png");
  123. btnOk.addEventListener(Events.ON_CLICK, this);
  124. btnOk.setParent(hbox);
  125. this.setBorder("normal");
  126. }
  127. private Tabpanel createTrace() {
  128. Tabpanel tabPanel = new Tabpanel();
  129. Vbox vbox = new Vbox();
  130. vbox.setParent(tabPanel);
  131. vbox.setWidth("100%");
  132. vbox.setHeight("100%");
  133. Hbox hbox = new Hbox();
  134. bErrorsOnly = new Checkbox();
  135. bErrorsOnly.setLabel(Msg.getMsg(Env.getCtx(), "ErrorsOnly"));
  136. //default only show error
  137. bErrorsOnly.setChecked(true);
  138. bErrorsOnly.addEventListener(Events.ON_CHECK, this);
  139. hbox.appendChild(bErrorsOnly);
  140. btnDownload = new Button(Msg.getMsg(Env.getCtx(), "SaveFile"));
  141. btnDownload.addEventListener(Events.ON_CLICK, this);
  142. hbox.appendChild(btnDownload);
  143. btnErrorEmail = new Button(Msg.getMsg(Env.getCtx(), "SendEMail"));
  144. btnErrorEmail.addEventListener(Events.ON_CLICK, this);
  145. hbox.appendChild(btnErrorEmail);
  146. vbox.appendChild(hbox);
  147. Vector<String> columnNames = CLogErrorBuffer.get(true).getColumnNames(Env.getCtx());
  148. logTable = new Listbox();
  149. ListHead listHead = new ListHead();
  150. listHead.setParent(logTable);
  151. listHead.setSizable(true);
  152. for (Object obj : columnNames) {
  153. ListHeader header = new ListHeader(obj.toString());
  154. header.setWidth("100px");
  155. listHead.appendChild(header);
  156. }
  157. vbox.appendChild(logTable);
  158. logTable.setWidth("480px");
  159. logTable.setHeight("310px");
  160. logTable.setVflex(false);
  161. updateLogTable();
  162. return tabPanel;
  163. }
  164. private void updateLogTable() {
  165. Vector<Vector<Object>> data = CLogErrorBuffer.get(true).getLogData(bErrorsOnly.isChecked());
  166. SimpleListModel model = new SimpleListModel(data);
  167. model.setMaxLength(new int[]{0, 0, 0, 200, 0, 200});
  168. logTable.setItemRenderer(model);
  169. logTable.setModel(model);
  170. if (bErrorsOnly.isSelected())
  171. tabLog.setLabel(Msg.getMsg(Env.getCtx(), "Errors") + " (" + data.size() + ")");
  172. else
  173. tabLog.setLabel(Msg.getMsg(Env.getCtx(), "TraceInfo") + " (" + data.size() + ")");
  174. }
  175. private Tabpanel createInfo() {
  176. Tabpanel tabPanel = new Tabpanel();
  177. Div div = new Div();
  178. div.setParent(tabPanel);
  179. div.setHeight("100%");
  180. div.setStyle("overflow: auto;");
  181. Pre pre = new Pre();
  182. pre.setParent(div);
  183. Text text = new Text(CLogMgt.getInfo(null).toString());
  184. text.setParent(pre);
  185. return tabPanel;
  186. }
  187. private Tabpanel createCredit() {
  188. Tabpanel tabPanel = new Tabpanel();
  189. Vbox vbox = new Vbox();
  190. vbox.setParent(tabPanel);
  191. vbox.setWidth("100%");
  192. Hbox hbox = new Hbox();
  193. hbox.setParent(vbox);
  194. ToolBarButton link = new ToolBarButton();
  195. link.setImage("images/Posterita.jpg");
  196. link.setParent(hbox);
  197. link.setHref("http://www.posterita.org");
  198. link.setTarget("_blank");
  199. Label label= new Label("Contributed the initial Zk Web Client code.");
  200. label.setParent(hbox);
  201. Separator separator = new Separator();
  202. separator.setParent(vbox);
  203. Div div = new Div();
  204. div.setParent(vbox);
  205. div.setWidth("100%");
  206. Label caption = new Label("Sponsors");
  207. caption.setStyle("font-weight: bold;");
  208. div.appendChild(caption);
  209. separator = new Separator();
  210. separator.setBar(true);
  211. separator.setParent(div);
  212. Vbox content = new Vbox();
  213. content.setWidth("100%");
  214. content.setParent(div);
  215. link = new ToolBarButton();
  216. link.setLabel("Sysnova");
  217. link.setHref("http://www.sysnova.com/");
  218. link.setTarget("_blank");
  219. link.setParent(content);
  220. link = new ToolBarButton();
  221. link.setLabel("Idalica");
  222. link.setHref("http://www.idalica.com/");
  223. link.setTarget("_blank");
  224. link.setParent(content);
  225. separator = new Separator();
  226. separator.setParent(vbox);
  227. div = new Div();
  228. div.setParent(vbox);
  229. div.setWidth("100%");
  230. caption = new Label("Contributors");
  231. caption.setStyle("font-weight: bold;");
  232. div.appendChild(caption);
  233. separator = new Separator();
  234. separator.setBar(true);
  235. separator.setParent(div);
  236. content = new Vbox();
  237. content.setWidth("100%");
  238. content.setParent(div);
  239. link = new ToolBarButton();
  240. link.setLabel("Ashley G Ramdass");
  241. link.setHref("http://www.adempiere.com/wiki/index.php/User:Agramdass");
  242. link.setTarget("_blank");
  243. link.setParent(content);
  244. link = new ToolBarButton();
  245. link.setLabel("Low Heng Sin");
  246. link.setHref("http://www.adempiere.com/wiki/index.php/User:Hengsin");
  247. link.setTarget("_blank");
  248. link.setParent(content);
  249. link = new ToolBarButton();
  250. link.setLabel("Carlos Ruiz");
  251. link.setHref("http://www.adempiere.com/wiki/index.php/User:CarlosRuiz");
  252. link.setTarget("_blank");
  253. link.setParent(content);
  254. link = new ToolBarButton();
  255. link.setLabel("Teo Sarca");
  256. link.setHref("http://www.adempiere.com/wiki/index.php/User:Teo_sarca");
  257. link.setTarget("_blank");
  258. link.setParent(content);
  259. link = new ToolBarButton();
  260. link.setLabel("Trifon Trifonov");
  261. link.setHref("http://www.adempiere.com/wiki/index.php/User:Trifonnt");
  262. link.setTarget("_blank");
  263. link.setParent(content);
  264. return tabPanel;
  265. }
  266. private Tabpanel createAbout() {
  267. Tabpanel tabPanel = new Tabpanel();
  268. Vbox vbox = new Vbox();
  269. vbox.setWidth("100%");
  270. vbox.setHeight("100%");
  271. vbox.setAlign("center");
  272. vbox.setPack("center");
  273. vbox.setParent(tabPanel);
  274. Image image = new Image(ThemeManager.getSmallLogo());
  275. image.setParent(vbox);
  276. Text text = new Text(Adempiere.getSubtitle());
  277. text.setParent(vbox);
  278. Separator separator = new Separator();
  279. separator.setParent(vbox);
  280. text = new Text(Adempiere.getVersion());
  281. text.setParent(vbox);
  282. separator = new Separator();
  283. separator.setParent(vbox);
  284. ToolBarButton link = new ToolBarButton();
  285. link.setLabel("Sourceforge.net Project Site");
  286. link.setHref("http://www.sourceforge.net/projects/adempiere");
  287. link.setTarget("_blank");
  288. link.setParent(vbox);
  289. separator = new Separator();
  290. separator.setParent(vbox);
  291. link = new ToolBarButton();
  292. link.setLabel("ADempiere Wiki");
  293. link.setHref("http://www.adempiere.com/wiki/index.php");
  294. link.setTarget("_blank");
  295. link.setParent(vbox);
  296. separator = new Separator();
  297. separator.setParent(vbox);
  298. link = new ToolBarButton();
  299. link.setLabel("ADempiere.org");
  300. link.setHref("http://www.adempiere.org");
  301. link.setTarget("_blank");
  302. link.setParent(vbox);
  303. separator = new Separator();
  304. separator.setParent(vbox);
  305. link = new ToolBarButton();
  306. link.setLabel("ADempiere.com");
  307. link.setHref("http://www.adempiere.com");
  308. link.setTarget("_blank");
  309. link.setParent(vbox);
  310. return tabPanel;
  311. }
  312. public void onEvent(Event event) throws Exception {
  313. if (event.getTarget() == bErrorsOnly) {
  314. this.updateLogTable();
  315. }
  316. else if (event.getTarget() == btnDownload)
  317. downloadLog();
  318. else if (event.getTarget() == btnErrorEmail)
  319. cmd_errorEMail();
  320. else if (event instanceof SizeEvent)
  321. doResize((SizeEvent)event);
  322. else if (Events.ON_CLICK.equals(event.getName()))
  323. this.detach();
  324. }
  325. private void doResize(SizeEvent event) {
  326. int width = Integer.parseInt(event.getWidth().substring(0, event.getWidth().length() - 2));
  327. int height = Integer.parseInt(event.getHeight().substring(0, event.getHeight().length() - 2));
  328. tabbox.setWidth((width - 20) + "px");
  329. tabbox.setHeight((height - 70) + "px");
  330. tabPanels.setWidth((width - 20) + "px");
  331. logTable.setHeight((height - 140) + "px");
  332. logTable.setWidth((width - 30) + "px");
  333. }
  334. private void downloadLog() {
  335. String log = CLogErrorBuffer.get(true).getErrorInfo(Env.getCtx(), bErrorsOnly.isChecked());
  336. AMedia media = new AMedia("trace.log", null, "text/plain", log.getBytes());
  337. Filedownload.save(media);
  338. }
  339. /**
  340. * EMail Errors
  341. */
  342. private void cmd_errorEMail()
  343. {
  344. new WEMailDialog(this,
  345. "EMail Trace",
  346. MUser.get(Env.getCtx()),
  347. "", // to
  348. "Adempiere Trace Info",
  349. CLogErrorBuffer.get(true).getErrorInfo(Env.getCtx(), bErrorsOnly.isSelected()),
  350. null);
  351. } // cmd_errorEMail
  352. }