Updated OperationMonitor
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-monitor-widget@99352 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
8a8d6145bc
commit
ceaa84ec3b
1
pom.xml
1
pom.xml
|
@ -289,5 +289,4 @@
|
|||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
<packaging>war</packaging>
|
||||
</project>
|
||||
|
|
|
@ -6,28 +6,23 @@ import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpire
|
|||
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor;
|
||||
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitorSession;
|
||||
import org.gcube.portlets.user.td.monitorwidget.client.details.MonitorDetailPanel;
|
||||
import org.gcube.portlets.user.td.monitorwidget.client.resources.ResourceBundle;
|
||||
import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent;
|
||||
import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType;
|
||||
import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId;
|
||||
|
||||
import com.allen_sauer.gwt.log.client.Log;
|
||||
import com.google.web.bindery.event.shared.EventBus;
|
||||
import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
|
||||
import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode;
|
||||
import com.sencha.gxt.core.client.util.Margins;
|
||||
import com.sencha.gxt.widget.core.client.FramedPanel;
|
||||
import com.sencha.gxt.widget.core.client.ProgressBar;
|
||||
import com.sencha.gxt.widget.core.client.Window;
|
||||
import com.sencha.gxt.widget.core.client.button.TextButton;
|
||||
import com.sencha.gxt.widget.core.client.button.ToolButton;
|
||||
import com.sencha.gxt.widget.core.client.container.FlowLayoutContainer;
|
||||
import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer;
|
||||
import com.sencha.gxt.widget.core.client.container.MarginData;
|
||||
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
|
||||
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData;
|
||||
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack;
|
||||
import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer;
|
||||
import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign;
|
||||
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
|
||||
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
|
||||
import com.sencha.gxt.widget.core.client.event.SelectEvent;
|
||||
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
|
||||
|
@ -42,10 +37,12 @@ import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
|
|||
public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
||||
|
||||
public static final int STATUS_POLLING_DELAY = 1000;
|
||||
private static final String WIDTH = "520px";
|
||||
private static final String WIDTH = "640px";
|
||||
private static final String HEIGHT = "378px";
|
||||
private static final String PANELWIDTH = "500px";
|
||||
private static final String PANELWIDTH = "620px";
|
||||
private static final String PANELHEIGHT = "308px";
|
||||
private static final String PROGRESSWIDTH = "618px";
|
||||
|
||||
private EventBus eventBus;
|
||||
private String taskId;
|
||||
private MonitorUpdater progressUpdater;
|
||||
|
@ -81,7 +78,7 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
|||
setBodyBorder(false);
|
||||
setResizable(true);
|
||||
setModal(true);
|
||||
setClosable(false);
|
||||
setClosable(true);
|
||||
setHeadingText("Progress");
|
||||
}
|
||||
|
||||
|
@ -99,7 +96,7 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
|||
|
||||
|
||||
ProgressBar progressBar = new ProgressBar();
|
||||
progressBar.setWidth("498px");
|
||||
progressBar.setWidth(PROGRESSWIDTH);
|
||||
|
||||
/*FieldSet detailsSet = new FieldSet();
|
||||
detailsSet.setHeadingText("Details");
|
||||
|
@ -138,8 +135,8 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
|||
|
||||
btnBackground = new TextButton("Background");
|
||||
btnBackground.setWidth("70px");
|
||||
//btnOk.setIcon(ResourceBundle.INSTANCE.ok());
|
||||
//btnOk.setIconAlign(IconAlign.RIGHT);
|
||||
//btnBackground.setIcon(ResourceBundle.INSTANCE.background());
|
||||
//btnBackground.setIconAlign(IconAlign.RIGHT);
|
||||
btnBackground.setTitle("Background");
|
||||
|
||||
|
||||
|
@ -156,8 +153,8 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
|||
|
||||
btnAbort = new TextButton("Abort");
|
||||
btnAbort.setWidth("70px");
|
||||
//btnOk.setIcon(ResourceBundle.INSTANCE.ok());
|
||||
//btnOk.setIconAlign(IconAlign.RIGHT);
|
||||
//btnAbort.setIcon(ResourceBundle.INSTANCE.abort());
|
||||
//btnAbort.setIconAlign(IconAlign.RIGHT);
|
||||
btnAbort.setTitle("Abort");
|
||||
|
||||
|
||||
|
@ -194,34 +191,34 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
|||
add(panel);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//panel.addButton(btnOk);
|
||||
|
||||
|
||||
/*
|
||||
|
||||
OperationMonitorSession operationMonitorSession = new OperationMonitorSession(
|
||||
taskId);
|
||||
progressUpdater = new MonitorUpdater(operationMonitorSession);
|
||||
progressUpdater.addListener(new MonitorBarUpdater(progressBar));
|
||||
|
||||
progressUpdater.addListener(this);
|
||||
progressUpdater.scheduleRepeating(STATUS_POLLING_DELAY);*/
|
||||
progressUpdater.scheduleRepeating(STATUS_POLLING_DELAY);
|
||||
show();
|
||||
//ok.setVisible(false);
|
||||
btnOk.setVisible(false);
|
||||
|
||||
}
|
||||
|
||||
protected void startAbort() {
|
||||
// TODO Auto-generated method stub
|
||||
btnOk.setEnabled(false);
|
||||
btnBackground.setEnabled(false);
|
||||
btnAbort.setEnabled(false);
|
||||
close();
|
||||
|
||||
}
|
||||
|
||||
protected void startBackground() {
|
||||
// TODO Auto-generated method stub
|
||||
btnOk.setEnabled(false);
|
||||
btnBackground.setEnabled(false);
|
||||
btnAbort.setEnabled(false);
|
||||
close();
|
||||
|
||||
}
|
||||
|
||||
public void addProgressDialogListener(MonitorDialogListener listener) {
|
||||
|
@ -256,8 +253,11 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
|||
}
|
||||
Log.debug("Operation Complete return: " + trId.toString());
|
||||
this.trId = trId;
|
||||
btnBackground.setVisible(false);
|
||||
btnAbort.setVisible(false);
|
||||
forceLayout();
|
||||
fireOperationComplete(trId);
|
||||
hide();
|
||||
close();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -272,7 +272,7 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
|||
SessionExpiredType.EXPIREDONSERVER));
|
||||
} else {
|
||||
fireOperationFailed(caught,reason,details);
|
||||
hide();
|
||||
close();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -281,7 +281,7 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
|||
if (trId != null) {
|
||||
fireOperationStopped(trId, reason, details);
|
||||
}
|
||||
hide();
|
||||
close();
|
||||
|
||||
}
|
||||
|
||||
|
@ -296,6 +296,8 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
|||
this.reason = reason;
|
||||
this.details = details;
|
||||
btnOk.setVisible(true);
|
||||
btnBackground.setVisible(false);
|
||||
btnAbort.setVisible(false);
|
||||
forceLayout();
|
||||
}
|
||||
|
||||
|
@ -321,12 +323,13 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
|||
@Override
|
||||
public void monitorAborted() {
|
||||
fireOperationAborted();
|
||||
|
||||
close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void monitorPutInBackground() {
|
||||
fireOperationPutInBackground();
|
||||
close();
|
||||
|
||||
}
|
||||
|
||||
|
@ -376,7 +379,8 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener {
|
|||
}*/
|
||||
|
||||
super.initTools();
|
||||
|
||||
|
||||
closeBtn.setVisible(false);
|
||||
/*
|
||||
closeBtn.addSelectHandler(new SelectHandler() {
|
||||
|
||||
|
|
|
@ -47,10 +47,17 @@ import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
|
|||
import com.sencha.gxt.widget.core.client.treegrid.TreeGrid;
|
||||
|
||||
public class MonitorDetailPanel extends FramedPanel {
|
||||
protected static final String WIDTH = "498px";
|
||||
protected static final String WIDTH = "618px";
|
||||
protected static final String HEIGHT = "256px";
|
||||
protected static final String GRIDHEIGHT = "212px";
|
||||
protected static final String GRIDHEIGHT = "332px";
|
||||
|
||||
protected static final int CC1WIDTH = 168;
|
||||
protected static final int CC2WIDTH = 100;
|
||||
protected static final int CC3WIDTH = 140;
|
||||
protected static final int CC4WIDTH = 100;
|
||||
|
||||
|
||||
|
||||
protected MonitorDetailPanel thisPanel;
|
||||
|
||||
protected Menu contextMenu;
|
||||
|
@ -90,8 +97,6 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected void init() {
|
||||
setWidth(WIDTH);
|
||||
setHeight(HEIGHT);
|
||||
|
@ -100,18 +105,16 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
forceLayoutOnResize = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected void create() {
|
||||
con = new VerticalLayoutContainer();
|
||||
//con.setScrollMode(ScrollMode.AUTO);
|
||||
// con.setScrollMode(ScrollMode.AUTO);
|
||||
|
||||
store = new TreeStore<MonitorBaseDto>(new KeyProvider());
|
||||
|
||||
|
||||
addChildrensToStore();
|
||||
|
||||
|
||||
ColumnConfig<MonitorBaseDto, String> cc1 = new ColumnConfig<MonitorBaseDto, String>(
|
||||
new ToStringValueProvider<MonitorBaseDto>("task"), 168, "Task");
|
||||
new ToStringValueProvider<MonitorBaseDto>("task"), CC1WIDTH, "Task");
|
||||
cc1.setHeader("Task");
|
||||
cc1.setCell(new AbstractCell<String>() {
|
||||
|
||||
|
@ -131,25 +134,26 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
public String getValue(MonitorBaseDto object) {
|
||||
String state = null;
|
||||
if (object instanceof MonitorValidationJobSDto) {
|
||||
state = ((MonitorValidationJobSDto) object).getWorkerState().toString();
|
||||
state = ((MonitorValidationJobSDto) object)
|
||||
.getWorkerState().toString();
|
||||
|
||||
}
|
||||
if (object instanceof MonitorFolderDto) {
|
||||
state = ((MonitorFolderDto) object).getState();
|
||||
}
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(MonitorBaseDto object, String value) {
|
||||
if (object instanceof MonitorValidationJobSDto) {
|
||||
WorkerState workerState=WorkerStateParser.parse(value);
|
||||
WorkerState workerState = WorkerStateParser.parse(value);
|
||||
((MonitorValidationJobSDto) object)
|
||||
.setWorkerState(workerState);
|
||||
|
||||
|
||||
}
|
||||
if (object instanceof MonitorFolderDto) {
|
||||
((MonitorFolderDto) object)
|
||||
.setState(value);
|
||||
((MonitorFolderDto) object).setState(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -157,10 +161,44 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
public String getPath() {
|
||||
return "status";
|
||||
}
|
||||
}, 100, "Status");
|
||||
}, CC2WIDTH, "Status");
|
||||
cc2.setHeader("Status");
|
||||
|
||||
ColumnConfig<MonitorBaseDto, Double> cc3 = new ColumnConfig<MonitorBaseDto, Double>(
|
||||
|
||||
ColumnConfig<MonitorBaseDto, String> cc3 = new ColumnConfig<MonitorBaseDto, String>(
|
||||
new ValueProvider<MonitorBaseDto, String>() {
|
||||
|
||||
@Override
|
||||
public String getValue(MonitorBaseDto object) {
|
||||
String state = null;
|
||||
if (object instanceof MonitorValidationJobSDto) {
|
||||
state = ((MonitorValidationJobSDto) object).getHumanReadableStatus();
|
||||
}
|
||||
if (object instanceof MonitorFolderDto) {
|
||||
state = ((MonitorFolderDto) object).getHumanReadableStatus();
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(MonitorBaseDto object, String value) {
|
||||
if (object instanceof MonitorValidationJobSDto) {
|
||||
((MonitorValidationJobSDto) object)
|
||||
.setHumanReadableStatus(value);
|
||||
|
||||
}
|
||||
if (object instanceof MonitorFolderDto) {
|
||||
((MonitorFolderDto) object).setHumanReadableStatus(value);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPath() {
|
||||
return "humanreadablestatus";
|
||||
}
|
||||
}, CC3WIDTH, "Human Readble");
|
||||
cc3.setHeader("Human Readble");
|
||||
|
||||
ColumnConfig<MonitorBaseDto, Double> cc4 = new ColumnConfig<MonitorBaseDto, Double>(
|
||||
new ValueProvider<MonitorBaseDto, Double>() {
|
||||
|
||||
@Override
|
||||
|
@ -174,7 +212,7 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
Float f = ((MonitorFolderDto) object).getProgress();
|
||||
d = new Double(f);
|
||||
}
|
||||
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
|
@ -185,8 +223,8 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
.setProgress(value.floatValue());
|
||||
}
|
||||
if (object instanceof MonitorFolderDto) {
|
||||
((MonitorFolderDto) object)
|
||||
.setProgress(value.floatValue());
|
||||
((MonitorFolderDto) object).setProgress(value
|
||||
.floatValue());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -194,8 +232,8 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
public String getPath() {
|
||||
return "progress";
|
||||
}
|
||||
}, 100, "Progress");
|
||||
cc3.setHeader("Progress");
|
||||
}, CC4WIDTH, "Progress");
|
||||
cc4.setHeader("Progress");
|
||||
|
||||
ProgressBarCell progress = new ProgressBarCell() {
|
||||
@Override
|
||||
|
@ -205,15 +243,14 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
};
|
||||
progress.setProgressText("{0}% Complete");
|
||||
progress.setWidth(110);
|
||||
|
||||
cc3.setCell(progress);
|
||||
|
||||
|
||||
|
||||
cc4.setCell(progress);
|
||||
|
||||
List<ColumnConfig<MonitorBaseDto, ?>> l = new ArrayList<ColumnConfig<MonitorBaseDto, ?>>();
|
||||
l.add(cc1);
|
||||
l.add(cc2);
|
||||
l.add(cc3);
|
||||
l.add(cc4);
|
||||
ColumnModel<MonitorBaseDto> cm = new ColumnModel<MonitorBaseDto>(l);
|
||||
|
||||
tree = new TreeGrid<MonitorBaseDto>(store, cm, cc1);
|
||||
|
@ -223,7 +260,6 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
tree.setColumnResize(true);
|
||||
tree.getView().setAutoExpandColumn(cc1);
|
||||
tree.setHeight(GRIDHEIGHT);
|
||||
|
||||
|
||||
IconProvider<MonitorBaseDto> iconProvider = new IconProvider<MonitorBaseDto>() {
|
||||
|
||||
|
@ -267,7 +303,7 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
}
|
||||
});
|
||||
|
||||
//createContextMenu();
|
||||
// createContextMenu();
|
||||
|
||||
ToolBar toolBar = new ToolBar();
|
||||
|
||||
|
@ -297,11 +333,11 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
});
|
||||
toolBar.add(btnCollapseAll);
|
||||
|
||||
con.add(toolBar, new VerticalLayoutData(1, -1,new Margins(0)));
|
||||
con.add(toolBar, new VerticalLayoutData(1, -1, new Margins(0)));
|
||||
con.add(tree, new VerticalLayoutData(1, -1, new Margins(0)));
|
||||
|
||||
add(con, new MarginData(0));
|
||||
|
||||
|
||||
tree.expandAll();
|
||||
forceLayout();
|
||||
|
||||
|
@ -317,17 +353,17 @@ public class MonitorDetailPanel extends FramedPanel {
|
|||
public void update(OperationMonitor operationMonitor) {
|
||||
this.operationMonitor = operationMonitor;
|
||||
store.clear();
|
||||
store.commitChanges();
|
||||
addChildrensToStore();
|
||||
store.commitChanges();
|
||||
tree.expandAll();
|
||||
forceLayout();
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void addChildrensToStore() {
|
||||
gen = new MonitorTreeDataGenerator(operationMonitor);
|
||||
|
||||
|
||||
MonitorFolderDto root = gen.getRoot();
|
||||
for (MonitorBaseDto base : root.getChildrens()) {
|
||||
store.add(base);
|
||||
|
|
|
@ -15,17 +15,20 @@ public class MonitorFolderDto extends MonitorBaseDto {
|
|||
protected ArrayList<MonitorBaseDto> childrens;
|
||||
protected String type;
|
||||
protected String state;
|
||||
protected String humanReadableStatus;
|
||||
protected float progress;
|
||||
|
||||
public MonitorFolderDto(){
|
||||
|
||||
}
|
||||
|
||||
public MonitorFolderDto(String type,String id,String description, String state, float progress, ArrayList<MonitorBaseDto> childrens){
|
||||
public MonitorFolderDto(String type,String id,String description, String state,
|
||||
String humanReadableStatus, float progress, ArrayList<MonitorBaseDto> childrens){
|
||||
super(id);
|
||||
this.type=type;
|
||||
this.description=description;
|
||||
this.state=state;
|
||||
this.humanReadableStatus=humanReadableStatus;
|
||||
this.progress=progress;
|
||||
this.childrens=childrens;
|
||||
|
||||
|
@ -73,6 +76,16 @@ public class MonitorFolderDto extends MonitorBaseDto {
|
|||
public void setState(String state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public String getHumanReadableStatus() {
|
||||
return humanReadableStatus;
|
||||
}
|
||||
|
||||
public void setHumanReadableStatus(String humanReadableStatus) {
|
||||
this.humanReadableStatus = humanReadableStatus;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
|
|
|
@ -42,22 +42,22 @@ public class MonitorTreeDataGenerator {
|
|||
}
|
||||
MonitorFolderDto foldJob = new MonitorFolderDto("job",
|
||||
task.getId() + "-" + job.getId(), job.getDescription(),
|
||||
job.getWorkerState().toString(), job.getProgress(),
|
||||
job.getWorkerState().toString(), job.getHumaReadableStatus(),job.getProgress(),
|
||||
validations);
|
||||
jobs.add(foldJob);
|
||||
}
|
||||
MonitorFolderDto foldTask = new MonitorFolderDto("task",
|
||||
task.getId(), sdf.format(task.getStartTime()), task
|
||||
.getState().toString(), task.getProgress(), jobs);
|
||||
.getState().toString(), "",task.getProgress(), jobs);
|
||||
childrens.add(foldTask);
|
||||
|
||||
root = new MonitorFolderDto("root", "-1", "root", "root", 0,
|
||||
root = new MonitorFolderDto("root", "-1", "root", "root", "",0,
|
||||
childrens);
|
||||
Log.debug("Generated root");
|
||||
//printRecorsive(root);
|
||||
|
||||
} else {
|
||||
root = new MonitorFolderDto("root", "-1", "root", "root", 0,
|
||||
root = new MonitorFolderDto("root", "-1", "root", "root", "", 0,
|
||||
childrens);
|
||||
Log.debug("Generated root without childrens");
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ public class MonitorTreeDataGenerator {
|
|||
protected void printRecorsive(MonitorFolderDto root) {
|
||||
for (MonitorBaseDto base : root.getChildrens()) {
|
||||
Log.debug("+++");
|
||||
Log.debug("Children:" + base.toString());
|
||||
Log.debug("Children:[id=" +base.getId() +", toString="+base.toString()+"]");
|
||||
if (base instanceof MonitorFolderDto) {
|
||||
printRecorsive((MonitorFolderDto) base);
|
||||
}
|
||||
|
|
|
@ -23,15 +23,14 @@
|
|||
|
||||
|
||||
<!-- Specify the app entry point class. -->
|
||||
<entry-point
|
||||
class='org.gcube.portlets.user.td.monitorwidget.client.MonitorWidgetEntry' />
|
||||
<!-- <entry-point class='org.gcube.portlets.user.td.monitorwidget.client.MonitorWidgetEntry' /> -->
|
||||
|
||||
<!-- Logger -->
|
||||
<!-- Logger
|
||||
<set-property name="log_DivLogger" value="ENABLED" />
|
||||
<set-property name="log_ConsoleLogger" value="ENABLED" />
|
||||
<set-property name="log_FirebugLogger" value="ENABLED" />
|
||||
<set-property name="log_GWTLogger" value="ENABLED" />
|
||||
<set-property name="log_SystemLogger" value="ENABLED" />
|
||||
<set-property name="log_SystemLogger" value="ENABLED" /> -->
|
||||
<!-- <set-property name="log_DivLogger" value="DISABLED" /> <set-property
|
||||
name="log_ConsoleLogger" value="DISABLED" /> <set-property name="log_FirebugLogger"
|
||||
value="DISABLED" /> <set-property name="log_GWTLogger" value="DISABLED" />
|
||||
|
|
Loading…
Reference in New Issue