/** * */ package org.gcube.portlets.widgets.wsexplorer.client; import java.util.List; import org.gcube.portlets.widgets.wsexplorer.client.event.ClickItemEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.ClickItemEventHandler; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadFolderEventHandler; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadMySpecialFolderEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadMySpecialFolderEventHandler; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent; import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEventHandler; import org.gcube.portlets.widgets.wsexplorer.client.resources.WorkspaceExplorerResources; import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService; import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerServiceAsync; import org.gcube.portlets.widgets.wsexplorer.client.view.Breadcrumbs; import org.gcube.portlets.widgets.wsexplorer.client.view.Navigation; import org.gcube.portlets.widgets.wsexplorer.client.view.WorkspaceExplorer; import org.gcube.portlets.widgets.wsexplorer.shared.Item; import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory; import org.gcube.portlets.widgets.wsexplorer.shared.ItemType; import com.github.gwtbootstrap.client.ui.Alert; import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.dom.client.Style.VerticalAlign; import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; /** * The Class WorkspaceExplorerController. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Jun 25, 2015 */ public class WorkspaceExplorerController implements EventHandler { public final static HandlerManager eventBus = new HandlerManager(null); private WorkspaceExplorerPanel workspaceExplorerPanel; private WorkspaceExplorer wsExplorer; private Breadcrumbs breadcrumbs = new Breadcrumbs(); private Navigation navigation = new Navigation(); public static final WorkspaceExplorerServiceAsync workspaceNavigatorService = GWT.create(WorkspaceExplorerService.class); /** * Instantiates a new workspace explorer controller. */ public WorkspaceExplorerController(){ bindEvents(); wsExplorer = new WorkspaceExplorer(); workspaceExplorerPanel = new WorkspaceExplorerPanel(5, wsExplorer.getPanel(), breadcrumbs, navigation); } // public void loadRoot(){ // wsExplorer.loadRoot(); // } /** * Bind events. */ private void bindEvents() { eventBus.addHandler(LoadFolderEvent.TYPE, new LoadFolderEventHandler() { @Override public void onLoadFolder(LoadFolderEvent loadFolderEvent) { if(loadFolderEvent.getTargetItem()!=null && loadFolderEvent.getTargetItem().isFolder()){ wsExplorer.loadFolder(loadFolderEvent.getTargetItem()); loadParentBreadcrumbByItemId(loadFolderEvent.getTargetItem().getId(), true); clearMoreInfo(); } } }); eventBus.addHandler(LoadRootEvent.TYPE, new LoadRootEventHandler() { @Override public void onLoadRoot(LoadRootEvent loadRootEvent) { wsExplorer.loadRoot(); workspaceNavigatorService.getItemByCategory(ItemCategory.HOME, new AsyncCallback() { @Override public void onFailure(Throwable caught) { GWT.log(caught.getMessage()); breadcrumbs.clear(); } @Override public void onSuccess(Item result) { result.setName(WorkspaceExplorerConstants.HOME_LABEL); //FORCE SET NAME LIKE "HOME_LABEL" breadcrumbs.init(result); clearMoreInfo(); } }); } }); eventBus.addHandler(ClickItemEvent.TYPE, new ClickItemEventHandler() { @Override public void onClick(final ClickItemEvent clickItemEvent) { Item item = clickItemEvent.getItem(); if(item!=null){ updateMoreInfo(item); } } }); eventBus.addHandler(LoadMySpecialFolderEvent.TYPE, new LoadMySpecialFolderEventHandler() { @Override public void onLoadMySpecialFolder(LoadMySpecialFolderEvent loadMySpecialFolderEvent) { wsExplorer.loadMySpecialFolder(); workspaceNavigatorService.getItemByCategory(ItemCategory.VRE_FOLDER, new AsyncCallback() { @Override public void onFailure(Throwable caught) { GWT.log(caught.getMessage()); } @Override public void onSuccess(Item result) { breadcrumbs.init(result); clearMoreInfo(); } }); } }); } /** * Load parent breadcrumb by item id. * * @param itemIdentifier the item identifier * @param includeItemAsParent the include item as parent */ protected void loadParentBreadcrumbByItemId(final String itemIdentifier, boolean includeItemAsParent){ GWT.log("Reload Parent Breadcrumb: [Item id: "+itemIdentifier+"]"); workspaceNavigatorService.getBreadcrumbsByItemIdentifier(itemIdentifier, includeItemAsParent, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { GWT.log(caught.getMessage()); wsExplorer.setAlert(caught.getMessage(), AlertType.ERROR); } @Override public void onSuccess(List result) { if(result!=null){ breadcrumbs.setPath(result); clearMoreInfo(); } } }); } private void clearMoreInfo(){ workspaceExplorerPanel.getSouthPanel().clear(); } private void updateMoreInfo(Item item){ if(item!=null){ workspaceExplorerPanel.getSouthPanel().clear(); Alert alert = new Alert(); alert.addStyleName("alert-custom"); final HorizontalPanel hp = new HorizontalPanel(); Image iconInfo = WorkspaceExplorerResources.getIconInfo().createImage(); iconInfo.getElement().getStyle().setVerticalAlign(VerticalAlign.MIDDLE); hp.add(WorkspaceExplorerResources.getIconInfo().createImage()); final Label labelName = new Label("Name: "+item.getName()); double marginValue = 10.0; labelName.getElement().getStyle().setMarginLeft(marginValue, Unit.PX); labelName.getElement().getStyle().setMarginRight(marginValue, Unit.PX); final Label labelSize = new Label("Size: "); labelSize.getElement().getStyle().setMarginRight(marginValue, Unit.PX); final Label labelMime = new Label("Mime Type: "); labelMime.getElement().getStyle().setMarginRight(marginValue, Unit.PX); final Label labelACL = new Label("Rights: "); labelACL.getElement().getStyle().setMarginRight(marginValue, Unit.PX); hp.add(labelName); hp.add(labelSize); if(!item.isFolder()) hp.add(labelMime); hp.add(labelACL); workspaceNavigatorService.getReadableSizeByItemId(item.getId(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { } @Override public void onSuccess(String result) { labelSize.setText("Size: " +result); } }); if(!item.isFolder()){ workspaceNavigatorService.getMimeType(item.getId(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { } @Override public void onSuccess(String result) { if(result!=null) labelMime.setText("Mime Type: "+result); } }); } workspaceNavigatorService.getUserACLForFolderId(item.getId(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { } @Override public void onSuccess(String result) { labelACL.setText("Rights: "+result); } }); alert.add(hp); alert.setType(AlertType.DEFAULT); alert.setClose(false); workspaceExplorerPanel.getSouthPanel().add(alert); } } /** * @return the breadcrumbs */ public Breadcrumbs getBreadcrumbs() { return breadcrumbs; } /** * Gets the workspace explorer panel. * * @return the workspaceExplorerPanel */ public WorkspaceExplorerPanel getWorkspaceExplorerPanel() { return workspaceExplorerPanel; } /** * @return the wsExplorer */ public WorkspaceExplorer getWsExplorer() { return wsExplorer; } /** * @param selectableTypes */ public void setSelectableTypes(ItemType[] selectableTypes) { wsExplorer.setSelectableTypes(selectableTypes); } /** * @return the selectableTypes */ public List getSelectableTypes() { return wsExplorer.getSelectableTypes(); } /** * @return */ public List getShowableTypes() { return wsExplorer.getShowableTypes(); } /** * @param showableTypes */ public void setShowableTypes(ItemType[] showableTypes) { wsExplorer.setShowableTypes(showableTypes); } }