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.ShowItemEvent; import org.gcube.portlets.widgets.ckancontentmoderator.client.events.ShowItemEventHandler; 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.google.gwt.core.client.GWT; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.ComplexPanel; import com.google.gwt.user.client.ui.FlowPanel; /** * The Class CkanContentModeratorWidget. * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * * Jun 15, 2021 */ public class CkanContentModeratorWidgetController { public final static CkanContentModeratorServiceAsync contentModeratorService = GWT .create(CkanContentModeratorService.class); private FlowPanel mainPanel = new FlowPanel(); private ContentModeratorToolbar toolbar; private MainTabPanel mainTabPanel = new MainTabPanel(); private Boolean isContentModeratorEnabled = null; 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); howeView = new HomeView(eventBus, status, displayFields, sortByField); mainTabPanel.addHomeWidget(howeView.getPanel()); mainPanel.add(toolbar); 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(), null); mainTabPanel.addTab(clickedDataset.getTitle(), cfp); } } } }); 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(); } }); } /** * Checks if is content moderator enabled. * * @return true, if is content moderator enabled * @throws Exception the exception */ public boolean isContentModeratorEnabled() throws Exception { if (isContentModeratorEnabled == null) throw new Exception("Please, first check if the content moderator is enabled in this context"); return isContentModeratorEnabled; } /** * Check content moderator configuration. * * @param whenDone the when done * @throws Exception the exception */ public void checkContentModeratorConfiguration(final Command whenDone) throws Exception { contentModeratorService.isContentModeratorEnabled(new AsyncCallback() { @Override public void onFailure(Throwable caught) { whenDone.execute(); } @Override public void onSuccess(Boolean result) { isContentModeratorEnabled = result; if (whenDone != null) whenDone.execute(); } }); } /** * Gets the main panel. * * @return the main panel */ public ComplexPanel getMainPanel() { return mainPanel; } }