package org.gcube.portlets.widgets.ckancontentmoderator.client; import java.util.List; import org.gcube.datacatalogue.utillibrary.shared.ItemStatus; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.CheckBoxSelectIemsEvent; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.CheckBoxSelectIemsEventHandler; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.ClickItemEvent; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.ClickItemEventHandler; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.CloseAllTabsEvent; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.CloseAllTabsEventHandler; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.IFrameInstanciedEvent; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.IFrameInstanciedEvent.OPERATION; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.IFrameInstanciedEventHandler; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.SelectItemsWithItemStatusEvent; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.SelectItemsWithItemStatusEventHandler; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.ShowItemEvent; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.ShowItemEventHandler; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.ShowMessageEvent; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.ShowMessageEventHandler; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.TableRangeViewChangedEvent; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.TableRangeViewChangedEventHandler; import org.gcube.portlets.widgets.ckancontentmoderator.client.ui.CkanFramePanel; import org.gcube.portlets.widgets.ckancontentmoderator.client.ui.ContentModeratorToolbar; import org.gcube.portlets.widgets.ckancontentmoderator.client.ui.HomeView; import org.gcube.portlets.widgets.ckancontentmoderator.client.ui.MainTabPanel; import org.gcube.portlets.widgets.ckancontentmoderator.client.ui.table.ItemsTable.DISPLAY_FIELD; import org.gcube.portlets.widgets.ckancontentmoderator.shared.CatalogueDataset; 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.event.shared.HandlerManager; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.ComplexPanel; import com.google.gwt.user.client.ui.FlowPanel; /** * The Class CkanContentModeratorWidgetController. * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * * Jun 29, 2021 */ public class CkanContentModeratorWidgetController { public final static CkanContentModeratorServiceAsync contentModeratorService = GWT .create(CkanContentModeratorService.class); private FlowPanel mainPanel = new FlowPanel(); private FlowPanel infoPanel = new FlowPanel(); private ContentModeratorToolbar toolbar; private MainTabPanel mainTabPanel = new MainTabPanel(); public final static HandlerManager eventBus = new HandlerManager(null); private HomeView howeView; /** * Instantiates a new ckan content moderator widget. * * @param status the status * @param displayFields the display fields * @param sortByField the sort by field */ public CkanContentModeratorWidgetController(ItemStatus status, DISPLAY_FIELD[] displayFields, DISPLAY_FIELD sortByField) { toolbar = new ContentModeratorToolbar(eventBus, status); howeView = new HomeView(eventBus, status, displayFields, sortByField); mainTabPanel.addHomeWidget(howeView.getPanel()); mainPanel.add(toolbar); mainPanel.add(infoPanel); mainPanel.add(mainTabPanel); bindEvents(); } /** * Bind events. */ private void bindEvents() { eventBus.addHandler(ClickItemEvent.TYPE, new ClickItemEventHandler() { @Override public void onClick(ClickItemEvent clickItemEvent) { if (clickItemEvent.getSelectItems() != null) { List items = clickItemEvent.getSelectItems(); // if items selected are > 0 then shows button "Update status as.." howeView.setVisibleUpdateStatusAction(items.size() > 0); } } }); eventBus.addHandler(ShowItemEvent.TYPE, new ShowItemEventHandler() { @Override public void onShowItemClicked(ShowItemEvent showItemEvent) { if (showItemEvent.getSelectItems() != null) { List items = showItemEvent.getSelectItems(); for (T t : items) { CatalogueDataset clickedDataset = (CatalogueDataset) t; CkanFramePanel cfp = new CkanFramePanel(eventBus); cfp.instanceFrame(clickedDataset.getUrl()); mainTabPanel.addTab(clickedDataset.getTitle(), cfp); } } } }); eventBus.addHandler(IFrameInstanciedEvent.TYPE, new IFrameInstanciedEventHandler() { @Override public void onIFrameAction(IFrameInstanciedEvent iFrameInstanciedEent) { OPERATION operation = iFrameInstanciedEent.getOperation(); if (operation != null) { switch (operation) { case INIT: break; case ONLOAD: break; default: break; } } } }); eventBus.addHandler(CheckBoxSelectIemsEvent.TYPE, new CheckBoxSelectIemsEventHandler() { @Override public void onValueChanged(CheckBoxSelectIemsEvent onValueChangedEvent) { howeView.markItemsAsChecked(onValueChangedEvent.isChecked(), true); } }); eventBus.addHandler(TableRangeViewChangedEvent.TYPE, new TableRangeViewChangedEventHandler() { @Override public void onRangeChanged(TableRangeViewChangedEvent tableRangeViewChangedEvent) { howeView.setVisibleUpdateStatusAction(false); howeView.setCheckedCheckboxSelectAll(false); } }); eventBus.addHandler(CloseAllTabsEvent.TYPE, new CloseAllTabsEventHandler() { @Override public void onClick(CloseAllTabsEvent closeAllTabsEvent) { mainTabPanel.closeTabs(); } }); eventBus.addHandler(SelectItemsWithItemStatusEvent.TYPE, new SelectItemsWithItemStatusEventHandler() { @Override public void onValueChanged(SelectItemsWithItemStatusEvent statusSelectedEvent) { GWT.log("On value changed: " + statusSelectedEvent.getItemStatus()); infoPanel.clear(); if (statusSelectedEvent.getItemStatus() != null) { howeView.loadItemsWithStatus(statusSelectedEvent.getItemStatus()); mainTabPanel.selectTab(0); } if (statusSelectedEvent.getDisplayMessage() != null) { showMessage(statusSelectedEvent.getDisplayMessage(), statusSelectedEvent.getAlertType()); } } }); eventBus.addHandler(ShowMessageEvent.TYPE, new ShowMessageEventHandler() { @Override public void onShowMessage(ShowMessageEvent showMessageEvent) { if (showMessageEvent.getMsg() != null) { showMessage(showMessageEvent.getMsg(), showMessageEvent.getAlerType()); } } }); } private void showMessage(String msg, AlertType alertType) { final Alert alert = new Alert(msg); alertType = alertType != null ? alertType : AlertType.INFO; alert.setType(alertType); alert.setClose(true); alert.setAnimation(true); infoPanel.add(alert); // Cleans the info panel after 12 sec. Timer t = new Timer() { @Override public void run() { infoPanel.clear(); } }; t.schedule(12000); } /** * Gets the main panel. * * @return the main panel */ public ComplexPanel getMainPanel() { return mainPanel; } }