ckan-metadata-publisher-widget/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/action/DeleteItemPanel.java

168 lines
5.0 KiB
Java

package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.action;
import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanPublisherServiceAsync;
import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.DatasetBean;
import org.gcube.portlets.widgets.mpformbuilder.client.ui.utils.LoaderIcon;
import com.github.gwtbootstrap.client.ui.AlertBlock;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.Icon;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.github.gwtbootstrap.client.ui.constants.IconType;
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.shared.HandlerManager;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Widget;
public class DeleteItemPanel extends Composite {
private static DeleteItemPanelUiBinder uiBinder = GWT.create(DeleteItemPanelUiBinder.class);
@UiField
Button buttonDelete;
@UiField
AlertBlock infoBlock;
@UiField
HTMLPanel deleteMessage;
@UiField
FlowPanel panelConfirm;
private FlowPanel alertPanel = new FlowPanel();
private Icon iconSpinner = new Icon(IconType.SPINNER);
private HandlerManager mainApplicationBusRef;
private final CKanPublisherServiceAsync ckanServices = CKanPublisherServiceAsync.Util.getInstance();
private String datasetIdOrName;
protected static final String MISSING_PUBLISH_RIGHTS = "It seems you are not authorized to delete this item. Either you must be the author item or Catalogue Admininistrator in the organization";
interface DeleteItemPanelUiBinder extends UiBinder<Widget, DeleteItemPanel> {
}
private DatasetBean selectedDataset;
public DeleteItemPanel(HandlerManager mainApplicationBusRef, String datasetIdOrName) {
initWidget(uiBinder.createAndBindUi(this));
this.datasetIdOrName = datasetIdOrName;
this.mainApplicationBusRef = mainApplicationBusRef;
iconSpinner.setSpin(true);
iconSpinner.getElement().getStyle().setMarginLeft(5, Unit.PX);
iconSpinner.getElement().getStyle().setProperty("animation", "spin 1s infinite linear");
alertPanel.add(iconSpinner);
infoBlock.add(alertPanel);
infoBlock.setVisible(true);
LoaderIcon loaderIcon = new LoaderIcon("Checking your permissions...");
setAlertBlock(null, loaderIcon, AlertType.INFO, true);
ckanServices.isPublisherOwnerOrAdminUser(this.datasetIdOrName, new AsyncCallback<Boolean>() {
@Override
public void onFailure(Throwable caught) {
setAlertBlock(MISSING_PUBLISH_RIGHTS + ". Error: " + caught.getMessage(), null, AlertType.ERROR, true);
}
@Override
public void onSuccess(Boolean result) {
setAlertBlock("", null, null, false);
if (result) {
LoaderIcon loaderIcon = new LoaderIcon("Loading the item....");
setAlertBlock(null, loaderIcon, AlertType.INFO, true);
ckanServices.getBasicDatasetBean(datasetIdOrName, new AsyncCallback<DatasetBean>() {
@Override
public void onFailure(Throwable caught) {
setAlertBlock(caught.getMessage(), null, AlertType.ERROR, true);
}
@Override
public void onSuccess(DatasetBean result) {
setAlertBlock("", null, null, false);
panelConfirm.setVisible(true);
selectedDataset = result;
deleteMessage.add(new HTML("<div><i>" + result.getTitle() + "</i></div>"));
}
});
} else {
setAlertBlock(MISSING_PUBLISH_RIGHTS, null, AlertType.WARNING, true);
}
}
});
}
@UiHandler("buttonDelete")
void onClick(ClickEvent e) {
LoaderIcon loaderIcon = new LoaderIcon("Deleting the item....");
setAlertBlock(null, loaderIcon, AlertType.INFO, true);
ckanServices.deleteItem(selectedDataset, new AsyncCallback<Boolean>() {
@Override
public void onFailure(Throwable caught) {
setAlertBlock("Sorry, an error occurred on deleting the item. Error: " + caught.getMessage(), null,
AlertType.ERROR, true);
}
@Override
public void onSuccess(Boolean result) {
if (result) {
setAlertBlock("Item deleted correclty", null, AlertType.INFO, true);
} else {
setAlertBlock("Sorry, I cannot delete the item. Please contact the support", null, AlertType.INFO,
true);
}
}
});
}
/**
* change alert block behavior.
*
* @param textToShow the text to show
* @param type the type
* @param visible the visible
*/
private void setAlertBlock(String textToShow, LoaderIcon loader, AlertType type, boolean visible) {
alertPanel.clear();
if (loader != null)
alertPanel.add(loader);
if (type != null)
infoBlock.setType(type);
if (textToShow != null)
alertPanel.add(new HTML(textToShow));
infoBlock.setVisible(visible);
}
}