You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ab...@apache.org on 2014/10/10 04:51:35 UTC
[06/52] [abbrv] git commit: SQOOP-1465: Sqoop2: Validations: Add
support for multiple validation messages to Model classes
SQOOP-1465: Sqoop2: Validations: Add support for multiple validation messages to Model classes
Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/f89368e2
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/f89368e2
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/f89368e2
Branch: refs/heads/SQOOP-1367
Commit: f89368e2a0cc6236b2c50dfe544134f9d55208b9
Parents: e71dd75
Author: Jarek Jarcec Cecho <ja...@apache.org>
Authored: Mon Sep 8 23:16:19 2014 -0700
Committer: Abraham Elmahrek <ab...@elmahrek.com>
Committed: Thu Oct 9 17:58:17 2014 -0700
----------------------------------------------------------------------
.../java/org/apache/sqoop/model/FormUtils.java | 10 +-
.../apache/sqoop/model/MValidatedElement.java | 107 +++++++------------
.../org/apache/sqoop/validation/Status.java | 16 ++-
.../org/apache/sqoop/model/TestFormUtils.java | 31 ------
.../sqoop/model/TestMValidatedElement.java | 36 +++----
.../apache/sqoop/shell/utils/FormDisplayer.java | 5 +-
.../apache/sqoop/shell/utils/FormFiller.java | 17 ++-
7 files changed, 88 insertions(+), 134 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/sqoop/blob/f89368e2/common/src/main/java/org/apache/sqoop/model/FormUtils.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/FormUtils.java b/common/src/main/java/org/apache/sqoop/model/FormUtils.java
index bfd97d5..586e0fe 100644
--- a/common/src/main/java/org/apache/sqoop/model/FormUtils.java
+++ b/common/src/main/java/org/apache/sqoop/model/FormUtils.java
@@ -314,9 +314,9 @@ public class FormUtils {
if (messages.containsKey(name)) {
Validation.Message message = messages.get(name);
- element.setValidationMessage(message.getStatus(), message.getMessage());
+ element.addValidationMessage(new Message(message.getStatus(), message.getMessage()));
} else {
- element.setValidationMessage(Status.getDefault(), null);
+ element.addValidationMessage(new Message(Status.getDefault(), null));
}
}
@@ -349,11 +349,9 @@ public class FormUtils {
List<Message> messages = result.getMessages().get(element.getName());
if(messages != null) {
- // TODO(SQOOP-1465) Add support for multiple messages (showing only the first one for now)
- Message message = messages.get(0);
- element.setValidationMessage(message.getStatus(), message.getMessage());
+ element.setValidationMessages(messages);
} else {
- element.setValidationMessage(Status.getDefault(), null);
+ element.resetValidationMessages();
}
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/f89368e2/common/src/main/java/org/apache/sqoop/model/MValidatedElement.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MValidatedElement.java b/common/src/main/java/org/apache/sqoop/model/MValidatedElement.java
index ab5473c..a50c815 100644
--- a/common/src/main/java/org/apache/sqoop/model/MValidatedElement.java
+++ b/common/src/main/java/org/apache/sqoop/model/MValidatedElement.java
@@ -17,122 +17,87 @@
*/
package org.apache.sqoop.model;
+import org.apache.sqoop.validation.Message;
import org.apache.sqoop.validation.Status;
+import java.util.LinkedList;
+import java.util.List;
+
/**
- * Element that can be validated for correctness.
- *
- * Two severity levels are supported at the moment - warning and error.
- *
- * Warning:
- * Warning is something suspicious, potentially wrong but something that
- * can be ignored. For example in case of JDBC URL element, warning would
- * be if specified host is not responding - it's warning because specified
- * URL might be wrong. However at the same time URL might be right as only
- * target host might be down.
- *
- * Error:
- * Error represents unacceptable element content. For example in case of JDBC
- * URL path, error would be empty element or element containing invalid URL.
+ * Element that can have associated validation messages (0..N).
*/
public abstract class MValidatedElement extends MNamedElement {
/**
- * Validation message.
- *
- * One element can have only one message regardless of the type.
+ * Validation messages.
*/
- private String validationMessage;
+ private List<Message> validationMessages;
/**
- * Severity of the message.
+ * The worst status of all validation messages.
*/
private Status validationStatus;
public MValidatedElement(String name) {
super(name);
- // Everything is fine by default
- this.validationStatus = Status.getDefault();
+ resetValidationMessages();
}
public MValidatedElement(MValidatedElement other) {
super(other);
- this.validationMessage = other.validationMessage;
this.validationStatus = other.validationStatus;
+ this.validationMessages.addAll(other.validationMessages);
}
/**
- * Set validation message and given severity.
- *
- * @param status Message validation status
- * @param msg Message itself
- */
- public void setValidationMessage(Status status, String msg) {
- this.validationMessage = msg;
- this.validationStatus = status;
- }
-
- /**
- * Return validation message for given severity.
+ * Reset this validated element back to default state.
*
- * Return either associated message for given severity or null in case
- * that there is no message with given severity.
- *
- * @param status Message validation status
+ * Will remove all associated messages and validation status.
*/
- public String getValidationMessage(Status status) {
- return (validationStatus.equals(status)) ? validationMessage : null;
+ public void resetValidationMessages() {
+ this.validationStatus = Status.getDefault();
+ this.validationMessages = new LinkedList<Message>();
}
/**
- * Return validation message.
+ * Set validation messages (override anything that has been set before).
*
- * Return current validation message.
- */
- public String getValidationMessage() {
- return validationMessage;
- }
-
- /**
- * Return message validation status.
+ * @param msg Message itself
*/
- public Status getValidationStatus() {
- return validationStatus;
+ public void addValidationMessage(Message msg) {
+ this.validationMessages.add(msg);
+ this.validationStatus = Status.getWorstStatus(this.validationStatus, msg.getStatus());
}
/**
- * Set error message for this element.
+ * Override all previously existing validation messages.
*
- * @param errMsg Error message
+ * @param messages
*/
- public void setErrorMessage(String errMsg) {
- setValidationMessage(Status.UNACCEPTABLE, errMsg);
- }
+ public void setValidationMessages(List<Message> messages) {
+ this.validationMessages = messages;
+ this.validationStatus = Status.getDefault();
- /**
- * Return error message associated with this element.
- *
- * @return Error message
- */
- public String getErrorMessage() {
- return getValidationMessage(Status.UNACCEPTABLE);
+ for(Message message : messages ) {
+ this.validationStatus = Status.getWorstStatus(this.validationStatus, message.getStatus());
+ }
}
/**
- * Set warning message for this element.
+ * Return validation message for given severity.
*
- * @param warnMsg Warning message
+ * Return either associated message for given severity or null in case
+ * that there is no message with given severity.
*/
- public void setWarningMessage(String warnMsg) {
- setValidationMessage(Status.ACCEPTABLE, warnMsg);
+ public List<Message> getValidationMessages() {
+ return this.validationMessages;
}
/**
- * Retrieve warning message associated with this element.
- * @return
+ * Return message validation status.
*/
- public String getWarningMessage() {
- return getValidationMessage(Status.ACCEPTABLE);
+ public Status getValidationStatus() {
+ return validationStatus;
}
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/f89368e2/common/src/main/java/org/apache/sqoop/validation/Status.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/validation/Status.java b/common/src/main/java/org/apache/sqoop/validation/Status.java
index ae89e59..5a546bf 100644
--- a/common/src/main/java/org/apache/sqoop/validation/Status.java
+++ b/common/src/main/java/org/apache/sqoop/validation/Status.java
@@ -18,7 +18,21 @@
package org.apache.sqoop.validation;
/**
- * Status modes of a validation process.
+ * Severity of validation message.
+ *
+ * Fine:
+ * Everything is correct (default state).
+ *
+ * Warning:
+ * Warning is something suspicious, potentially wrong but something that
+ * can be ignored. For example in case of JDBC URL element, warning would
+ * be if specified host is not responding - it's warning because specified
+ * URL might be wrong. However at the same time URL might be right as only
+ * target host might be down.
+ *
+ * Error:
+ * Error represents unacceptable element content. For example in case of JDBC
+ * URL path, error would be empty element or element containing invalid URL.
*
* TODO: This should really be renamed to "severity"
*/
http://git-wip-us.apache.org/repos/asf/sqoop/blob/f89368e2/common/src/test/java/org/apache/sqoop/model/TestFormUtils.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/model/TestFormUtils.java b/common/src/test/java/org/apache/sqoop/model/TestFormUtils.java
index 41dddb7..9fa2b6b 100644
--- a/common/src/test/java/org/apache/sqoop/model/TestFormUtils.java
+++ b/common/src/test/java/org/apache/sqoop/model/TestFormUtils.java
@@ -129,23 +129,6 @@ public class TestFormUtils extends TestCase {
assertNull(config.bForm.b2);
}
- public void testApplyValidation() {
- Validation validation = getValidation();
- List<MForm> forms = getForms();
-
- FormUtils.applyValidation(forms, validation);
-
- assertEquals(Status.ACCEPTABLE,
- forms.get(0).getInputs().get(0).getValidationStatus());
- assertEquals("e1",
- forms.get(0).getInputs().get(0).getValidationMessage());
-
- assertEquals(Status.UNACCEPTABLE,
- forms.get(0).getInputs().get(1).getValidationStatus());
- assertEquals("e2",
- forms.get(0).getInputs().get(1).getValidationMessage());
- }
-
public void testJson() {
Config config = new Config();
config.aForm.a1 = "A";
@@ -179,20 +162,6 @@ public class TestFormUtils extends TestCase {
assertEquals(Enumeration.X, targetConfig.cForm.enumeration);
}
- protected Validation getValidation() {
- Map<Validation.FormInput, Validation.Message> messages
- = new HashMap<Validation.FormInput, Validation.Message>();
-
- messages.put(
- new Validation.FormInput("aForm", "a1"),
- new Validation.Message(Status.ACCEPTABLE, "e1"));
- messages.put(
- new Validation.FormInput("aForm", "a2"),
- new Validation.Message(Status.UNACCEPTABLE, "e2"));
-
- return new Validation(Status.UNACCEPTABLE, messages);
- }
-
/**
* Form structure that corresponds to Config class declared below
* @return Form structure
http://git-wip-us.apache.org/repos/asf/sqoop/blob/f89368e2/common/src/test/java/org/apache/sqoop/model/TestMValidatedElement.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/model/TestMValidatedElement.java b/common/src/test/java/org/apache/sqoop/model/TestMValidatedElement.java
index 3fd5a95..cf34983 100644
--- a/common/src/test/java/org/apache/sqoop/model/TestMValidatedElement.java
+++ b/common/src/test/java/org/apache/sqoop/model/TestMValidatedElement.java
@@ -19,6 +19,7 @@ package org.apache.sqoop.model;
import static org.junit.Assert.*;
+import org.apache.sqoop.validation.Message;
import org.apache.sqoop.validation.Status;
import org.junit.Test;
@@ -41,30 +42,27 @@ public class TestMValidatedElement {
* Test for validation message and status
*/
@Test
- public void testValidationMessageStatus() {
+ public void testVarious() {
MValidatedElement input = new MIntegerInput("input", false);
+
// Default status
assertEquals(Status.FINE, input.getValidationStatus());
- // Set status and user message
- input.setValidationMessage(Status.ACCEPTABLE, "MY_MESSAGE");
+
+ // Add a message
+ input.addValidationMessage(new Message(Status.ACCEPTABLE, "MY_MESSAGE"));
assertEquals(Status.ACCEPTABLE, input.getValidationStatus());
- assertEquals("MY_MESSAGE", input.getValidationMessage());
- // Check for null if status does not equal
- assertNull(input.getValidationMessage(Status.FINE));
- assertNull(input.getErrorMessage());
- assertNotNull(input.getWarningMessage());
+ assertEquals(1, input.getValidationMessages().size());
+ assertEquals("MY_MESSAGE", input.getValidationMessages().get(0).getMessage());
+
+ // Reset
+ input.resetValidationMessages();
+ assertEquals(Status.FINE, input.getValidationStatus());
+ assertEquals(0, input.getValidationMessages().size());
+
// Set unacceptable status
- input.setValidationMessage(Status.UNACCEPTABLE, "MY_MESSAGE");
- assertNotNull(input.getErrorMessage());
- assertEquals("MY_MESSAGE", input.getErrorMessage());
- assertNull(input.getWarningMessage());
- // Set warning
- input.setWarningMessage("WARN");
- assertEquals(Status.ACCEPTABLE, input.getValidationStatus());
- assertEquals("WARN", input.getValidationMessage());
- // Unacceptable method
- input.setErrorMessage("ERROR");
+ input.addValidationMessage(new Message(Status.UNACCEPTABLE, "MY_MESSAGE"));
assertEquals(Status.UNACCEPTABLE, input.getValidationStatus());
- assertEquals("ERROR", input.getValidationMessage());
+ assertEquals(1, input.getValidationMessages().size());
+ assertEquals("MY_MESSAGE", input.getValidationMessages().get(0).getMessage());
}
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/f89368e2/shell/src/main/java/org/apache/sqoop/shell/utils/FormDisplayer.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/utils/FormDisplayer.java b/shell/src/main/java/org/apache/sqoop/shell/utils/FormDisplayer.java
index e04d7b5..bbad183 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/utils/FormDisplayer.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/utils/FormDisplayer.java
@@ -33,6 +33,7 @@ import org.apache.sqoop.model.MJob;
import org.apache.sqoop.model.MMapInput;
import org.apache.sqoop.model.MStringInput;
import org.apache.sqoop.shell.core.Constants;
+import org.apache.sqoop.validation.Message;
import org.apache.sqoop.validation.Status;
import java.util.ArrayList;
@@ -163,7 +164,9 @@ public final class FormDisplayer {
print("\n@|yellow %s|@\n", resourceString(Constants.RES_FORMDISPLAYER_FORM_WARNING));
showMessage = false;
}
- FormFiller.warningMessage(form.getValidationMessage());
+ for(Message message : form.getValidationMessages()) {
+ FormFiller.warningMessage(message.getMessage());
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/sqoop/blob/f89368e2/shell/src/main/java/org/apache/sqoop/shell/utils/FormFiller.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/utils/FormFiller.java b/shell/src/main/java/org/apache/sqoop/shell/utils/FormFiller.java
index 9d63c6e..bbf7af7 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/utils/FormFiller.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/utils/FormFiller.java
@@ -33,6 +33,8 @@ import org.apache.sqoop.model.MJob;
import org.apache.sqoop.model.MNamedElement;
import org.apache.sqoop.model.MStringInput;
import org.apache.sqoop.model.MValidatedElement;
+import org.apache.sqoop.validation.Message;
+import org.apache.sqoop.validation.Status;
import java.io.IOException;
import java.util.List;
@@ -849,19 +851,24 @@ public final class FormFiller {
* @param element Validated element
*/
public static void printValidationMessage(MValidatedElement element, boolean includeInputPrefix) {
- switch (element.getValidationStatus()) {
+ if(element.getValidationStatus() == Status.getDefault()) {
+ return;
+ }
+
+ for(Message message : element.getValidationMessages())
+ switch (message.getStatus()) {
case UNACCEPTABLE:
if (includeInputPrefix) {
- errorMessage(element, element.getValidationMessage());
+ errorMessage(element, message.getMessage());
} else {
- errorMessage(element.getValidationMessage());
+ errorMessage(message.getMessage());
}
break;
case ACCEPTABLE:
if (includeInputPrefix) {
- warningMessage(element, element.getValidationMessage());
+ warningMessage(element, message.getMessage());
} else {
- warningMessage(element.getValidationMessage());
+ warningMessage(message.getMessage());
}
break;
default: