/** * */ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GCubeCkanDataCatalog; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.resource.CkanPortletResources; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; import com.google.gwt.core.shared.GWT; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Frame; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.ScrollPanel; /** * The Class GCubeCkanDataCatalogPanel. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Jun 9, 2016 */ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{ private CkanMetadataManagementPanel managementPanel; private ScrollPanel centerScrollable = new ScrollPanel(); private CkanFramePanel ckanFramePanel = new CkanFramePanel(); private Image loading = new Image(CkanPortletResources.ICONS.loading()); private RootPanel rootPanel; private HandlerManager eventBus; /** * Instantiates a new g cube ckan data catalog panel. * * @param rootPanel the root panel * @param eventManager the event manager */ public GCubeCkanDataCatalogPanel(RootPanel rootPanel, HandlerManager eventManager){ this.rootPanel = rootPanel; this.eventBus = eventManager; managementPanel = new CkanMetadataManagementPanel(eventBus); initPanel(); GCubeCkanDataCatalog.service.getCKanConnector(new AsyncCallback() { @Override public void onSuccess(String ckanUrlConnector) { instanceCkanFrame(ckanUrlConnector); GCubeCkanDataCatalogPanel.this.rootPanel.remove(loading); updateSize(); } @Override public void onFailure(Throwable caught) { GCubeCkanDataCatalogPanel.this.rootPanel.remove(loading); Window.alert("Sorry, An error occurred during contacting Gcube Ckan Data Catalogue!"); } }); //MANAGE CKAN MANAGEMENT PANEL ACCORDING TO MY ROLE GCubeCkanDataCatalog.service.getMyRole(new AsyncCallback() { @Override public void onFailure(Throwable caught) { } @Override public void onSuccess(CkanRole result) { switch (result) { case ADMIN: setTopPanelVisible(true); break; case EDITOR: setTopPanelVisible(true); break; case MEMBER: setTopPanelVisible(false); break; case SYSADMIN: setTopPanelVisible(true); break; default: break; } } }); Window.addResizeHandler(new ResizeHandler() { @Override public void onResize(ResizeEvent event) { GWT.log("onWindowResized width: " + event.getWidth() + " height: " + event.getHeight()); updateSize(); } }); rootPanel.add(loading); rootPanel.add(this); updateSize(); } /** * Gets the top panel height. * * @return the top panel height */ public int getTopPanelHeight(){ if(managementPanel.isVisible()) return managementPanel.getCurrentHeight(); return 0; } /** * Sets the top panel visible. * * @param bool the new top panel visible */ public void setTopPanelVisible(boolean bool){ managementPanel.setVisible(bool); updateSize(); } /** * Instance ckan frame. * * @param ckanUrlConnector the ckan url connector * @return the frame */ private Frame instanceCkanFrame(String ckanUrlConnector){ return ckanFramePanel.instanceFrame(ckanUrlConnector); } /** * Inits the panel. */ private void initPanel() { setTopPanelVisible(false); addToTop(managementPanel); centerScrollable.add(ckanFramePanel); addToMiddle(centerScrollable); } /** * Update window size. */ public void updateSize(){ RootPanel workspace = rootPanel; int topBorder = workspace.getAbsoluteTop(); int leftBorder = workspace.getAbsoluteLeft(); int footer = 0; //85 footer is bottombar + sponsor int rightScrollBar = 0; int rootHeight = Window.getClientHeight() - topBorder - 5 - footer;// - ((footer == null)?0:(footer.getOffsetHeight()-15)); int rootWidth = Window.getClientWidth() - 2* leftBorder - rightScrollBar; GWT.log("New iFrame size w: "+rootWidth + " h: "+rootHeight); this.setSize(rootWidth+"px",rootHeight+"px"); int height = rootHeight - getTopPanelHeight(); if(ckanFramePanel.getFrame()!=null) ckanFramePanel.getFrame().setSize(rootWidth+"px", height+"px"); } }