From a1800eacbb8418480f112bbadfdbd8a1c118f93e Mon Sep 17 00:00:00 2001 From: Costantino Perciante Date: Thu, 14 Jul 2016 10:14:33 +0000 Subject: [PATCH] added popup panel close event git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/widgets/ckan-metadata-publisher-widget@130349 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/events/CloseCreationFormEvent.java | 27 +++++++ .../events/CloseCreationFormEventHandler.java | 13 +++ .../client/ui/CreateDatasetForm.java | 79 +++++++++++++++---- .../client/ui/MetaDataFieldSkeleton.java | 33 +++++++- 4 files changed, 137 insertions(+), 15 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/CloseCreationFormEvent.java create mode 100644 src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/CloseCreationFormEventHandler.java diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/CloseCreationFormEvent.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/CloseCreationFormEvent.java new file mode 100644 index 0000000..20708d1 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/CloseCreationFormEvent.java @@ -0,0 +1,27 @@ +package org.gcube.portlets.widgets.ckandatapublisherwidget.client.events; + +import com.google.gwt.event.shared.GwtEvent; + +/** + * Called on close form. + * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) + */ +public class CloseCreationFormEvent extends GwtEvent{ + + public static Type TYPE = new Type(); + + public CloseCreationFormEvent() { + super(); + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + @Override + protected void dispatch(CloseCreationFormEventHandler handler) { + handler.onClose(this); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/CloseCreationFormEventHandler.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/CloseCreationFormEventHandler.java new file mode 100644 index 0000000..9e15f61 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/events/CloseCreationFormEventHandler.java @@ -0,0 +1,13 @@ +package org.gcube.portlets.widgets.ckandatapublisherwidget.client.events; + +import com.google.gwt.event.shared.EventHandler; + +/** + * Close event handler interface + * @author Costantino Perciante at ISTI-CNR + * (costantino.perciante@isti.cnr.it) + * + */ +public interface CloseCreationFormEventHandler extends EventHandler { + void onClose(CloseCreationFormEvent event); +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java index aa177c4..b3ed466 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/CreateDatasetForm.java @@ -11,6 +11,8 @@ import java.util.Map.Entry; import org.gcube.portlets.user.gcubewidgets.client.elements.Span; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanPublisherService; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.CKanPublisherServiceAsync; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.CloseCreationFormEvent; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.CloseCreationFormEventHandler; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteCustomFieldEvent; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.DeleteCustomFieldEventHandler; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.utils.GcubeDialogExtended; @@ -168,7 +170,7 @@ public class CreateDatasetForm extends Composite{ private LicensesBean licenseBean; // event bus - private final HandlerManager eventBus = new HandlerManager(null); + private final HandlerManager eventBus; // added custom field entries List customFieldEntriesList = new ArrayList(); @@ -187,15 +189,21 @@ public class CreateDatasetForm extends Composite{ // resource table private ResourcesTable resourcesTable; + + // List of opened popup'ids + List popupOpenedIds = new ArrayList(); /** * Invoked in the most general case * @param owner */ - public CreateDatasetForm(String owner) { + public CreateDatasetForm(String owner, HandlerManager eventBus) { initWidget(uiBinder.createAndBindUi(this)); this.owner = owner; + + // save event bus + this.eventBus = eventBus; // bind on events bind(); @@ -300,10 +308,13 @@ public class CreateDatasetForm extends Composite{ * @param idFolderWorkspace * @param owner */ - public CreateDatasetForm(String idFolderWorkspace, String owner) { + public CreateDatasetForm(String idFolderWorkspace, String owner, final HandlerManager eventBus) { initWidget(uiBinder.createAndBindUi(this)); this.owner = owner; + + // save event bus + this.eventBus = eventBus; // prepare info icons prepareInfoIcons(); @@ -494,7 +505,7 @@ public class CreateDatasetForm extends Composite{ listOfMetadataFields.clear(); for (MetadataFieldWrapper field : fields) { - MetaDataFieldSkeleton fieldWidget = new MetaDataFieldSkeleton(field); + MetaDataFieldSkeleton fieldWidget = new MetaDataFieldSkeleton(field, eventBus); metadataFieldsPanel.add(fieldWidget); listOfMetadataFields.add(fieldWidget); } @@ -520,6 +531,18 @@ public class CreateDatasetForm extends Composite{ } }); + + // on close form + eventBus.addHandler(CloseCreationFormEvent.TYPE, new CloseCreationFormEventHandler() { + + @Override + public void onClose(CloseCreationFormEvent event) { + + closeDialogBox(); + + } + + }); } @@ -1143,8 +1166,6 @@ public class CreateDatasetForm extends Composite{ */ private void addTagElement(TextBox itemBox){ - GWT.log("value is " + itemBox.getValue()); - if (itemBox.getValue() != null && !"".equals(itemBox.getValue().trim())) { if(tagsList.contains(itemBox.getValue())){ @@ -1154,12 +1175,17 @@ public class CreateDatasetForm extends Composite{ // ckan accepts only alphanumeric values String[] subTags = itemBox.getValue().split(" "); - for (int i = 0; i < subTags.length; i++) { - String subTag = subTags[i]; - if(!subTag.matches("^[a-zA-Z0-9]*$")) + if(subTags.length == 1){ + if(!subTags[0].matches("^[a-zA-Z0-9]*$")) return; - if(subTag.length() <= 1) + if(subTags[0].length() <= 1) return; + }else{ + for (int i = 0; i < subTags.length; i++) { + String subTag = subTags[i]; + if(!subTag.matches("^[a-zA-Z0-9]*$")) + return; + } } final String value = itemBox.getValue(); @@ -1195,12 +1221,17 @@ public class CreateDatasetForm extends Composite{ // ckan accepts only alphanumeric values String[] subTags = tag.split(" "); - for (int i = 0; i < subTags.length; i++) { - String subTag = subTags[i]; - if(!subTag.matches("^[a-zA-Z0-9]*$")) + if(subTags.length == 1){ + if(!subTags[0].matches("^[a-zA-Z0-9]*$")) return; - if(subTag.length() <= 1) + if(subTags[0].length() <= 1) return; + }else{ + for (int i = 0; i < subTags.length; i++) { + String subTag = subTags[i]; + if(!subTag.matches("^[a-zA-Z0-9]*$")) + return; + } } final ListItem displayItem = new ListItem(); @@ -1242,6 +1273,23 @@ public class CreateDatasetForm extends Composite{ tagsPanel.clear(); } + + /** + * Close any dialog box opened + */ + private void closeDialogBox() { + + for (String popupid : popupOpenedIds) { + GcubeDialogExtended popup = null; + try{ + Element element = DOM.getElementById(popupid); + popup = (GcubeDialogExtended) Widget.asWidgetOrNull(getWidget(element)); + popup.hide(); + }catch(Exception e){ + GWT.log("ERROR", e); + } + } + } /** * Prepare the popover and the gcube popup panel for information. @@ -1287,6 +1335,9 @@ public class CreateDatasetForm extends Composite{ popup = new GcubeDialogExtended(captionText, text); popup.getElement().setId(popupId); popup.setModal(false); + + // add its id + popupOpenedIds.add(popupId); } diff --git a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/MetaDataFieldSkeleton.java b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/MetaDataFieldSkeleton.java index 10b9b6b..b5193cb 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/MetaDataFieldSkeleton.java +++ b/src/main/java/org/gcube/portlets/widgets/ckandatapublisherwidget/client/ui/MetaDataFieldSkeleton.java @@ -2,6 +2,8 @@ package org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui; import java.util.List; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.CloseCreationFormEvent; +import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.CloseCreationFormEventHandler; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.utils.GcubeDialogExtended; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.MetadataFieldWrapper; @@ -20,6 +22,7 @@ import com.google.gwt.dom.client.Style.Display; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; +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; @@ -58,12 +61,21 @@ public class MetaDataFieldSkeleton extends Composite{ // the dialog box for this metadata private GcubeDialogExtended dialog; + + // save event bus referene + private HandlerManager eventBus; - public MetaDataFieldSkeleton(MetadataFieldWrapper field) { + public MetaDataFieldSkeleton(MetadataFieldWrapper field, HandlerManager eventBus) { initWidget(uiBinder.createAndBindUi(this)); // prepare information this.field = field; + + // event bus + this.eventBus = eventBus; + + // bind + bind(); // add custom css properties controls.addStyleName("form-controls-custom"); @@ -163,6 +175,25 @@ public class MetaDataFieldSkeleton extends Composite{ } + /** + * Bind on events + */ + private void bind() { + + // on close form + eventBus.addHandler(CloseCreationFormEvent.TYPE, new CloseCreationFormEventHandler() { + + @Override + public void onClose(CloseCreationFormEvent event) { + + if(dialog != null) + dialog.hide(); + + } + }); + + } + @UiHandler("focusPanelIconContainer") void onInfoIconClick(ClickEvent c){