From d68726721c376d8856a02c8e44988e5add8224a2 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Thu, 9 Jan 2020 16:00:46 +0100 Subject: [PATCH] Working on #18236 --- .../client/CkanToZendoPublisherWidget.java | 16 +- .../client/ui/authors/CreatorsFormView.ui.xml | 4 +- .../BasicInformationView.java | 180 ++++++++++++------ .../BasicInformationView.ui.xml | 8 +- .../client/view/Ckan2ZenodoViewManager.java | 37 ++-- .../client/view/FieldUtil.java | 15 ++ .../client/view/FormValidator.java | 29 +++ .../CkanToZenodoPublisherServiceImpl.java | 71 +++---- 8 files changed, 228 insertions(+), 132 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/FieldUtil.java create mode 100644 src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/FormValidator.java diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/CkanToZendoPublisherWidget.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/CkanToZendoPublisherWidget.java index 7843314..23e8b44 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/CkanToZendoPublisherWidget.java +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/CkanToZendoPublisherWidget.java @@ -1,18 +1,19 @@ package org.gcube.portlets.widgets.ckan2zenodopublisher.client; +import java.util.List; + import org.gcube.portlets.widgets.ckan2zenodopublisher.client.ui.BasicTabPanel; import org.gcube.portlets.widgets.ckan2zenodopublisher.client.view.Ckan2ZenodoViewManager; +import org.gcube.portlets.widgets.ckan2zenodopublisher.client.view.FormValidator; import org.gcube.portlets.widgets.ckan2zenodopublisher.client.view.LoaderIcon; import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.CatalogueItem; import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoItem; import com.github.gwtbootstrap.client.ui.Alert; import com.github.gwtbootstrap.client.ui.Button; -import com.github.gwtbootstrap.client.ui.Label; import com.github.gwtbootstrap.client.ui.Modal; import com.github.gwtbootstrap.client.ui.ModalFooter; import com.github.gwtbootstrap.client.ui.constants.AlertType; -import com.github.gwtbootstrap.client.ui.constants.LabelType; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Window; @@ -31,6 +32,7 @@ public class CkanToZendoPublisherWidget { .getInstance(); private Button buttonPublish = new Button("Publish on Zenodo"); + private Ckan2ZenodoViewManager manager = null; /** * Instantiates a new ckan to zendo publisher widget. */ @@ -79,7 +81,7 @@ public class CkanToZendoPublisherWidget { public void onSuccess(ZenodoItem result) { loader.setVisible(false); modal.remove(loader); - Ckan2ZenodoViewManager manager = new Ckan2ZenodoViewManager(); + manager = new Ckan2ZenodoViewManager(); BasicTabPanel basicTabPanel = manager.viewForPublishing(result); modal.add(basicTabPanel); buttonPublish.setEnabled(true); @@ -90,6 +92,14 @@ public class CkanToZendoPublisherWidget { @Override public void onClick(ClickEvent event) { + + if(manager==null) + Window.alert("Sorry, the zenodo publishing is not available at this point"); + + List forms = manager.getListForms(); + for (FormValidator formValidator : forms) { + formValidator.validateFormFields(); + } } }); diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/authors/CreatorsFormView.ui.xml b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/authors/CreatorsFormView.ui.xml index 325af0a..61255d0 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/authors/CreatorsFormView.ui.xml +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/authors/CreatorsFormView.ui.xml @@ -1,8 +1,7 @@ + xmlns:b="urn:import:com.github.gwtbootstrap.client.ui"> .noBorder { border: 0px; @@ -15,7 +14,6 @@ - diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/basicinformation/BasicInformationView.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/basicinformation/BasicInformationView.java index 7117c38..862218c 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/basicinformation/BasicInformationView.java +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/basicinformation/BasicInformationView.java @@ -4,14 +4,19 @@ import java.util.ArrayList; import java.util.List; import org.gcube.portlets.widgets.ckan2zenodopublisher.client.ui.authors.CreatorsFormView; +import org.gcube.portlets.widgets.ckan2zenodopublisher.client.view.FieldUtil; +import org.gcube.portlets.widgets.ckan2zenodopublisher.client.view.FormValidator; import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoItem; import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoMetadata; +import com.github.gwtbootstrap.client.ui.Alert; import com.github.gwtbootstrap.client.ui.ControlGroup; import com.github.gwtbootstrap.client.ui.Fieldset; +import com.github.gwtbootstrap.client.ui.Label; import com.github.gwtbootstrap.client.ui.ListBox; import com.github.gwtbootstrap.client.ui.TextArea; import com.github.gwtbootstrap.client.ui.TextBox; +import com.github.gwtbootstrap.client.ui.constants.ControlGroupType; import com.github.gwtbootstrap.datepicker.client.ui.DateBox; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; @@ -24,11 +29,11 @@ import com.google.gwt.user.client.ui.Widget; * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it May 4, 2018 */ -public abstract class BasicInformationView extends Composite { +public class BasicInformationView extends Composite implements FormValidator { /** The ui binder. */ private static BasicInformationViewUiBinder uiBinder = GWT.create(BasicInformationViewUiBinder.class); - + private CreatorsFormView creatorsView; /** @@ -44,59 +49,40 @@ public abstract class BasicInformationView extends Composite { @UiField TextBox field_doi; - + @UiField Fieldset fieldset_basic_informations; - + @UiField TextArea field_description; - + @UiField ListBox field_upload_type; - + @UiField ListBox field_access_right; - + @UiField ListBox field_license; - + @UiField ListBox field_publication_type; - + @UiField DateBox field_publication_date; + @UiField + Alert error_alert; + // @UiField // Pager pager; - //public final static HandlerManager eventBus = new HandlerManager(null); - + // public final static HandlerManager eventBus = new HandlerManager(null); private boolean isEditConfiguration; private ZenodoItem zenodoItem; - /** - * Submit handler. - */ - public abstract void submitHandler(); - - /** - * Sets the error. - * - * @param visible the visible - * @param error the error - */ - public abstract void setError(boolean visible, String error); - - /** - * Sets the confirm. - * - * @param visible the visible - * @param msg the msg - */ - public abstract void setConfirm(boolean visible, String msg); - /** * Because this class has a default constructor, it can be used as a binder * template. In other words, it can be used in other *.ui.xml files as follows: @@ -107,7 +93,8 @@ public abstract class BasicInformationView extends Composite { * HasHTML instead of HasText. * * @param zenodoItem the zenodo item - * @param isUpdate the is update + * @param isUpdate the is update + * @param tabIndex the tab index */ public BasicInformationView(final ZenodoItem zenodoItem, boolean isUpdate, final int tabIndex) { initWidget(uiBinder.createAndBindUi(this)); @@ -128,8 +115,7 @@ public abstract class BasicInformationView extends Composite { // this.isEditConfiguration = true; // this.editConfiguration = conf; - //bindEvents(); - + // bindEvents(); // if (isEditConfiguration) { // pager.getRight().setText("Update Configuration"); @@ -138,8 +124,7 @@ public abstract class BasicInformationView extends Composite { // } } - - + /** * Sets the visible fields for update. * @@ -150,10 +135,10 @@ public abstract class BasicInformationView extends Composite { List listWidgtes = new ArrayList(); listWidgtes.add(field_doi); listWidgtes.add(field_publication_date); - + for (Widget widget : listWidgtes) { - Widget parent = widget.getParent().getParent(); //It should be the 'ControlGroup' - if(parent instanceof ControlGroup) { + Widget parent = widget.getParent().getParent(); // It should be the 'ControlGroup' + if (parent instanceof ControlGroup) { parent.setVisible(isUpdate); } } @@ -167,15 +152,15 @@ public abstract class BasicInformationView extends Composite { field_title.setValue(zenodoItem.getTitle()); field_description.setValue(zenodoItem.getMetadata().getDescription()); field_doi.setValue(zenodoItem.getDoi().toString()); - + ZenodoMetadata zMeta = zenodoItem.getMetadata(); - if(zMeta!=null) { + if (zMeta != null) { addValuesToListBox(field_upload_type, zMeta.getUpload_type().getSelectableValues()); - selectValueToListBox(field_upload_type,zMeta.getUpload_type().getSelectableValues()); + selectValueToListBox(field_upload_type, zMeta.getUpload_type().getSelectableValues()); addValuesToListBox(field_publication_type, zMeta.getPublication_type().getSelectableValues()); - selectValueToListBox(field_publication_type,zMeta.getPublication_type().getSelectableValues()); - - //ADDING AUTHORS + selectValueToListBox(field_publication_type, zMeta.getPublication_type().getSelectableValues()); + + // ADDING AUTHORS creatorsView = new CreatorsFormView(zenodoItem.getMetadata().getCreators()); fieldset_basic_informations.add(creatorsView); } @@ -187,44 +172,44 @@ public abstract class BasicInformationView extends Composite { // } // } } - + /** * Adds the values to list box. * - * @param list the list + * @param list the list * @param listValues the list values */ private void addValuesToListBox(ListBox list, List listValues) { - if(listValues==null) + if (listValues == null) return; - - for (int i=0; i values) { String selectValue = null; - if(values==null || values.isEmpty()) { + if (values == null || values.isEmpty()) { selectValue = null; - }else { + } else { selectValue = values.get(0); } - + try { - if(list.getItemCount()>0) + if (list.getItemCount() > 0) list.setSelectedValue(selectValue); - }catch(Exception e) { - GWT.log("error: "+e); + } catch (Exception e) { + GWT.log("error: " + e); } } - + // private void addFileForPublishing(ZenodoFile file) { // PublishFileView pv = new PublishFileView(); // pv.getField_file_name().setValue(file.getFilename()); @@ -290,7 +275,6 @@ public abstract class BasicInformationView extends Composite { return true; } - /** * Checks if is edits the configuration. * @@ -301,4 +285,78 @@ public abstract class BasicInformationView extends Composite { return isEditConfiguration; } + /* + * (non-Javadoc) + * + * @see + * org.gcube.portlets.widgets.ckan2zenodopublisher.client.view.FormValidator# + * validateForm() + */ + @Override + public String validateFormFields() { + + error_alert.setVisible(false); + + setControlGroup(field_doi, ControlGroupType.NONE); + setControlGroup(field_title, ControlGroupType.NONE); + if (field_doi.isVisible()) { + String value = getTextValue(field_doi); + boolean isValid = FieldUtil.isValidValue(value); + if(!isValid) { + setControlGroup(field_doi, ControlGroupType.ERROR); + error_alert.setVisible(true); + error_alert.setText("This field is required"); + return "This field is required"; + } + } + + if (field_title.isVisible()) { + String value = getTextValue(field_title); + boolean isValid = FieldUtil.isValidValue(value); + if(!isValid) { + setControlGroup(field_title, ControlGroupType.ERROR); + error_alert.setVisible(true); + error_alert.setText("This field is required"); + return "This field is required"; + } + } + + return null; + } + + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.ckan2zenodopublisher.client.view.FormValidator#isValidForm() + */ + @Override + public boolean isValidForm() { + return validateFormFields()==null; + } + + + /** + * Sets the control group. + * + * @param box the box + * @param type the type + */ + private void setControlGroup(TextBox box, ControlGroupType type) { + try { + ControlGroup controlGroup = (ControlGroup) field_doi.getParent().getParent(); + controlGroup.setType(type); + + }catch (Exception e) { + // TODO: handle exception + } + } + + /** + * Gets the text value. + * + * @param box the box + * @return the text value + */ + private String getTextValue(TextBox box) { + + return box.getText(); + } } diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/basicinformation/BasicInformationView.ui.xml b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/basicinformation/BasicInformationView.ui.xml index 7fd3c0b..24910d0 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/basicinformation/BasicInformationView.ui.xml +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/basicinformation/BasicInformationView.ui.xml @@ -25,8 +25,8 @@ is required - - + Digital Object Identifier @@ -130,7 +130,7 @@ - - + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/Ckan2ZenodoViewManager.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/Ckan2ZenodoViewManager.java index f8184ab..9beb644 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/Ckan2ZenodoViewManager.java +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/Ckan2ZenodoViewManager.java @@ -1,5 +1,8 @@ package org.gcube.portlets.widgets.ckan2zenodopublisher.client.view; +import java.util.ArrayList; +import java.util.List; + import org.gcube.portlets.widgets.ckan2zenodopublisher.client.ui.BasicTabPanel; import org.gcube.portlets.widgets.ckan2zenodopublisher.client.ui.basicinformation.BasicInformationView; import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoItem; @@ -21,6 +24,8 @@ public class Ckan2ZenodoViewManager { public final static HandlerManager eventBus = new HandlerManager(null); + private List forms = new ArrayList(); + /** * Instantiates a new ckan 2 zenodo view manager. */ @@ -32,7 +37,7 @@ public class Ckan2ZenodoViewManager { * View for publishing. * * @param zenodoItem the zenodo item - * @return + * @return the basic tab panel */ public BasicTabPanel viewForPublishing(final ZenodoItem zenodoItem){ @@ -44,24 +49,9 @@ public class Ckan2ZenodoViewManager { } //Basic Information int tabIndex = 0; - BasicInformationView basicForm = new BasicInformationView(zenodoItem, isUpdate, tabIndex) { - - - @Override - public void submitHandler() { - } - - @Override - public void setError(boolean visible, String error) { - } - - @Override - public void setConfirm(boolean visible, String msg) { - } - }; - + BasicInformationView basicForm = new BasicInformationView(zenodoItem, isUpdate, tabIndex); basicTabPanel.getAcc_basic_info().add(basicForm); - basicTabPanel.getTabPanel().getSelectedTab(); + forms.add(basicForm); //Files tabIndex = 1; @@ -71,9 +61,16 @@ public class Ckan2ZenodoViewManager { return basicTabPanel; //return basePanel; - + } - + + /** + * Gets the list forms. + * + * @return the list forms + */ + public List getListForms(){ + return forms; } } diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/FieldUtil.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/FieldUtil.java new file mode 100644 index 0000000..bc72cd2 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/FieldUtil.java @@ -0,0 +1,15 @@ +package org.gcube.portlets.widgets.ckan2zenodopublisher.client.view; + +public class FieldUtil { + + /** + * Checks if is valid value. + * + * @param value the value + * @return true, if is valid value + */ + public static boolean isValidValue(String value){ + return value!=null && !value.isEmpty(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/FormValidator.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/FormValidator.java new file mode 100644 index 0000000..1bceedc --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/FormValidator.java @@ -0,0 +1,29 @@ +package org.gcube.portlets.widgets.ckan2zenodopublisher.client.view; + + +/** + * The Interface FormValidator. + * + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * Jan 9, 2020 + */ +public interface FormValidator { + + + /** + * Validate form fields. + * + * @return the error in case of field not valid. Null otherwise + */ + String validateFormFields(); + + + /** + * Checks if is valid form. + * + * @return true, if is valid form + */ + boolean isValidForm(); + +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/CkanToZenodoPublisherServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/CkanToZenodoPublisherServiceImpl.java index c3f34d8..4a7dbea 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/CkanToZenodoPublisherServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/CkanToZenodoPublisherServiceImpl.java @@ -1,18 +1,7 @@ package org.gcube.portlets.widgets.ckan2zenodopublisher.server; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - import org.gcube.data.publishing.ckan2zenodo.Ckan2Zenodo; import org.gcube.data.publishing.ckan2zenodo.model.CkanItemDescriptor; -import org.gcube.data.publishing.ckan2zenodo.model.zenodo.Creator; -import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata; -import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata.AccessRights; -import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata.UploadType; -import org.gcube.data.publishing.ckan2zenodo.model.zenodo.FileDeposition; -import org.gcube.data.publishing.ckan2zenodo.model.zenodo.RelatedIdentifier; -import org.gcube.data.publishing.ckan2zenodo.model.zenodo.RelatedIdentifier.Relation; import org.gcube.data.publishing.ckan2zenodo.model.zenodo.ZenodoDeposition; import org.gcube.portlets.widgets.ckan2zenodopublisher.client.CkanToZendoPublisherWidgetConstant; import org.gcube.portlets.widgets.ckan2zenodopublisher.client.CkanToZenodoPublisherService; @@ -61,38 +50,38 @@ public class CkanToZenodoPublisherServiceImpl extends RemoteServiceServlet imple PortalUtils.getCurrentToken(this.getThreadLocalRequest(), true); } -// Ckan2Zenodo client= Ckan2Zenodo.get(); -// -// // Get the item representation -// CkanItemDescriptor itemDescr=client.read(item.getItemName()); -// -// //Get a preview of the deposition to be published -// ZenodoDeposition zdPreview=client.translate(itemDescr); -// -// //Filter resources according to VRE policies -// //List toFilterFiles=client.filterResources(itemDescr); -// -// //zdPreview.setFiles(toFilterFiles); -// return ItemToZenodoConverter.toZenodoItem(zdPreview); + Ckan2Zenodo client= Ckan2Zenodo.get(); + + // Get the item representation + CkanItemDescriptor itemDescr=client.read(item.getItemName()); + + //Get a preview of the deposition to be published + ZenodoDeposition zdPreview=client.translate(itemDescr); + + //Filter resources according to VRE policies + //List toFilterFiles=client.filterResources(itemDescr); + + //zdPreview.setFiles(toFilterFiles); + return ItemToZenodoConverter.toZenodoItem(zdPreview); // //TO TEST - ZenodoDeposition zd = new ZenodoDeposition(); - zd.setTitle("My beautiful title"); - ArrayList files = new ArrayList(); - for (int i = 0; i < 5; i++) { - FileDeposition fd = new FileDeposition(); - int index = i+1; - fd.setFilename("My file "+index); - files.add(fd); - } - zd.setFiles(files); - DepositionMetadata metadata = new DepositionMetadata(UploadType.dataset, new Date(), "My title", new ArrayList(), "My desr", AccessRights.open); - metadata.setDescription("My beautiful description"); - List related_identifiers = new ArrayList(1); - related_identifiers.add(new RelatedIdentifier("12345", Relation.cites)); - metadata.setRelated_identifiers(related_identifiers); - zd.setMetadata(metadata); - return ItemToZenodoConverter.toZenodoItem(zd); +// ZenodoDeposition zd = new ZenodoDeposition(); +// zd.setTitle("My beautiful title"); +// ArrayList files = new ArrayList(); +// for (int i = 0; i < 5; i++) { +// FileDeposition fd = new FileDeposition(); +// int index = i+1; +// fd.setFilename("My file "+index); +// files.add(fd); +// } +// zd.setFiles(files); +// DepositionMetadata metadata = new DepositionMetadata(UploadType.dataset, new Date(), "My title", new ArrayList(), "My desr", AccessRights.open); +// metadata.setDescription("My beautiful description"); +// List related_identifiers = new ArrayList(1); +// related_identifiers.add(new RelatedIdentifier("12345", Relation.cites)); +// metadata.setRelated_identifiers(related_identifiers); +// zd.setMetadata(metadata); +// return ItemToZenodoConverter.toZenodoItem(zd); } catch (Exception e) { String error = "Error on converting the catalogue item: "+item.getItemName();