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( "
Service Info
"); 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 serviceInfoDataList = new ArrayList<>(); for (String key : serviceInfo.getServiceProperties().keySet()) { ServiceInfoData serviceInfoData = new ServiceInfoData(key, serviceInfo.getServiceProperties().get(key)); serviceInfoDataList.add(serviceInfoData); } Grid grid = createInfoGrid(serviceInfoDataList); environmentVBox.add(grid, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4))); } else { HtmlLayoutContainer emptyInfoContainer = new HtmlLayoutContainer( "

No Info Available.

"); environmentVBox.add(emptyInfoContainer, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4))); } forceLayout(); } private Grid createInfoGrid(ArrayList serviceInfoDataList) { ColumnConfig keyCol = new ColumnConfig(props.key(), 100, "Key"); ColumnConfig valueCol = new ColumnConfig(props.value(), 100, "Value"); List> columns = new ArrayList>(); columns.add(keyCol); columns.add(valueCol); ColumnModel cm = new ColumnModel(columns); ListStore store = new ListStore(props.id()); store.addAll(serviceInfoDataList); Grid grid = new Grid(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; } }