Updated Added Resources

This commit is contained in:
Francesco Mangiacrapa 2024-02-12 17:33:18 +01:00
parent 301c19d369
commit ee7ea99740
1 changed files with 46 additions and 21 deletions

View File

@ -1,6 +1,7 @@
package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.resources; package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.resources;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanMetadataPublisher; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanMetadataPublisher;
@ -9,6 +10,7 @@ import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.AddResou
import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteResourceEvent; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteResourceEvent;
import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteResourceEventHandler; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteResourceEventHandler;
import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceElementBean; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.ResourceElementBean;
import org.gcube.portlets.widgets.mpformbuilder.client.ui.utils.LoaderIcon;
import com.github.gwtbootstrap.client.ui.Accordion; import com.github.gwtbootstrap.client.ui.Accordion;
import com.github.gwtbootstrap.client.ui.AccordionGroup; import com.github.gwtbootstrap.client.ui.AccordionGroup;
@ -24,6 +26,7 @@ import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite; 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.HTML;
import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
@ -46,17 +49,22 @@ public class AddedResourcesSummary extends Composite {
// list of added resources (beans) // list of added resources (beans)
List<ResourceElementBean> addedResources; List<ResourceElementBean> addedResources;
LinkedHashMap<Integer, Accordion> mapAddedResources = new LinkedHashMap<Integer, Accordion>();
@UiField @UiField
VerticalPanel addResourcesPanel; VerticalPanel addResourcesPanel;
@UiField @UiField
Alert alertMessage; Alert alertMessage;
FlowPanel alertPanel = new FlowPanel();
public AddedResourcesSummary(HandlerManager eventBus) { public AddedResourcesSummary(HandlerManager eventBus) {
initWidget(uiBinder.createAndBindUi(this)); initWidget(uiBinder.createAndBindUi(this));
alertMessage.setType(AlertType.ERROR); alertMessage.setType(AlertType.ERROR);
alertMessage.setClose(true); alertMessage.setClose(true);
alertMessage.add(alertPanel);
// save bus // save bus
this.eventBus = eventBus; this.eventBus = eventBus;
// bind on add resource event // bind on add resource event
@ -81,21 +89,18 @@ public class AddedResourcesSummary extends Composite {
final ResourceElementBean justAddedResource = addResourceEvent.getResource(); final ResourceElementBean justAddedResource = addResourceEvent.getResource();
// Build an accordion to show resource info // Build an accordion to show resource info
Accordion accordion = new Accordion(); final Accordion accordion = new Accordion();
AccordionGroup accordionGroup = new AccordionGroup(); AccordionGroup accordionGroup = new AccordionGroup();
accordionGroup.setHeading("* " + justAddedResource.getName()); accordionGroup.setHeading("* " + justAddedResource.getName());
accordionGroup.getHeading().getElement().getStyle().setBackgroundColor("#FFEDBE"); accordionGroup.getHeading().getElement().getStyle().setBackgroundColor("#f1f3f9");
accordion.add(accordionGroup); accordion.add(accordionGroup);
// add sub-info such as url and description // add sub-info such as url and description
Paragraph pUrl = new Paragraph(); HTML htmlURL = new HTML();
if (justAddedResource.getUrl() != null) { if (justAddedResource.getUrl() != null) {
pUrl.setText("URL:"); htmlURL.setHTML(
HTML htmlLink = new HTML(); "URL: <a href=" + justAddedResource.getUrl() + ">" + justAddedResource.getUrl() + "</a>");
htmlLink.setHTML(
"<a href=" + justAddedResource.getUrl() + ">" + justAddedResource.getUrl() + "</a>");
// pUrl.add(pUrl);
pUrl.add(htmlLink);
} }
Paragraph pDescription = new Paragraph(); Paragraph pDescription = new Paragraph();
pDescription.setText("Description : " + justAddedResource.getDescription()); pDescription.setText("Description : " + justAddedResource.getDescription());
@ -114,7 +119,7 @@ public class AddedResourcesSummary extends Composite {
}); });
// fill accordion // fill accordion
accordionGroup.add(pUrl); accordionGroup.add(htmlURL);
accordionGroup.add(pDescription); accordionGroup.add(pDescription);
accordionGroup.add(deleteButton); accordionGroup.add(deleteButton);
@ -123,6 +128,8 @@ public class AddedResourcesSummary extends Composite {
// add to the panel // add to the panel
addResourcesPanel.add(accordion); addResourcesPanel.add(accordion);
mapAddedResources.put(justAddedResource.getBeanID(), accordion);
} }
}); });
@ -140,13 +147,18 @@ public class AddedResourcesSummary extends Composite {
toDeleteButton.setEnabled(false); toDeleteButton.setEnabled(false);
LoaderIcon loader = new LoaderIcon("Deleting resource, please wait...");
setAlertMessage(loader, null, AlertType.INFO, true);
// find it // find it
for (int i = 0; i < addedResources.size(); i++) { for (int i = 0; i < addedResources.size(); i++) {
if (addedResources.get(i).equals(toDelete)) { if (addedResources.get(i).equals(toDelete)) {
// get the associated widget and remove it // get the associated widget and remove it
final Widget widget = addResourcesPanel.getWidget(i); // final Widget widget = addResourcesPanel.getWidget(i);
final Accordion toDeleteAccordion = mapAddedResources.get(toDelete.getBeanID());
// remote call to remove it from the dataset // remote call to remove it from the dataset
CKanMetadataPublisher.ckanServices.deleteResourceFromDataset(toDelete, CKanMetadataPublisher.ckanServices.deleteResourceFromDataset(toDelete,
@ -154,26 +166,24 @@ public class AddedResourcesSummary extends Composite {
@Override @Override
public void onSuccess(Boolean result) { public void onSuccess(Boolean result) {
if (result) { if (result) {
setAlertMessage(null, "The resource described by " + toDelete.getName()
+ " has been deleted!", AlertType.SUCCESS, true);
// remove from the list // remove from the list
addedResources.remove(toDelete); addedResources.remove(toDelete);
alertMessage.setType(AlertType.SUCCESS); addResourcesPanel.remove(toDeleteAccordion);
alertMessage.setHTML("The resource described by " + toDelete.getName()
+ " has been deleted!");
widget.removeFromParent();
} else { } else {
alertMessage.setVisible(true); setAlertMessage(null, "Sorry, the resource described by "
alertMessage.setHTML("Sorry, the resource described by " + toDelete.getName() + " cannot be deleted", AlertType.SUCCESS,
+ toDelete.getName() + " cannot be deleted"); true);
} }
} }
@Override @Override
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
toDeleteButton.setEnabled(false); toDeleteButton.setEnabled(false);
alertMessage.setVisible(true); setAlertMessage(null, caught.getMessage(), AlertType.ERROR, true);
alertMessage.setHTML(caught.getMessage());
} }
}); });
@ -184,6 +194,21 @@ public class AddedResourcesSummary extends Composite {
}); });
} }
private void setAlertMessage(LoaderIcon loader, String message, AlertType type, boolean visible) {
alertPanel.clear();
if (loader != null) {
alertPanel.add(loader);
}
alertMessage.setType(type);
alertMessage.setVisible(visible);
if (message != null) {
alertPanel.add(new HTML(message));
}
}
public HandlerManager getEventBus() { public HandlerManager getEventBus() {
return eventBus; return eventBus;
} }