ref 6078:TDM - Create a new widget to support operations's invocation on DataMiner
https://support.d4science.org/issues/6078 Updated to support DataMinerManagerWidget git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/data-miner-manager-widget@144881 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
d978d83f28
commit
826cfbd75e
|
@ -28,6 +28,7 @@ import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.StartComp
|
||||||
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.StartComputationExecutionRequestEvent;
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.StartComputationExecutionRequestEvent;
|
||||||
import org.gcube.portlets.widgets.dataminermanagerwidget.client.monitor.StatusMonitor;
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.monitor.StatusMonitor;
|
||||||
import org.gcube.portlets.widgets.dataminermanagerwidget.client.rpc.DataMinerPortletServiceAsync;
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.rpc.DataMinerPortletServiceAsync;
|
||||||
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.tr.TabularResourceData;
|
||||||
import org.gcube.portlets.widgets.dataminermanagerwidget.client.type.DataMinerWorkAreaElementType;
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.type.DataMinerWorkAreaElementType;
|
||||||
import org.gcube.portlets.widgets.dataminermanagerwidget.client.type.DataMinerWorkAreaEventType;
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.type.DataMinerWorkAreaEventType;
|
||||||
import org.gcube.portlets.widgets.dataminermanagerwidget.client.type.MenuType;
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.type.MenuType;
|
||||||
|
@ -55,7 +56,8 @@ public class DataMinerManagerController {
|
||||||
private DataMinerWorkArea dataMinerWorkArea;
|
private DataMinerWorkArea dataMinerWorkArea;
|
||||||
private List<OperatorsClassification> operatorsClassifications;
|
private List<OperatorsClassification> operatorsClassifications;
|
||||||
private MenuType currentVisualization;
|
private MenuType currentVisualization;
|
||||||
private String operatorId;
|
//private String operatorId;
|
||||||
|
private TabularResourceData tabularResourceData;
|
||||||
|
|
||||||
public DataMinerManagerController() {
|
public DataMinerManagerController() {
|
||||||
init();
|
init();
|
||||||
|
@ -64,15 +66,20 @@ public class DataMinerManagerController {
|
||||||
public UserInfo getUserInfo() {
|
public UserInfo getUserInfo() {
|
||||||
return userInfo;
|
return userInfo;
|
||||||
}
|
}
|
||||||
|
//public String getOperatorId(){
|
||||||
|
// return operatorId;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
public DataMinerWorkArea getDataMinerWorkArea() {
|
public DataMinerWorkArea getDataMinerWorkArea() {
|
||||||
return dataMinerWorkArea;
|
return dataMinerWorkArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getOperatorId(){
|
public void setTabularResourceData(TabularResourceData tabularResourceData){
|
||||||
return operatorId;
|
this.tabularResourceData=tabularResourceData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
currentVisualization = MenuType.EXPERIMENT;
|
currentVisualization = MenuType.EXPERIMENT;
|
||||||
restoreUISession();
|
restoreUISession();
|
||||||
|
@ -263,8 +270,8 @@ public class DataMinerManagerController {
|
||||||
|
|
||||||
private void restoreUISession() {
|
private void restoreUISession() {
|
||||||
// checkLocale();
|
// checkLocale();
|
||||||
operatorId = com.google.gwt.user.client.Window.Location
|
//operatorId = com.google.gwt.user.client.Window.Location
|
||||||
.getParameter(Constants.DATA_MINER_OPERATOR_ID);
|
// .getParameter(Constants.DATA_MINER_OPERATOR_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -536,13 +543,14 @@ public class DataMinerManagerController {
|
||||||
}
|
}
|
||||||
|
|
||||||
OperatorsClassificationEvent ocEvent;
|
OperatorsClassificationEvent ocEvent;
|
||||||
if(event.isOperatorId()){
|
//TODO
|
||||||
ocEvent = new OperatorsClassificationEvent(
|
//if(event.isOperatorId()){
|
||||||
find, operatorId);
|
// ocEvent = new OperatorsClassificationEvent(
|
||||||
} else {
|
// find, operatorId);
|
||||||
|
//} else {
|
||||||
ocEvent = new OperatorsClassificationEvent(
|
ocEvent = new OperatorsClassificationEvent(
|
||||||
find);
|
find);
|
||||||
}
|
//}
|
||||||
EventBusProvider.INSTANCE.fireEvent(ocEvent);
|
EventBusProvider.INSTANCE.fireEvent(ocEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -566,13 +574,14 @@ public class DataMinerManagerController {
|
||||||
}
|
}
|
||||||
|
|
||||||
OperatorsClassificationEvent ocEvent;
|
OperatorsClassificationEvent ocEvent;
|
||||||
if(event.isOperatorId()){
|
//TODO
|
||||||
ocEvent = new OperatorsClassificationEvent(
|
//if(event.isOperatorId()){
|
||||||
event.getClassificationName(), find, operatorId);
|
// ocEvent = new OperatorsClassificationEvent(
|
||||||
} else {
|
// event.getClassificationName(), find, operatorId);
|
||||||
|
//} else {
|
||||||
ocEvent = new OperatorsClassificationEvent(
|
ocEvent = new OperatorsClassificationEvent(
|
||||||
event.getClassificationName(), find);
|
event.getClassificationName(), find);
|
||||||
}
|
//}
|
||||||
EventBusProvider.INSTANCE.fireEvent(ocEvent);
|
EventBusProvider.INSTANCE.fireEvent(ocEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,14 @@
|
||||||
package org.gcube.portlets.widgets.dataminermanagerwidget.client;
|
package org.gcube.portlets.widgets.dataminermanagerwidget.client;
|
||||||
|
|
||||||
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.common.EventBusProvider;
|
||||||
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ExternalExecutionEvent;
|
||||||
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ExternalExecutionEvent.ExternalExecutionEventHandler;
|
||||||
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ExternalExecutionEvent.HasExternalExecutionEventHandler;
|
||||||
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.events.ExternalExecutionRequestEvent;
|
||||||
|
import org.gcube.portlets.widgets.dataminermanagerwidget.client.tr.TabularResourceData;
|
||||||
|
|
||||||
import com.allen_sauer.gwt.log.client.Log;
|
import com.allen_sauer.gwt.log.client.Log;
|
||||||
|
import com.google.gwt.event.shared.HandlerRegistration;
|
||||||
import com.sencha.gxt.widget.core.client.Window;
|
import com.sencha.gxt.widget.core.client.Window;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -9,19 +17,22 @@ import com.sencha.gxt.widget.core.client.Window;
|
||||||
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class DataMinerManagerDialog extends Window {
|
public class DataMinerManagerDialog extends Window implements HasExternalExecutionEventHandler {
|
||||||
//private DateTimeFormat dateTimeFormat= DateTimeFormat.getFormat("yyyy/MM/dd HH:mm:ss SSS");
|
// private DateTimeFormat dateTimeFormat=
|
||||||
|
// DateTimeFormat.getFormat("yyyy/MM/dd HH:mm:ss SSS");
|
||||||
private static final String WIDTH = "1024px";
|
private static final String WIDTH = "1024px";
|
||||||
private static final String HEIGHT = "600px";
|
private static final String HEIGHT = "600px";
|
||||||
//private static final String PANELWIDTH = "620px";
|
// private static final String PANELWIDTH = "620px";
|
||||||
//private static final String PANELHEIGHT = "308px";
|
// private static final String PANELHEIGHT = "308px";
|
||||||
|
|
||||||
|
|
||||||
|
private DataMinerManagerController dataMinerManagerController;
|
||||||
|
|
||||||
|
|
||||||
public DataMinerManagerDialog() {
|
public DataMinerManagerDialog() {
|
||||||
Log.debug("DataMinerManagerDialog");
|
Log.debug("DataMinerManagerDialog");
|
||||||
initWindow();
|
initWindow();
|
||||||
create();
|
create();
|
||||||
|
bind();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initWindow() {
|
private void initWindow() {
|
||||||
|
@ -36,8 +47,35 @@ public class DataMinerManagerDialog extends Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void create() {
|
private void create() {
|
||||||
DataMinerManagerPanel dataMinerManagerPanel=new DataMinerManagerPanel();
|
dataMinerManagerController = new DataMinerManagerController();
|
||||||
|
DataMinerManagerPanel dataMinerManagerPanel = new DataMinerManagerPanel();
|
||||||
setWidget(dataMinerManagerPanel);
|
setWidget(dataMinerManagerPanel);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setTabularResourceData(TabularResourceData tabularResourceData){
|
||||||
|
dataMinerManagerController.setTabularResourceData(tabularResourceData);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bind() {
|
||||||
|
EventBusProvider.INSTANCE
|
||||||
|
.addHandler(
|
||||||
|
ExternalExecutionRequestEvent.TYPE,
|
||||||
|
new ExternalExecutionRequestEvent.ExternalExecutionRequestEventHandler() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSubmit(ExternalExecutionRequestEvent event) {
|
||||||
|
Log.debug("Catch ExternalExecutionRequestEvent: "
|
||||||
|
+ event);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerRegistration addExternalExecutionEventHandler(
|
||||||
|
ExternalExecutionEventHandler handler) {
|
||||||
|
return addHandler(handler, ExternalExecutionEvent.getType());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -30,7 +30,7 @@ import com.sencha.gxt.widget.core.client.container.SimpleContainer;
|
||||||
public class DataMinerManagerPanel extends ContentPanel {
|
public class DataMinerManagerPanel extends ContentPanel {
|
||||||
|
|
||||||
public static final Resources resources = GWT.create(Resources.class);
|
public static final Resources resources = GWT.create(Resources.class);
|
||||||
private DataMinerManagerController dataMinerManagerController;
|
|
||||||
|
|
||||||
private Header header;
|
private Header header;
|
||||||
private HomePanel homePanel;
|
private HomePanel homePanel;
|
||||||
|
@ -55,7 +55,6 @@ public class DataMinerManagerPanel extends ContentPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void create() {
|
private void create() {
|
||||||
dataMinerManagerController = new DataMinerManagerController();
|
|
||||||
homePanel = new HomePanel();
|
homePanel = new HomePanel();
|
||||||
dataSpacePanel = new DataSpacePanel();
|
dataSpacePanel = new DataSpacePanel();
|
||||||
experimentPanel = new ExperimentPanel();
|
experimentPanel = new ExperimentPanel();
|
||||||
|
@ -108,6 +107,8 @@ public class DataMinerManagerPanel extends ContentPanel {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void bind() {
|
private void bind() {
|
||||||
EventBusProvider.INSTANCE.addHandler(MenuSwitchEvent.TYPE,
|
EventBusProvider.INSTANCE.addHandler(MenuSwitchEvent.TYPE,
|
||||||
new MenuSwitchEvent.MenuSwitchEventHandler() {
|
new MenuSwitchEvent.MenuSwitchEventHandler() {
|
||||||
|
|
|
@ -26,8 +26,8 @@ public class ComputationDataEvent extends
|
||||||
void onComputationData(ComputationDataEvent event);
|
void onComputationData(ComputationDataEvent event);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface HasOutputShowResourceEventHandler extends HasHandlers {
|
public interface HasComputationDataEventHandler extends HasHandlers {
|
||||||
public HandlerRegistration addOutputShowResourceEventHandler(
|
public HandlerRegistration addComputationDataEventHandler(
|
||||||
ComputationDataEventHandler handler);
|
ComputationDataEventHandler handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
package org.gcube.portlets.widgets.dataminermanagerwidget.client.events;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.dataminermanagercl.shared.process.Operator;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.EventHandler;
|
||||||
|
import com.google.gwt.event.shared.GwtEvent;
|
||||||
|
import com.google.gwt.event.shared.HandlerRegistration;
|
||||||
|
import com.google.gwt.event.shared.HasHandlers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* External Execution Event
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi" <a
|
||||||
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ExternalExecutionEvent extends
|
||||||
|
GwtEvent<ExternalExecutionEvent.ExternalExecutionEventHandler> {
|
||||||
|
|
||||||
|
public static Type<ExternalExecutionEventHandler> TYPE = new Type<ExternalExecutionEventHandler>();
|
||||||
|
private Operator op;
|
||||||
|
|
||||||
|
public interface ExternalExecutionEventHandler extends EventHandler {
|
||||||
|
void onSubmit(ExternalExecutionEvent event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface HasExternalExecutionEventHandler extends
|
||||||
|
HasHandlers {
|
||||||
|
public HandlerRegistration addExternalExecutionEventHandler(
|
||||||
|
ExternalExecutionEventHandler handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ExternalExecutionEvent(Operator op) {
|
||||||
|
this.op = op;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dispatch(ExternalExecutionEventHandler handler) {
|
||||||
|
handler.onSubmit(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type<ExternalExecutionEventHandler> getAssociatedType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Type<ExternalExecutionEventHandler> getType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void fire(HasHandlers source,
|
||||||
|
ExternalExecutionEvent event) {
|
||||||
|
source.fireEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Operator getOp() {
|
||||||
|
return op;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ExternalExecutionEvent [op=" + op + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
package org.gcube.portlets.widgets.dataminermanagerwidget.client.events;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.dataminermanagercl.shared.process.Operator;
|
||||||
|
|
||||||
|
import com.google.gwt.event.shared.EventHandler;
|
||||||
|
import com.google.gwt.event.shared.GwtEvent;
|
||||||
|
import com.google.gwt.event.shared.HandlerRegistration;
|
||||||
|
import com.google.gwt.event.shared.HasHandlers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start Computation Execution Request Event
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author "Giancarlo Panichi" <a
|
||||||
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ExternalExecutionRequestEvent extends
|
||||||
|
GwtEvent<ExternalExecutionRequestEvent.ExternalExecutionRequestEventHandler> {
|
||||||
|
|
||||||
|
public static Type<ExternalExecutionRequestEventHandler> TYPE = new Type<ExternalExecutionRequestEventHandler>();
|
||||||
|
private Operator op;
|
||||||
|
|
||||||
|
public interface ExternalExecutionRequestEventHandler extends EventHandler {
|
||||||
|
void onSubmit(ExternalExecutionRequestEvent event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface HasExternalExecutionRequestEventHandler extends
|
||||||
|
HasHandlers {
|
||||||
|
public HandlerRegistration addExternalExecutionRequestEventHandler(
|
||||||
|
ExternalExecutionRequestEventHandler handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ExternalExecutionRequestEvent(Operator op) {
|
||||||
|
this.op = op;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dispatch(ExternalExecutionRequestEventHandler handler) {
|
||||||
|
handler.onSubmit(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type<ExternalExecutionRequestEventHandler> getAssociatedType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Type<ExternalExecutionRequestEventHandler> getType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void fire(HasHandlers source,
|
||||||
|
ExternalExecutionRequestEvent event) {
|
||||||
|
source.fireEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Operator getOp() {
|
||||||
|
return op;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ExternalExecutionRequestEvent [op=" + op + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.gcube.portlets.widgets.dataminermanagerwidget.client.tr;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.gcube.data.analysis.dataminermanagercl.shared.data.ColumnItem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Giancarlo Panichi email: <a
|
||||||
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TabularResourceData implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 3680043028889915839L;
|
||||||
|
private String tabularResourceId;
|
||||||
|
private String name;
|
||||||
|
private String description;
|
||||||
|
private String type;
|
||||||
|
private ArrayList<ColumnItem> columns;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public TabularResourceData() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public TabularResourceData(String tabularResourceId, String name,
|
||||||
|
String description, String type, ArrayList<ColumnItem> columns) {
|
||||||
|
super();
|
||||||
|
this.tabularResourceId = tabularResourceId;
|
||||||
|
this.name = name;
|
||||||
|
this.description = description;
|
||||||
|
this.type = type;
|
||||||
|
this.columns = columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTabularResourceId() {
|
||||||
|
return tabularResourceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTabularResourceId(String tabularResourceId) {
|
||||||
|
this.tabularResourceId = tabularResourceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<ColumnItem> getColumns() {
|
||||||
|
return columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColumns(ArrayList<ColumnItem> columns) {
|
||||||
|
this.columns = columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "TabularResourceData [tabularResourceId=" + tabularResourceId
|
||||||
|
+ ", name=" + name + ", description=" + description + ", type="
|
||||||
|
+ type + ", columns=" + columns + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -48,7 +48,7 @@ public class TableReader {
|
||||||
TableItemSimple tableItemSimple=new TableItemSimple(publicLink,item.getName(), item.getType().name());
|
TableItemSimple tableItemSimple=new TableItemSimple(publicLink,item.getName(), item.getType().name());
|
||||||
ArrayList<ColumnItem> columnItemList=new ArrayList<ColumnItem>();
|
ArrayList<ColumnItem> columnItemList=new ArrayList<ColumnItem>();
|
||||||
for(int i=0; i<columns.size(); i++){
|
for(int i=0; i<columns.size(); i++){
|
||||||
ColumnItem columnItem=new ColumnItem(i, columns.get(i));
|
ColumnItem columnItem=new ColumnItem(String.valueOf(i), columns.get(i));
|
||||||
columnItemList.add(columnItem);
|
columnItemList.add(columnItem);
|
||||||
}
|
}
|
||||||
tableItemSimple.setColumns(columnItemList);
|
tableItemSimple.setColumns(columnItemList);
|
||||||
|
|
Loading…
Reference in New Issue