package org.gcube.portlets.widgets.ckancontentmoderator.client.ui; import java.util.ArrayList; 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.ui.table.ItemsTable.DISPLAY_FIELD; import org.gcube.portlets.widgets.ckancontentmoderator.shared.CatalogueDataset; import com.github.gwtbootstrap.client.ui.AlertBlock; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.CheckBox; import com.github.gwtbootstrap.client.ui.Dropdown; import com.github.gwtbootstrap.client.ui.Heading; import com.github.gwtbootstrap.client.ui.NavLink; import com.github.gwtbootstrap.client.ui.base.AlertBase; import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.github.gwtbootstrap.client.ui.event.ClosedEvent; import com.github.gwtbootstrap.client.ui.event.ClosedHandler; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.Widget; // TODO: Auto-generated Javadoc /** * The Class HomeView. * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * * Jun 22, 2021 */ public class HomeView extends Composite { private static HomeViewUiBinder uiBinder = GWT.create(HomeViewUiBinder.class); private ContentModeratorSystemBaseView cmsPanel = new ContentModeratorSystemBaseView(); private ContentModeratorPaginatedView paginatedView; @UiField HTMLPanel panelContainer; @UiField CheckBox cbSelectAll; @UiField Dropdown dropdownSetStatus; @UiField Heading pageHeader; @UiField HTMLPanel confirmPanel; private ScrollPanel confirmPanelContainer = new ScrollPanel(); private List setStatusOptions = new ArrayList(); private ItemStatus displayingItemStatus; private HandlerManager eventBus; private List selectedItems; /** * The Interface HomeViewUiBinder. * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * * Jun 22, 2021 */ interface HomeViewUiBinder extends UiBinder { } /** * Instantiates a new home view. * * @param eventBus the event bus * @param status the status * @param displayFields the display fields * @param sortByField the sort by field */ public HomeView(HandlerManager eventBus, ItemStatus status, DISPLAY_FIELD[] displayFields, DISPLAY_FIELD sortByField) { initWidget(uiBinder.createAndBindUi(this)); setDisplayingWithStatus(status); this.eventBus = eventBus; paginatedView = new ContentModeratorPaginatedView(eventBus, status, displayFields, sortByField); cmsPanel.addToCenter(paginatedView.getCellPanel()); cmsPanel.addToBottom(paginatedView.getPagerPanel()); panelContainer.add(cmsPanel.getPanel()); setVisibleUpdateStatusAction(false); fillSetStatusOptions(); bindEvents(); confirmPanel.add(confirmPanelContainer); } /** * Fill set status options. */ private void fillSetStatusOptions() { for (ItemStatus status : ItemStatus.values()) { if (!status.equals(displayingItemStatus)) { NavLink nl = new NavLink(status.getLabel()); dropdownSetStatus.add(nl); setStatusOptions.add(nl); } } } private void setDisplayingWithStatus(ItemStatus status) { this.displayingItemStatus = status; this.pageHeader.setSubtext(status.getLabel()); } /** * Bind events. */ public void bindEvents() { cbSelectAll.addValueChangeHandler(new ValueChangeHandler() { @Override public void onValueChange(ValueChangeEvent event) { GWT.log("Is checked: " + cbSelectAll.getValue()); eventBus.fireEvent(new CheckBoxSelectIemsEvent(cbSelectAll.getValue())); } }); for (final NavLink navLink : setStatusOptions) { navLink.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { selectedItems = paginatedView.getSelectItems(); int count = selectedItems.size(); String msg = "Going to update status of"; if (count > 0) { if (count == 1) { msg += " one item"; } else { msg += " " + count + " items"; } msg += " from " + displayingItemStatus.getLabel() + " to " + navLink.getText() + ". Confirm?"; }else return; showConfirm(msg); } }); } } /** * Gets the panel. * * @return the panel */ public Composite getPanel() { return this; } /** * Sets the visible update status action. * * @param bool the new visible update status action */ public void setVisibleUpdateStatusAction(boolean bool) { dropdownSetStatus.setVisible(bool); } /** * Mark items as checked. * * @param select the select * @param limitToPage the limit to page */ public void markItemsAsChecked(boolean select, boolean limitToPage) { paginatedView.selectItems(select, limitToPage); } /** * Sets the checked checkbox select all. * * @param bool the new checked checkbox select all */ public void setCheckedCheckboxSelectAll(boolean bool) { cbSelectAll.setValue(bool); } /** * Show confirm. * * @param msg the msg */ public void showConfirm(String msg) { confirmPanelContainer.clear(); final AlertBlock newAlertBlock = new AlertBlock(AlertType.DEFAULT); newAlertBlock.setAnimation(true); newAlertBlock.setClose(true); newAlertBlock.addClosedHandler(new ClosedHandler() { @Override public void onClosed(ClosedEvent event) { confirmPanelContainer.clear(); } }); Button buttActionConfirmYes = new Button(new ClickHandler() { @Override public void onClick(ClickEvent event) { confirmPanelContainer.clear(); } }); buttActionConfirmYes.getElement().getStyle().setMarginLeft(10, Unit.PX); buttActionConfirmYes.setText("YES"); newAlertBlock.add(buttActionConfirmYes); Button buttonActionConfirmNo = new Button(new ClickHandler() { @Override public void onClick(ClickEvent event) { confirmPanelContainer.clear(); } }); buttonActionConfirmNo.getElement().getStyle().setMarginLeft(10, Unit.PX); buttonActionConfirmNo.setText("NO"); newAlertBlock.add(buttonActionConfirmNo); newAlertBlock.setHTML(msg); confirmPanelContainer.add(newAlertBlock); } /** * Load form server the items with status. * * @param itemStatus the item status */ public void loadItemsWithStatus(ItemStatus itemStatus) { GWT.log("loadItemsWithStatus started"); setDisplayingWithStatus(itemStatus); setCheckedCheckboxSelectAll(false); setVisibleUpdateStatusAction(false); try { confirmPanelContainer.clear(); }catch (Exception e) { GWT.log("error: "+e.getMessage() + " cause: "+e.getCause().toString()); } paginatedView.loadItemsForStatus(itemStatus); GWT.log("loadItemsWithStatus end"); } }