diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
index 6d901b4..b318cda 100644
--- a/.settings/org.eclipse.wst.common.component
+++ b/.settings/org.eclipse.wst.common.component
@@ -5,9 +5,6 @@
-
- uses
-
diff --git a/src/main/java/org/gcube/portlets/user/invitefriends/client/ui/InviteWidget.java b/src/main/java/org/gcube/portlets/user/invitefriends/client/ui/InviteWidget.java
index 74c0009..f673899 100644
--- a/src/main/java/org/gcube/portlets/user/invitefriends/client/ui/InviteWidget.java
+++ b/src/main/java/org/gcube/portlets/user/invitefriends/client/ui/InviteWidget.java
@@ -1,5 +1,7 @@
package org.gcube.portlets.user.invitefriends.client.ui;
+import org.gcube.portlets.user.invitefriends.client.validation.ValidationErrorsActivity;
+
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.Form;
import com.github.gwtbootstrap.client.ui.HelpBlock;
@@ -12,13 +14,14 @@ import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
/**
*
* @author Massimiliano Assante, ISTI-CNR
*
*/
-public class InviteWidget extends Composite {
+public class InviteWidget extends Composite{
public static final String DISPLAY_NAME = "Invite people to this VRE";
@@ -29,29 +32,26 @@ public class InviteWidget extends Composite {
}
@UiField HTML header;
- @UiField TextBox emailAddress;
- @UiField Button openModal;
- @UiField Button cancelInvite;
- @UiField Button sendInvite;
- @UiField Modal modalWindow;
- @UiField Form mainForm;
- @UiField HelpBlock helpBlock;
+
+ @UiField SimplePanel validationErrorsFormPanel;
public InviteWidget() {
+ super();
initWidget(uiBinder.createAndBindUi(this));
header.setText(DISPLAY_NAME);
+
+ new ValidationErrorsActivity().start(validationErrorsFormPanel, null);
}
-
- @UiHandler("openModal")
- public void onClick(ClickEvent e) {
- helpBlock.setText("We will send the invitation email to: "+emailAddress.getText());
- modalWindow.show();
- }
-
- @UiHandler("cancelInvite")
- public void onCancelClick(ClickEvent e) {
- modalWindow.hide();
- }
-
-
+//
+// @UiHandler("openModal")
+// public void onClick(ClickEvent e) {
+// helpBlock.setText("We will send the invitation email to: "+emailAddress.getText());
+// modalWindow.show();
+// }
+//
+// @UiHandler("cancelInvite")
+// public void onCancelClick(ClickEvent e) {
+// modalWindow.hide();
+// }
+//
}
diff --git a/src/main/java/org/gcube/portlets/user/invitefriends/client/ui/InviteWidget.ui.xml b/src/main/java/org/gcube/portlets/user/invitefriends/client/ui/InviteWidget.ui.xml
index c52d76c..8101f43 100644
--- a/src/main/java/org/gcube/portlets/user/invitefriends/client/ui/InviteWidget.ui.xml
+++ b/src/main/java/org/gcube/portlets/user/invitefriends/client/ui/InviteWidget.ui.xml
@@ -3,33 +3,6 @@
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:b="urn:import:com.github.gwtbootstrap.client.ui">
-
-
-
-
-
- Send Invite
-
-
-
-
-
-
- Please, enter name and lastname of the friend you
- wish to invite:
-
-
-
-
-
-
-
-
-
- Cancel
- Send Invite
-
-
+
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsActivity.java b/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsActivity.java
new file mode 100644
index 0000000..2ae68a6
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsActivity.java
@@ -0,0 +1,161 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.invitefriends.client.validation;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.Path;
+import javax.validation.metadata.ConstraintDescriptor;
+
+import org.gcube.portlets.user.invitefriends.client.validation.ValidationErrorsView.UserDetails;
+
+import com.google.gwt.activity.shared.AbstractActivity;
+import com.google.gwt.editor.client.EditorDriver;
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.user.client.ui.AcceptsOneWidget;
+import com.google.gwt.validation.client.impl.PathImpl;
+
+/**
+ * Showcase for ErrorEditor
s validation decoration of TextBox
es.
+ *
+ * @author ivangsa
+ *
+ */
+public class ValidationErrorsActivity extends AbstractActivity implements ValidationErrorsView.Delegate {
+
+ private ValidationErrorsView view;
+
+
+ /**
+ * @see com.google.gwt.activity.shared.Activity#start(com.google.gwt.user.client.ui.AcceptsOneWidget, com.google.gwt.event.shared.EventBus)
+ */
+ @Override
+ public void start(AcceptsOneWidget panel, EventBus eventBus) {
+ view = new ValidationErrorsViewImpl(this);
+ panel.setWidget(view);
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ @Override
+ public boolean onSendClick() {
+ EditorDriver editorDriver = view.getEditorDriver();
+ UserDetails login = editorDriver.flush();
+ Set> violations = validate(login);
+ /* This will decorate widgets implementing HasEditorErrors with validation messages */
+ return editorDriver.setConstraintViolations( (Set) violations);
+ }
+
+ private Set> validate(UserDetails user2InviteBean){
+ Set> violations = new HashSet>();
+ if(user2InviteBean.getEmail() == null || "".equals(user2InviteBean.getEmail().trim())) {
+ violations.add(buildNotNullConstraintViolation(user2InviteBean, "email"));
+ }
+ else if (!isValidEmailAddress(user2InviteBean.getEmail())) {
+ violations.add(buildInvalidEmailAddressConstraintViolation(user2InviteBean, "email"));
+ }
+ return violations;
+ }
+
+
+ private ConstraintViolation buildNotNullConstraintViolation(final UserDetails bean, final String path) {
+ return new ConstraintViolation() {
+ @Override
+ public String getMessage() {
+ return "must not be empty";
+ }
+ @Override
+ public String getMessageTemplate() {
+ return null;
+ }
+ @Override
+ public UserDetails getRootBean() {
+ return bean;
+ }
+ @Override
+ public Class getRootBeanClass() {
+ return UserDetails.class;
+ }
+ @Override
+ public Object getLeafBean() {
+ return bean;
+ }
+
+ @Override
+ public Path getPropertyPath() {
+ return new PathImpl().append(path);
+ }
+
+ @Override
+ public Object getInvalidValue() {
+ return null;
+ }
+ @Override
+ public ConstraintDescriptor> getConstraintDescriptor() {
+ return null;
+ }
+ };
+ }
+
+ private ConstraintViolation buildInvalidEmailAddressConstraintViolation(final UserDetails bean, final String path) {
+ return new ConstraintViolation() {
+ @Override
+ public String getMessage() {
+ return "email address must be valid";
+ }
+ @Override
+ public String getMessageTemplate() {
+ return null;
+ }
+ @Override
+ public UserDetails getRootBean() {
+ return bean;
+ }
+ @Override
+ public Class getRootBeanClass() {
+ return UserDetails.class;
+ }
+ @Override
+ public Object getLeafBean() {
+ return bean;
+ }
+
+ @Override
+ public Path getPropertyPath() {
+ return new PathImpl().append(path);
+ }
+
+ @Override
+ public Object getInvalidValue() {
+ return null;
+ }
+ @Override
+ public ConstraintDescriptor> getConstraintDescriptor() {
+ return null;
+ }
+ };
+ }
+ /**
+ *
+ * @param emailValue
+ * @return
+ */
+ private boolean isValidEmailAddress(String emailValue) {
+ if(emailValue == null) return true;
+
+ String emailPattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.(?:[a-zA-Z]{2,6})$";
+
+ boolean valid = false;
+
+ if(emailValue.getClass().toString().equals(String.class.toString())) {
+ valid = ((String)emailValue).matches(emailPattern);
+ } else {
+ valid = ((Object)emailValue).toString().matches(emailPattern);
+ }
+
+ return valid;
+}
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsView.java b/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsView.java
new file mode 100644
index 0000000..fc12c88
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsView.java
@@ -0,0 +1,52 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.invitefriends.client.validation;
+
+import com.google.gwt.editor.client.EditorDriver;
+import com.google.gwt.user.client.ui.IsWidget;
+
+/**
+ * @author ivangsa
+ *
+ */
+public interface ValidationErrorsView extends IsWidget {
+
+ public static class UserDetails {
+ String email;
+ String name;
+ String lastName;
+
+ public String getEmail() {
+ return email;
+ }
+ public void setEmail(String email) {
+ this.email = email;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+ @Override
+ public String toString() {
+ return "UserDetails [email=" + email + ", name=" + name
+ + ", lastName=" + lastName + "]";
+ }
+
+ }
+
+ public interface Delegate {
+ boolean onSendClick();
+ }
+
+ EditorDriver getEditorDriver();
+}
diff --git a/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsViewImpl.java b/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsViewImpl.java
new file mode 100644
index 0000000..89d161b
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsViewImpl.java
@@ -0,0 +1,76 @@
+/**
+ *
+ */
+package org.gcube.portlets.user.invitefriends.client.validation;
+
+import com.github.gwtbootstrap.client.ui.Button;
+import com.github.gwtbootstrap.client.ui.HelpBlock;
+import com.github.gwtbootstrap.client.ui.Modal;
+import com.github.gwtbootstrap.client.ui.TextBox;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.editor.client.Editor;
+import com.google.gwt.editor.client.EditorDriver;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.event.dom.client.ClickEvent;
+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.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * @author ivangsa
+ *
+ */
+public class ValidationErrorsViewImpl extends Composite implements ValidationErrorsView, Editor {
+
+ interface Binder extends UiBinder {}
+ private static Binder uiBinder = GWT.create(Binder.class);
+
+ interface Driver extends SimpleBeanEditorDriver { }
+ private Driver driver = GWT.create(Driver.class);
+
+ private final Delegate delegate;
+
+ @UiField TextBox email;
+ @UiField TextBox name;
+ @UiField TextBox lastName;
+//
+ @UiField Button openModal;
+ @UiField Button cancelInvite;
+ @UiField Button sendInvite;
+ @UiField Modal modalWindow;
+ @UiField HelpBlock helpBlock;
+
+ /**
+ *
+ */
+ public ValidationErrorsViewImpl(Delegate delegate) {
+ super();
+ this.delegate = delegate;
+ initWidget(uiBinder.createAndBindUi(this));
+ driver.initialize(this);
+ driver.edit(new UserDetails());
+ }
+
+ @UiHandler("openModal")
+ void onUserClick(ClickEvent event) {
+ if (!delegate.onSendClick()) {
+ helpBlock.setText("We will send the invitation email to: "+email.getText());
+ modalWindow.show();
+ }
+ }
+
+ @UiHandler("cancelInvite")
+ public void onCancelClick(ClickEvent e) {
+ modalWindow.hide();
+ }
+
+
+
+ @Override
+ public EditorDriver getEditorDriver() {
+ return driver;
+ }
+}
+
diff --git a/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsViewImpl.ui.xml b/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsViewImpl.ui.xml
new file mode 100644
index 0000000..a1f295f
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/invitefriends/client/validation/ValidationErrorsViewImpl.ui.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+ Send Invite
+
+
+
+
+
+ Please, enter Name and
+ Last name
+ of the friend you
+ wish to invite:
+
+
+
+
+
+
+
+
+
+ Cancel
+ Send Invite
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/org/gcube/portlets/user/invitefriends/InviteFriends.gwt.xml b/src/main/resources/org/gcube/portlets/user/invitefriends/InviteFriends.gwt.xml
index 096d3f3..d46ea40 100644
--- a/src/main/resources/org/gcube/portlets/user/invitefriends/InviteFriends.gwt.xml
+++ b/src/main/resources/org/gcube/portlets/user/invitefriends/InviteFriends.gwt.xml
@@ -2,6 +2,7 @@
+