data-miner-manager/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoPanel.java

184 lines
5.9 KiB
Java

package org.gcube.portlets.user.dataminermanager.client.info;
import java.util.ArrayList;
import java.util.List;
import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfo;
import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider;
import org.gcube.portlets.user.dataminermanager.client.events.ServiceInfoEvent;
import org.gcube.portlets.user.dataminermanager.client.events.ServiceInfoRequestEvent;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.widget.core.client.FramedPanel;
import com.sencha.gxt.widget.core.client.container.HtmlLayoutContainer;
import com.sencha.gxt.widget.core.client.container.MarginData;
import com.sencha.gxt.widget.core.client.container.SimpleContainer;
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.form.FieldSet;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
import com.sencha.gxt.widget.core.client.grid.ColumnModel;
import com.sencha.gxt.widget.core.client.grid.Grid;
/**
*
* @author Giancarlo Panichi
*
*
*/
public class ServiceInfoPanel extends FramedPanel {
private static final ServiceInfoDataProperties props = GWT.create(ServiceInfoDataProperties.class);
private VerticalLayoutContainer v;
private VerticalLayoutContainer environmentVBox;
public ServiceInfoPanel() {
super();
Log.debug("ServiceInfoPanel");
init();
create();
bind();
EventBusProvider.INSTANCE.fireEvent(new ServiceInfoRequestEvent());
}
private void init() {
setItemId("ServiceInfoPanel");
forceLayoutOnResize = true;
setBodyBorder(false);
setBorders(false);
setBodyStyle("backgroundColor:white;");
setHeaderVisible(false);
setResize(true);
setHeadingText("Service Info");
setBodyStyle("backgroundColor:white;");
}
private void create() {
try {
v = new VerticalLayoutContainer();
v.setScrollMode(ScrollMode.AUTO);
add(v);
createView();
forceLayout();
} catch (Throwable e) {
Log.error("Error creating ServiceInfoPanel: " + e.getLocalizedMessage(), e);
}
}
private void bind() {
EventBusProvider.INSTANCE.addHandler(ServiceInfoEvent.TYPE, new ServiceInfoEvent.ServiceInfoEventHandler() {
@Override
public void onRequest(ServiceInfoEvent event) {
Log.debug("Catch ServiceInfoEvent");
showServiceInfo(event.getServiceInfo());
}
});
}
private void createView() {
SimpleContainer sectionTitle = new SimpleContainer();
// title
HtmlLayoutContainer title = new HtmlLayoutContainer(
"<center style='font-size:16px;font-weight:bold;'>Service Info</center>");
sectionTitle.add(title, new MarginData());
sectionTitle.getElement().getStyle().setMarginRight(20, Unit.PX);
// v.add(sectionTitle, new VerticalLayoutData(1, -1, new
// Margins(0)));
v.add(sectionTitle, new VerticalLayoutData(-1, -1, new Margins(10)));
FieldSet environmentFieldSet = environmentView();
v.add(environmentFieldSet, new VerticalLayoutData(-1, -1, new Margins(10)));
}
private FieldSet environmentView() {
try {
environmentVBox = new VerticalLayoutContainer();
FieldSet configurationFieldSet = new FieldSet();
configurationFieldSet.setHeadingText("Environment");
configurationFieldSet.setCollapsible(true);
configurationFieldSet.add(environmentVBox);
configurationFieldSet.getElement().getStyle().setMarginRight(20, Unit.PX);
return configurationFieldSet;
} catch (Throwable e) {
Log.error("Error in ServiceInfoPanel in environment: " + e.getLocalizedMessage(), e);
throw e;
}
}
private void showServiceInfo(ServiceInfo serviceInfo) {
if (serviceInfo != null && serviceInfo.getServiceProperties() != null
&& !serviceInfo.getServiceProperties().isEmpty()) {
ArrayList<ServiceInfoData> serviceInfoDataList = new ArrayList<>();
for (String key : serviceInfo.getServiceProperties().keySet()) {
ServiceInfoData serviceInfoData = new ServiceInfoData(key, serviceInfo.getServiceProperties().get(key));
serviceInfoDataList.add(serviceInfoData);
}
Grid<ServiceInfoData> grid = createInfoGrid(serviceInfoDataList);
environmentVBox.add(grid, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4)));
} else {
HtmlLayoutContainer emptyInfoContainer = new HtmlLayoutContainer(
"<div class='service-property'><p>No Info Available.</p></div>");
environmentVBox.add(emptyInfoContainer, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4)));
}
forceLayout();
}
private Grid<ServiceInfoData> createInfoGrid(ArrayList<ServiceInfoData> serviceInfoDataList) {
ColumnConfig<ServiceInfoData, String> keyCol = new ColumnConfig<ServiceInfoData, String>(props.key(), 100,
"Key");
ColumnConfig<ServiceInfoData, String> valueCol = new ColumnConfig<ServiceInfoData, String>(props.value(), 100,
"Value");
List<ColumnConfig<ServiceInfoData, ?>> columns = new ArrayList<ColumnConfig<ServiceInfoData, ?>>();
columns.add(keyCol);
columns.add(valueCol);
ColumnModel<ServiceInfoData> cm = new ColumnModel<ServiceInfoData>(columns);
ListStore<ServiceInfoData> store = new ListStore<ServiceInfoData>(props.id());
store.addAll(serviceInfoDataList);
Grid<ServiceInfoData> grid = new Grid<ServiceInfoData>(store, cm);
grid.setAllowTextSelection(false);
grid.getView().setAutoFill(true);
grid.getView().setAutoExpandColumn(valueCol);
grid.getView().setEmptyText("No info retrieved");
grid.setAllowTextSelection(true);
grid.getView().setStripeRows(true);
grid.getView().setColumnLines(true);
grid.setBorders(false);
grid.setColumnReordering(false);
// Stage manager, turn on state management
grid.setStateful(true);
grid.setStateId("gridServiceInfoData");
return grid;
}
}