PageRenderTime 54ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://bitbucket.org/mdlibunao/idempiere
Java | 589 lines | 489 code | 70 blank | 30 comment | 54 complexity | 884df74e1df1d7827b2ed32be25c1d37 MD5 | raw file
Possible License(s): BSD-3-Clause
  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.io.File;
  16. import java.io.FileNotFoundException;
  17. import java.util.Vector;
  18. import java.util.logging.Level;
  19. import org.adempiere.webui.apps.AEnv;
  20. import org.adempiere.webui.component.Button;
  21. import org.adempiere.webui.component.Checkbox;
  22. import org.adempiere.webui.component.FolderBrowser;
  23. import org.adempiere.webui.component.Label;
  24. import org.adempiere.webui.component.ListHead;
  25. import org.adempiere.webui.component.ListHeader;
  26. import org.adempiere.webui.component.Listbox;
  27. import org.adempiere.webui.component.ListboxFactory;
  28. import org.adempiere.webui.component.SimpleListModel;
  29. import org.adempiere.webui.component.Tab;
  30. import org.adempiere.webui.component.Tabbox;
  31. import org.adempiere.webui.component.Tabpanel;
  32. import org.adempiere.webui.component.Tabpanels;
  33. import org.adempiere.webui.component.Tabs;
  34. import org.adempiere.webui.component.ToolBarButton;
  35. import org.adempiere.webui.component.Window;
  36. import org.adempiere.webui.session.SessionManager;
  37. import org.adempiere.webui.theme.ThemeManager;
  38. import org.compiere.Adempiere;
  39. import org.compiere.model.MUser;
  40. import org.compiere.util.CLogErrorBuffer;
  41. import org.compiere.util.CLogMgt;
  42. import org.compiere.util.Env;
  43. import org.compiere.util.Ini;
  44. import org.compiere.util.Msg;
  45. import org.compiere.util.Util;
  46. import org.zkoss.util.media.AMedia;
  47. import org.zkoss.zhtml.Pre;
  48. import org.zkoss.zhtml.Text;
  49. import org.zkoss.zhtml.Textarea;
  50. import org.zkoss.zk.ui.event.Event;
  51. import org.zkoss.zk.ui.event.EventListener;
  52. import org.zkoss.zk.ui.event.Events;
  53. import org.zkoss.zk.ui.event.MaximizeEvent;
  54. import org.zkoss.zk.ui.event.SizeEvent;
  55. import org.zkoss.zul.Div;
  56. import org.zkoss.zul.Filedownload;
  57. import org.zkoss.zul.Hbox;
  58. import org.zkoss.zul.Image;
  59. import org.zkoss.zul.Listitem;
  60. import org.zkoss.zul.Separator;
  61. import org.zkoss.zul.Space;
  62. import org.zkoss.zul.Vbox;
  63. /**
  64. *
  65. * @author Low Heng Sin
  66. *
  67. */
  68. public class AboutWindow extends Window implements EventListener {
  69. /**
  70. * generated serial version id
  71. */
  72. private static final long serialVersionUID = -257313771447940626L;
  73. private Checkbox bErrorsOnly;
  74. private Listbox logTable;
  75. private Tabbox tabbox;
  76. private Tabpanels tabPanels;
  77. private Button btnDownload;
  78. private Button btnErrorEmail;
  79. private Button btnViewLog;
  80. private Tab tabLog;
  81. private Button btnAdempiereLog;
  82. private Button btnServerLog;
  83. private Listbox levelListBox;
  84. public AboutWindow() {
  85. super();
  86. init();
  87. }
  88. private void init() {
  89. this.setPosition("center");
  90. this.setTitle(ThemeManager.getBrowserTitle());
  91. this.setClosable(true);
  92. this.setMaximizable(true);
  93. this.setSizable(true);
  94. this.addEventListener(Events.ON_SIZE, this);
  95. this.addEventListener(Events.ON_MAXIMIZE, this);
  96. Vbox layout = new Vbox();
  97. layout.setWidth("100%");
  98. layout.setParent(this);
  99. tabbox = new Tabbox();
  100. tabbox.setParent(layout);
  101. tabbox.setWidth("480px");
  102. tabbox.setHeight("380px");
  103. // tabbox.setSclass("lite");
  104. Tabs tabs = new Tabs();
  105. tabs.setParent(tabbox);
  106. tabPanels = new Tabpanels();
  107. tabPanels.setParent(tabbox);
  108. tabPanels.setWidth("480px");
  109. //about
  110. Tab tab = new Tab();
  111. tab.setLabel(Msg.getMsg(Env.getCtx(), "About"));
  112. tab.setParent(tabs);
  113. Tabpanel tabPanel = createAbout();
  114. tabPanel.setParent(tabPanels);
  115. //Credit
  116. tab = new Tab();
  117. tab.setLabel(Msg.getMsg(Env.getCtx(), "Credits"));
  118. tab.setParent(tabs);
  119. tabPanel = createCredit();
  120. tabPanel.setParent(tabPanels);
  121. //Info
  122. tab = new Tab();
  123. tab.setLabel(Msg.getMsg(Env.getCtx(), "Info"));
  124. tab.setParent(tabs);
  125. tabPanel = createInfo();
  126. tabPanel.setParent(tabPanels);
  127. //Trace
  128. tab = new Tab();
  129. tab.setLabel("Errors");
  130. tabLog = tab;
  131. tab.setParent(tabs);
  132. tabPanel = createTrace();
  133. tabPanel.setParent(tabPanels);
  134. Hbox hbox = new Hbox();
  135. hbox.setParent(layout);
  136. hbox.setPack("end");
  137. hbox.setWidth("100%");
  138. Button btnOk = new Button();
  139. btnOk.setImage("/images/Ok24.png");
  140. btnOk.addEventListener(Events.ON_CLICK, this);
  141. btnOk.setParent(hbox);
  142. this.setBorder("normal");
  143. this.setWidth("500px");
  144. this.setHeight("450px");
  145. doResize(500, 450);
  146. }
  147. private Tabpanel createTrace() {
  148. Tabpanel tabPanel = new Tabpanel();
  149. Vbox vbox = new Vbox();
  150. vbox.setParent(tabPanel);
  151. vbox.setWidth("100%");
  152. vbox.setHeight("100%");
  153. Hbox hbox = new Hbox();
  154. bErrorsOnly = new Checkbox();
  155. bErrorsOnly.setLabel(Msg.getMsg(Env.getCtx(), "ErrorsOnly"));
  156. //default only show error
  157. bErrorsOnly.setChecked(true);
  158. bErrorsOnly.addEventListener(Events.ON_CHECK, this);
  159. hbox.appendChild(bErrorsOnly);
  160. hbox.appendChild(new Space());
  161. btnDownload = new Button(Msg.getMsg(Env.getCtx(), "SaveFile"));
  162. btnDownload .setTooltiptext("Download session log");
  163. btnDownload.addEventListener(Events.ON_CLICK, this);
  164. hbox.appendChild(btnDownload);
  165. hbox.appendChild(new Space());
  166. btnErrorEmail = new Button(Msg.getMsg(Env.getCtx(), "SendEMail"));
  167. btnErrorEmail.setTooltiptext("Email session log");
  168. btnErrorEmail.addEventListener(Events.ON_CLICK, this);
  169. hbox.appendChild(btnErrorEmail);
  170. hbox.appendChild(new Space());
  171. btnViewLog = new Button(Util.cleanAmp(Msg.getMsg(Env.getCtx(), "View")));
  172. btnViewLog.setTooltiptext("View session log");
  173. btnViewLog.addEventListener(Events.ON_CLICK, this);
  174. hbox.appendChild(btnViewLog);
  175. vbox.appendChild(hbox);
  176. hbox = new Hbox();
  177. hbox.setAlign("center");
  178. hbox.setPack("start");
  179. Label levelLabel = new Label("Trace Level:");
  180. levelLabel.setHeight("100%");
  181. hbox.appendChild(levelLabel);
  182. levelListBox = ListboxFactory.newDropdownListbox();
  183. levelListBox.addEventListener(Events.ON_SELECT, this);
  184. hbox.appendChild(levelListBox);
  185. for (Level level : CLogMgt.LEVELS)
  186. {
  187. levelListBox.appendItem(level.getName(), level);
  188. }
  189. Level level = CLogMgt.getLevel();
  190. for (int i = 0; i < CLogMgt.LEVELS.length; i++)
  191. {
  192. if (CLogMgt.LEVELS[i].intValue() == level.intValue())
  193. {
  194. levelListBox.setSelectedIndex(i);
  195. break;
  196. }
  197. }
  198. levelListBox.setEnabled(false);
  199. if (Env.getAD_Client_ID(Env.getCtx()) == 0)
  200. {
  201. MUser user = MUser.get(Env.getCtx());
  202. if (user.isAdministrator())
  203. {
  204. levelListBox.setEnabled(true);
  205. levelListBox.setTooltiptext("Set trace level. Warning: this will effect all session not just the current session");
  206. levelLabel.setTooltiptext("Set trace level. Warning: this will effect all session not just the current session");
  207. btnAdempiereLog = new Button("Adempiere Log");
  208. btnAdempiereLog.setTooltiptext("Download adempiere log file from server");
  209. btnAdempiereLog.addEventListener(Events.ON_CLICK, this);
  210. btnServerLog = new Button("JBoss Log");
  211. btnServerLog.setTooltiptext("Download JBoss console log file from server");
  212. btnServerLog.addEventListener(Events.ON_CLICK, this);
  213. hbox.appendChild(new Space());
  214. hbox.appendChild(btnAdempiereLog);
  215. hbox.appendChild(new Space());
  216. hbox.appendChild(btnServerLog);
  217. }
  218. }
  219. vbox.appendChild(hbox);
  220. Vector<String> columnNames = CLogErrorBuffer.get(true).getColumnNames(Env.getCtx());
  221. logTable = new Listbox();
  222. ListHead listHead = new ListHead();
  223. listHead.setParent(logTable);
  224. listHead.setSizable(true);
  225. for (Object obj : columnNames) {
  226. ListHeader header = new ListHeader(obj.toString());
  227. header.setWidth("100px");
  228. listHead.appendChild(header);
  229. }
  230. vbox.appendChild(logTable);
  231. logTable.setWidth("480px");
  232. logTable.setHeight("300px");
  233. logTable.setVflex(false);
  234. updateLogTable();
  235. return tabPanel;
  236. }
  237. private void updateLogTable() {
  238. Vector<Vector<Object>> data = CLogErrorBuffer.get(true).getLogData(bErrorsOnly.isChecked());
  239. SimpleListModel model = new SimpleListModel(data);
  240. model.setMaxLength(new int[]{0, 0, 0, 200, 0, 200});
  241. logTable.setItemRenderer(model);
  242. logTable.setModel(model);
  243. if (bErrorsOnly.isSelected())
  244. tabLog.setLabel(Msg.getMsg(Env.getCtx(), "Errors") + " (" + data.size() + ")");
  245. else
  246. tabLog.setLabel(Msg.getMsg(Env.getCtx(), "TraceInfo") + " (" + data.size() + ")");
  247. }
  248. private Tabpanel createInfo() {
  249. Tabpanel tabPanel = new Tabpanel();
  250. Div div = new Div();
  251. div.setParent(tabPanel);
  252. div.setHeight("100%");
  253. div.setStyle("overflow: auto;");
  254. Pre pre = new Pre();
  255. pre.setParent(div);
  256. Text text = new Text(CLogMgt.getInfo(null).toString());
  257. text.setParent(pre);
  258. return tabPanel;
  259. }
  260. private Tabpanel createCredit() {
  261. Tabpanel tabPanel = new Tabpanel();
  262. Vbox vbox = new Vbox();
  263. vbox.setParent(tabPanel);
  264. vbox.setWidth("100%");
  265. Hbox hbox = new Hbox();
  266. hbox.setParent(vbox);
  267. ToolBarButton link = new ToolBarButton();
  268. link.setImage("images/Posterita.jpg");
  269. link.setParent(hbox);
  270. link.setHref("http://www.posterita.org");
  271. link.setTarget("_blank");
  272. Label label= new Label("Contributed the initial Zk Web Client code.");
  273. label.setParent(hbox);
  274. Separator separator = new Separator();
  275. separator.setParent(vbox);
  276. Div div = new Div();
  277. div.setParent(vbox);
  278. div.setWidth("100%");
  279. Label caption = new Label("Sponsors");
  280. caption.setStyle("font-weight: bold;");
  281. div.appendChild(caption);
  282. separator = new Separator();
  283. separator.setBar(true);
  284. separator.setParent(div);
  285. Vbox content = new Vbox();
  286. content.setWidth("100%");
  287. content.setParent(div);
  288. link = new ToolBarButton();
  289. link.setLabel("Sysnova");
  290. link.setHref("http://www.sysnova.com/");
  291. link.setTarget("_blank");
  292. link.setParent(content);
  293. link = new ToolBarButton();
  294. link.setLabel("Idalica");
  295. link.setHref("http://www.idalica.com/");
  296. link.setTarget("_blank");
  297. link.setParent(content);
  298. separator = new Separator();
  299. separator.setParent(vbox);
  300. div = new Div();
  301. div.setParent(vbox);
  302. div.setWidth("100%");
  303. caption = new Label("Contributors");
  304. caption.setStyle("font-weight: bold;");
  305. div.appendChild(caption);
  306. separator = new Separator();
  307. separator.setBar(true);
  308. separator.setParent(div);
  309. content = new Vbox();
  310. content.setWidth("100%");
  311. content.setParent(div);
  312. link = new ToolBarButton();
  313. link.setLabel("Ashley G Ramdass");
  314. link.setHref("http://www.adempiere.com/wiki/index.php/User:Agramdass");
  315. link.setTarget("_blank");
  316. link.setParent(content);
  317. link = new ToolBarButton();
  318. link.setLabel("Low Heng Sin");
  319. link.setHref("http://www.adempiere.com/wiki/index.php/User:Hengsin");
  320. link.setTarget("_blank");
  321. link.setParent(content);
  322. link = new ToolBarButton();
  323. link.setLabel("Carlos Ruiz");
  324. link.setHref("http://www.adempiere.com/wiki/index.php/User:CarlosRuiz");
  325. link.setTarget("_blank");
  326. link.setParent(content);
  327. link = new ToolBarButton();
  328. link.setLabel("Teo Sarca");
  329. link.setHref("http://www.adempiere.com/wiki/index.php/User:Teo_sarca");
  330. link.setTarget("_blank");
  331. link.setParent(content);
  332. link = new ToolBarButton();
  333. link.setLabel("Trifon Trifonov");
  334. link.setHref("http://www.adempiere.com/wiki/index.php/User:Trifonnt");
  335. link.setTarget("_blank");
  336. link.setParent(content);
  337. return tabPanel;
  338. }
  339. private Tabpanel createAbout() {
  340. Tabpanel tabPanel = new Tabpanel();
  341. Vbox vbox = new Vbox();
  342. vbox.setWidth("100%");
  343. vbox.setHeight("100%");
  344. vbox.setAlign("center");
  345. vbox.setPack("center");
  346. vbox.setParent(tabPanel);
  347. Image image = new Image(ThemeManager.getSmallLogo());
  348. image.setParent(vbox);
  349. Text text = new Text(Adempiere.getSubtitle());
  350. text.setParent(vbox);
  351. Separator separator = new Separator();
  352. separator.setParent(vbox);
  353. text = new Text(Adempiere.getVersion());
  354. text.setParent(vbox);
  355. separator = new Separator();
  356. separator.setParent(vbox);
  357. ToolBarButton link = new ToolBarButton();
  358. link.setLabel("Sourceforge.net Project Site");
  359. link.setHref("http://www.sourceforge.net/projects/adempiere");
  360. link.setTarget("_blank");
  361. link.setParent(vbox);
  362. separator = new Separator();
  363. separator.setParent(vbox);
  364. link = new ToolBarButton();
  365. link.setLabel("ADempiere Wiki");
  366. link.setHref("http://www.adempiere.com/wiki/index.php");
  367. link.setTarget("_blank");
  368. link.setParent(vbox);
  369. separator = new Separator();
  370. separator.setParent(vbox);
  371. link = new ToolBarButton();
  372. link.setLabel("ADempiere.org");
  373. link.setHref("http://www.adempiere.org");
  374. link.setTarget("_blank");
  375. link.setParent(vbox);
  376. separator = new Separator();
  377. separator.setParent(vbox);
  378. link = new ToolBarButton();
  379. link.setLabel("ADempiere.com");
  380. link.setHref("http://www.adempiere.com");
  381. link.setTarget("_blank");
  382. link.setParent(vbox);
  383. return tabPanel;
  384. }
  385. public void onEvent(Event event) throws Exception {
  386. if (event.getTarget() == bErrorsOnly) {
  387. this.updateLogTable();
  388. }
  389. else if (event.getTarget() == btnDownload)
  390. downloadLog();
  391. else if (event.getTarget() == btnViewLog)
  392. viewLog();
  393. else if (event.getTarget() == btnErrorEmail)
  394. cmd_errorEMail();
  395. else if (event.getTarget() == btnAdempiereLog)
  396. downloadAdempiereLogFile();
  397. else if (event.getTarget() == btnServerLog)
  398. downloadServerLogFile();
  399. else if (event.getTarget() == levelListBox)
  400. setTraceLevel();
  401. else if (event instanceof SizeEvent)
  402. doResize((SizeEvent)event);
  403. else if (event instanceof MaximizeEvent)
  404. {
  405. MaximizeEvent me = (MaximizeEvent) event;
  406. if (me.isMaximized())
  407. doResize(SessionManager.getAppDesktop().getClientInfo().desktopWidth, SessionManager.getAppDesktop().getClientInfo().desktopHeight);
  408. else
  409. {
  410. int width = parseHtmlSizeString(me.getWidth());
  411. int height = parseHtmlSizeString(me.getHeight());
  412. doResize(width, height);
  413. }
  414. }
  415. else if (Events.ON_CLICK.equals(event.getName()))
  416. this.detach();
  417. }
  418. private int parseHtmlSizeString(String sizeStr)
  419. {
  420. StringBuffer buffer = new StringBuffer();
  421. for(char ch : sizeStr.toCharArray())
  422. {
  423. if (Character.isDigit(ch))
  424. buffer.append(ch);
  425. else
  426. break;
  427. }
  428. return Integer.parseInt(buffer.toString());
  429. }
  430. private void setTraceLevel() {
  431. Listitem item = levelListBox.getSelectedItem();
  432. if (item != null && item.getValue() != null) {
  433. Level level = (Level) item.getValue();
  434. CLogMgt.setLevel(level);
  435. Ini.setProperty(Ini.P_TRACELEVEL, CLogMgt.getLevel().getName());
  436. Ini.saveProperties(false);
  437. }
  438. }
  439. private void downloadServerLogFile() {
  440. String path = Ini.getAdempiereHome() + File.separator + "jboss" + File.separator
  441. + "server" + File.separator + "adempiere" + File.separator + "log";
  442. FolderBrowser fileBrowser = new FolderBrowser(path, false);
  443. String selected = fileBrowser.getPath();
  444. if (selected != null && selected.trim().length() > 0) {
  445. File file = new File(selected);
  446. if (file.exists() && file.isFile() && file.canRead()) {
  447. try {
  448. AMedia media = new AMedia(file, "text/plain", null);
  449. Filedownload.save(media);
  450. } catch (FileNotFoundException e) {
  451. }
  452. }
  453. }
  454. }
  455. private void downloadAdempiereLogFile() {
  456. String path = Ini.getAdempiereHome() + File.separator + "log";
  457. FolderBrowser fileBrowser = new FolderBrowser(path, false);
  458. String selected = fileBrowser.getPath();
  459. if (selected != null && selected.trim().length() > 0) {
  460. File file = new File(selected);
  461. if (file.exists() && file.isFile() && file.canRead()) {
  462. try {
  463. AMedia media = new AMedia(file, "text/plain", null);
  464. Filedownload.save(media);
  465. } catch (FileNotFoundException e) {
  466. }
  467. }
  468. }
  469. }
  470. private void doResize(SizeEvent event) {
  471. int width = Integer.parseInt(event.getWidth().substring(0, event.getWidth().length() - 2));
  472. int height = Integer.parseInt(event.getHeight().substring(0, event.getHeight().length() - 2));
  473. doResize(width, height);
  474. }
  475. private void doResize(int width, int height) {
  476. tabbox.setWidth((width - 20) + "px");
  477. tabbox.setHeight((height - 70) + "px");
  478. tabPanels.setWidth((width - 20) + "px");
  479. logTable.setHeight((height - 160) + "px");
  480. logTable.setWidth((width - 30) + "px");
  481. }
  482. private void downloadLog() {
  483. String log = CLogErrorBuffer.get(true).getErrorInfo(Env.getCtx(), bErrorsOnly.isChecked());
  484. AMedia media = new AMedia("trace.log", null, "text/plain", log.getBytes());
  485. Filedownload.save(media);
  486. }
  487. private void viewLog() {
  488. String log = CLogErrorBuffer.get(true).getErrorInfo(Env.getCtx(), bErrorsOnly.isChecked());
  489. Window w = new Window();
  490. w.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED);
  491. w.setTitle("View Log");
  492. w.setBorder("normal");
  493. w.setClosable(true);
  494. w.setMaximizable(true);
  495. w.setSizable(true);
  496. w.setWidth("600px");
  497. w.setHeight("500px");
  498. Textarea textbox = new Textarea();
  499. textbox.setDynamicProperty("readonly", "true");
  500. textbox.setStyle("width:100%; height: 100%");
  501. w.appendChild(textbox);
  502. Text text = new Text(log);
  503. textbox.appendChild(text);
  504. AEnv.showCenterScreen(w);
  505. }
  506. /**
  507. * EMail Errors
  508. */
  509. private void cmd_errorEMail()
  510. {
  511. new WEMailDialog(this,
  512. "EMail Trace",
  513. MUser.get(Env.getCtx()),
  514. "", // to
  515. "Adempiere Trace Info",
  516. CLogErrorBuffer.get(true).getErrorInfo(Env.getCtx(), bErrorsOnly.isSelected()),
  517. null);
  518. } // cmd_errorEMail
  519. }