* Folder browser component enhancement.
* About window enhancement for log and trace level admin.
This commit is contained in:
parent
e49ffe9190
commit
9683dc8cdc
|
@ -35,29 +35,44 @@ import org.zkoss.zkex.zul.South;
|
|||
public class FolderBrowser extends Window implements EventListener
|
||||
{
|
||||
/**
|
||||
*
|
||||
* generated serial version id
|
||||
*/
|
||||
private static final long serialVersionUID = -923063158885832812L;
|
||||
|
||||
private Textbox txtPath = new Textbox();
|
||||
private Listbox listDir = new Listbox();
|
||||
private ConfirmPanel confirmPanel = new ConfirmPanel(true);
|
||||
|
||||
private final File root = new File(Ini.getAdempiereHome());
|
||||
|
||||
private boolean showDirOnly = false;
|
||||
|
||||
private boolean browseForFolder = false;
|
||||
private String path;
|
||||
|
||||
private File root;
|
||||
|
||||
public FolderBrowser()
|
||||
{
|
||||
this(false);
|
||||
this(Ini.getAdempiereHome(), false);
|
||||
}
|
||||
|
||||
public FolderBrowser(boolean showDirOnly)
|
||||
|
||||
/**
|
||||
*
|
||||
* @param browseForFolder
|
||||
*/
|
||||
public FolderBrowser(boolean browseForFolder)
|
||||
{
|
||||
this.showDirOnly = showDirOnly;
|
||||
|
||||
setTitle(showDirOnly ? "Directory Browser" : "File Browser");
|
||||
this(Ini.getAdempiereHome(), browseForFolder);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param rootPath
|
||||
* @param browseForFolder
|
||||
*/
|
||||
public FolderBrowser(String rootPath, boolean browseForFolder)
|
||||
{
|
||||
root = new File(rootPath);
|
||||
|
||||
this.browseForFolder = browseForFolder;
|
||||
|
||||
setTitle(browseForFolder ? "Directory Browser" : "File Browser");
|
||||
setWidth("500px");
|
||||
setHeight("500px");
|
||||
setBorder("normal");
|
||||
|
@ -85,7 +100,8 @@ public class FolderBrowser extends Window implements EventListener
|
|||
getFileListing(root.getPath());
|
||||
listDir.setMultiple(false);
|
||||
listDir.addDoubleClickListener(this);
|
||||
|
||||
listDir.addActionListener(this);
|
||||
|
||||
confirmPanel.addActionListener(this);
|
||||
|
||||
AEnv.showWindow(this);
|
||||
|
@ -119,14 +135,15 @@ public class FolderBrowser extends Window implements EventListener
|
|||
listDir.appendChild(li);
|
||||
}
|
||||
}
|
||||
|
||||
if(!showDirOnly)
|
||||
|
||||
if(!browseForFolder)
|
||||
{
|
||||
for(File file: files)
|
||||
{
|
||||
if(file.isFile())
|
||||
{
|
||||
listDir.addItem(new ValueNamePair(file.getAbsolutePath(), file.getName()));
|
||||
ListItem li = new ListItem(file.getName(), file.getAbsolutePath());
|
||||
listDir.appendChild(li);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -140,8 +157,20 @@ public class FolderBrowser extends Window implements EventListener
|
|||
if(e.getName() == Events.ON_DOUBLE_CLICK && e.getTarget() instanceof ListItem)
|
||||
{
|
||||
int index = listDir.getSelectedIndex();
|
||||
ValueNamePair vnp = listDir.getItemAtIndex(index).toValueNamePair();
|
||||
getFileListing(vnp.getValue());
|
||||
if (index >= 0)
|
||||
{
|
||||
ValueNamePair vnp = listDir.getItemAtIndex(index).toValueNamePair();
|
||||
getFileListing(vnp.getValue());
|
||||
}
|
||||
}
|
||||
else if(e.getName() == Events.ON_SELECT && e.getTarget() == listDir)
|
||||
{
|
||||
int index = listDir.getSelectedIndex();
|
||||
if (index >= 0)
|
||||
{
|
||||
ValueNamePair vnp = listDir.getItemAtIndex(index).toValueNamePair();
|
||||
txtPath.setValue(vnp.getValue());
|
||||
}
|
||||
}
|
||||
if(e.getTarget() == confirmPanel.getButton(ConfirmPanel.A_OK))
|
||||
{
|
||||
|
@ -149,8 +178,8 @@ public class FolderBrowser extends Window implements EventListener
|
|||
if(path != null)
|
||||
{
|
||||
File file = new File(path);
|
||||
|
||||
if(showDirOnly)
|
||||
|
||||
if(browseForFolder)
|
||||
{
|
||||
if(!file.isDirectory() || !file.exists())
|
||||
{
|
||||
|
|
|
@ -13,14 +13,20 @@
|
|||
*****************************************************************************/
|
||||
package org.adempiere.webui.window;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.Vector;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.adempiere.webui.apps.AEnv;
|
||||
import org.adempiere.webui.component.Button;
|
||||
import org.adempiere.webui.component.Checkbox;
|
||||
import org.adempiere.webui.component.FolderBrowser;
|
||||
import org.adempiere.webui.component.Label;
|
||||
import org.adempiere.webui.component.ListHead;
|
||||
import org.adempiere.webui.component.ListHeader;
|
||||
import org.adempiere.webui.component.Listbox;
|
||||
import org.adempiere.webui.component.ListboxFactory;
|
||||
import org.adempiere.webui.component.SimpleListModel;
|
||||
import org.adempiere.webui.component.Tab;
|
||||
import org.adempiere.webui.component.Tabbox;
|
||||
|
@ -29,25 +35,32 @@ import org.adempiere.webui.component.Tabpanels;
|
|||
import org.adempiere.webui.component.Tabs;
|
||||
import org.adempiere.webui.component.ToolBarButton;
|
||||
import org.adempiere.webui.component.Window;
|
||||
import org.adempiere.webui.session.SessionManager;
|
||||
import org.adempiere.webui.theme.ThemeManager;
|
||||
import org.compiere.Adempiere;
|
||||
import org.compiere.model.MUser;
|
||||
import org.compiere.util.CLogErrorBuffer;
|
||||
import org.compiere.util.CLogMgt;
|
||||
import org.compiere.util.Env;
|
||||
import org.compiere.util.Ini;
|
||||
import org.compiere.util.Msg;
|
||||
import org.compiere.util.Util;
|
||||
import org.zkoss.util.media.AMedia;
|
||||
import org.zkoss.zhtml.Pre;
|
||||
import org.zkoss.zhtml.Text;
|
||||
import org.zkoss.zhtml.Textarea;
|
||||
import org.zkoss.zk.ui.event.Event;
|
||||
import org.zkoss.zk.ui.event.EventListener;
|
||||
import org.zkoss.zk.ui.event.Events;
|
||||
import org.zkoss.zk.ui.event.MaximizeEvent;
|
||||
import org.zkoss.zk.ui.event.SizeEvent;
|
||||
import org.zkoss.zul.Div;
|
||||
import org.zkoss.zul.Filedownload;
|
||||
import org.zkoss.zul.Hbox;
|
||||
import org.zkoss.zul.Image;
|
||||
import org.zkoss.zul.Listitem;
|
||||
import org.zkoss.zul.Separator;
|
||||
import org.zkoss.zul.Space;
|
||||
import org.zkoss.zul.Vbox;
|
||||
|
||||
/**
|
||||
|
@ -58,7 +71,7 @@ import org.zkoss.zul.Vbox;
|
|||
public class AboutWindow extends Window implements EventListener {
|
||||
|
||||
/**
|
||||
*
|
||||
* generated serial version id
|
||||
*/
|
||||
private static final long serialVersionUID = -257313771447940626L;
|
||||
private Checkbox bErrorsOnly;
|
||||
|
@ -67,6 +80,13 @@ public class AboutWindow extends Window implements EventListener {
|
|||
private Tabpanels tabPanels;
|
||||
private Button btnDownload;
|
||||
private Button btnErrorEmail;
|
||||
private Button btnViewLog;
|
||||
|
||||
private Button btnAdempiereLog;
|
||||
|
||||
private Button btnServerLog;
|
||||
|
||||
private Listbox levelListBox;
|
||||
|
||||
public AboutWindow() {
|
||||
super();
|
||||
|
@ -74,14 +94,15 @@ public class AboutWindow extends Window implements EventListener {
|
|||
}
|
||||
|
||||
private void init() {
|
||||
this.setWidth("500px");
|
||||
this.setHeight("450px");
|
||||
|
||||
this.setPosition("center");
|
||||
this.setTitle(ThemeManager.getBrowserTitle());
|
||||
this.setClosable(true);
|
||||
this.setMaximizable(true);
|
||||
this.setSizable(true);
|
||||
|
||||
this.addEventListener(Events.ON_SIZE, this);
|
||||
this.addEventListener(Events.ON_MAXIMIZE, this);
|
||||
|
||||
Vbox layout = new Vbox();
|
||||
layout.setWidth("100%");
|
||||
|
@ -136,6 +157,9 @@ public class AboutWindow extends Window implements EventListener {
|
|||
btnOk.setParent(hbox);
|
||||
|
||||
this.setBorder("normal");
|
||||
this.setWidth("500px");
|
||||
this.setHeight("450px");
|
||||
doResize(500, 450);
|
||||
}
|
||||
|
||||
private Tabpanel createTrace() {
|
||||
|
@ -152,12 +176,72 @@ public class AboutWindow extends Window implements EventListener {
|
|||
bErrorsOnly.setChecked(true);
|
||||
bErrorsOnly.addEventListener(Events.ON_CHECK, this);
|
||||
hbox.appendChild(bErrorsOnly);
|
||||
hbox.appendChild(new Space());
|
||||
btnDownload = new Button(Msg.getMsg(Env.getCtx(), "SaveFile"));
|
||||
btnDownload .setTooltiptext("Download session log");
|
||||
btnDownload.addEventListener(Events.ON_CLICK, this);
|
||||
hbox.appendChild(btnDownload);
|
||||
hbox.appendChild(new Space());
|
||||
btnErrorEmail = new Button(Msg.getMsg(Env.getCtx(), "SendEMail"));
|
||||
btnErrorEmail.setTooltiptext("Email session log");
|
||||
btnErrorEmail.addEventListener(Events.ON_CLICK, this);
|
||||
hbox.appendChild(btnErrorEmail);
|
||||
hbox.appendChild(new Space());
|
||||
btnViewLog = new Button(Util.cleanAmp(Msg.getMsg(Env.getCtx(), "View")));
|
||||
btnViewLog.setTooltiptext("View session log");
|
||||
btnViewLog.addEventListener(Events.ON_CLICK, this);
|
||||
hbox.appendChild(btnViewLog);
|
||||
vbox.appendChild(hbox);
|
||||
|
||||
hbox = new Hbox();
|
||||
hbox.setAlign("center");
|
||||
hbox.setPack("start");
|
||||
Label levelLabel = new Label("Trace Level:");
|
||||
levelLabel.setHeight("100%");
|
||||
hbox.appendChild(levelLabel);
|
||||
levelListBox = ListboxFactory.newDropdownListbox();
|
||||
levelListBox.addEventListener(Events.ON_SELECT, this);
|
||||
hbox.appendChild(levelListBox);
|
||||
for (Level level : CLogMgt.LEVELS)
|
||||
{
|
||||
levelListBox.appendItem(level.getName(), level);
|
||||
}
|
||||
|
||||
Level level = CLogMgt.getLevel();
|
||||
for (int i = 0; i < CLogMgt.LEVELS.length; i++)
|
||||
{
|
||||
if (CLogMgt.LEVELS[i].intValue() == level.intValue())
|
||||
{
|
||||
levelListBox.setSelectedIndex(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
levelListBox.setEnabled(false);
|
||||
if (Env.getAD_Client_ID(Env.getCtx()) == 0)
|
||||
{
|
||||
MUser user = MUser.get(Env.getCtx());
|
||||
if (user.isAdministrator())
|
||||
{
|
||||
levelListBox.setEnabled(true);
|
||||
levelListBox.setTooltiptext("Set trace level. Warning: this will effect all session not just the current session");
|
||||
levelLabel.setTooltiptext("Set trace level. Warning: this will effect all session not just the current session");
|
||||
btnAdempiereLog = new Button("Adempiere Log");
|
||||
btnAdempiereLog.setTooltiptext("Download adempiere log file from server");
|
||||
btnAdempiereLog.addEventListener(Events.ON_CLICK, this);
|
||||
|
||||
btnServerLog = new Button("JBoss Log");
|
||||
btnServerLog.setTooltiptext("Download JBoss console log file from server");
|
||||
btnServerLog.addEventListener(Events.ON_CLICK, this);
|
||||
|
||||
hbox.appendChild(new Space());
|
||||
hbox.appendChild(btnAdempiereLog);
|
||||
hbox.appendChild(new Space());
|
||||
hbox.appendChild(btnServerLog);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
vbox.appendChild(hbox);
|
||||
|
||||
Vector<String> columnNames = CLogErrorBuffer.get(true).getColumnNames(Env.getCtx());
|
||||
|
@ -174,7 +258,7 @@ public class AboutWindow extends Window implements EventListener {
|
|||
|
||||
vbox.appendChild(logTable);
|
||||
logTable.setWidth("480px");
|
||||
logTable.setHeight("310px");
|
||||
logTable.setHeight("300px");
|
||||
logTable.setVflex(false);
|
||||
|
||||
updateLogTable();
|
||||
|
@ -355,24 +439,104 @@ public class AboutWindow extends Window implements EventListener {
|
|||
}
|
||||
else if (event.getTarget() == btnDownload)
|
||||
downloadLog();
|
||||
else if (event.getTarget() == btnViewLog)
|
||||
viewLog();
|
||||
else if (event.getTarget() == btnErrorEmail)
|
||||
cmd_errorEMail();
|
||||
else if (event.getTarget() == btnAdempiereLog)
|
||||
downloadAdempiereLogFile();
|
||||
else if (event.getTarget() == btnServerLog)
|
||||
downloadServerLogFile();
|
||||
else if (event.getTarget() == levelListBox)
|
||||
setTraceLevel();
|
||||
else if (event instanceof SizeEvent)
|
||||
doResize((SizeEvent)event);
|
||||
else if (event instanceof MaximizeEvent)
|
||||
{
|
||||
MaximizeEvent me = (MaximizeEvent) event;
|
||||
if (me.isMaximized())
|
||||
doResize(SessionManager.getAppDesktop().getClientInfo().desktopWidth, SessionManager.getAppDesktop().getClientInfo().desktopHeight);
|
||||
else
|
||||
{
|
||||
int width = parseHtmlSizeString(me.getWidth());
|
||||
int height = parseHtmlSizeString(me.getHeight());
|
||||
doResize(width, height);
|
||||
}
|
||||
}
|
||||
else if (Events.ON_CLICK.equals(event.getName()))
|
||||
this.detach();
|
||||
}
|
||||
|
||||
private int parseHtmlSizeString(String sizeStr)
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
for(char ch : sizeStr.toCharArray())
|
||||
{
|
||||
if (Character.isDigit(ch))
|
||||
buffer.append(ch);
|
||||
else
|
||||
break;
|
||||
}
|
||||
return Integer.parseInt(buffer.toString());
|
||||
}
|
||||
|
||||
private void setTraceLevel() {
|
||||
Listitem item = levelListBox.getSelectedItem();
|
||||
if (item != null && item.getValue() != null) {
|
||||
Level level = (Level) item.getValue();
|
||||
CLogMgt.setLevel(level);
|
||||
Ini.setProperty(Ini.P_TRACELEVEL, CLogMgt.getLevel().getName());
|
||||
Ini.saveProperties(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void downloadServerLogFile() {
|
||||
String path = Ini.getAdempiereHome() + File.separator + "jboss" + File.separator
|
||||
+ "server" + File.separator + "adempiere" + File.separator + "log";
|
||||
FolderBrowser fileBrowser = new FolderBrowser(path, false);
|
||||
String selected = fileBrowser.getPath();
|
||||
if (selected != null && selected.trim().length() > 0) {
|
||||
File file = new File(selected);
|
||||
if (file.exists() && file.isFile() && file.canRead()) {
|
||||
try {
|
||||
AMedia media = new AMedia(file, "text/plain", null);
|
||||
Filedownload.save(media);
|
||||
} catch (FileNotFoundException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void downloadAdempiereLogFile() {
|
||||
String path = Ini.getAdempiereHome() + File.separator + "log";
|
||||
FolderBrowser fileBrowser = new FolderBrowser(path, false);
|
||||
String selected = fileBrowser.getPath();
|
||||
if (selected != null && selected.trim().length() > 0) {
|
||||
File file = new File(selected);
|
||||
if (file.exists() && file.isFile() && file.canRead()) {
|
||||
try {
|
||||
AMedia media = new AMedia(file, "text/plain", null);
|
||||
Filedownload.save(media);
|
||||
} catch (FileNotFoundException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void doResize(SizeEvent event) {
|
||||
int width = Integer.parseInt(event.getWidth().substring(0, event.getWidth().length() - 2));
|
||||
int height = Integer.parseInt(event.getHeight().substring(0, event.getHeight().length() - 2));
|
||||
|
||||
doResize(width, height);
|
||||
}
|
||||
|
||||
private void doResize(int width, int height) {
|
||||
tabbox.setWidth((width - 20) + "px");
|
||||
tabbox.setHeight((height - 70) + "px");
|
||||
|
||||
tabPanels.setWidth((width - 20) + "px");
|
||||
|
||||
logTable.setHeight((height - 140) + "px");
|
||||
logTable.setHeight((height - 160) + "px");
|
||||
logTable.setWidth((width - 30) + "px");
|
||||
}
|
||||
|
||||
|
@ -382,6 +546,26 @@ public class AboutWindow extends Window implements EventListener {
|
|||
Filedownload.save(media);
|
||||
}
|
||||
|
||||
private void viewLog() {
|
||||
String log = CLogErrorBuffer.get(true).getErrorInfo(Env.getCtx(), bErrorsOnly.isChecked());
|
||||
Window w = new Window();
|
||||
w.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED);
|
||||
w.setTitle("View Log");
|
||||
w.setBorder("normal");
|
||||
w.setClosable(true);
|
||||
w.setMaximizable(true);
|
||||
w.setSizable(true);
|
||||
w.setWidth("600px");
|
||||
w.setHeight("500px");
|
||||
Textarea textbox = new Textarea();
|
||||
textbox.setDynamicProperty("readonly", "true");
|
||||
textbox.setStyle("width:100%; height: 100%");
|
||||
w.appendChild(textbox);
|
||||
Text text = new Text(log);
|
||||
textbox.appendChild(text);
|
||||
AEnv.showCenterScreen(w);
|
||||
}
|
||||
|
||||
/**
|
||||
* EMail Errors
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue