azkaban-developers

Update ValidationReport's API to facilitate adding information

1/29/2015 3:49:34 AM

Details

diff --git a/azkaban-common/src/main/java/azkaban/project/validator/ValidationReport.java b/azkaban-common/src/main/java/azkaban/project/validator/ValidationReport.java
index 9cccffb..7e6bc8d 100644
--- a/azkaban-common/src/main/java/azkaban/project/validator/ValidationReport.java
+++ b/azkaban-common/src/main/java/azkaban/project/validator/ValidationReport.java
@@ -7,32 +7,43 @@ import java.util.Set;
  * The result of a project validation generated by a {@link ProjectValidator}. It contains
  * an enum of type {@link ValidationStatus} representing whether the validation passes,
  * generates warnings, or generates errors. Accordingly, three sets of String are also
- * maintained, storing the messages generated by the {@link ProjectValidator} at each of
- * the 3 {@link ValidationStatus} levels, i.e., {@link ValidationStatus#PASS},
- * {@link ValidationStatus#WARN}, and {@link ValidationStatus#ERROR}.
+ * maintained, storing the messages generated by the {@link ProjectValidator} at both
+ * {@link ValidationStatus#WARN} and {@link ValidationStatus#ERROR} level, as well as
+ * information messages associated with both levels.
  */
 public class ValidationReport {
 
   protected ValidationStatus _status;
-  protected Set<String> _passMsgs;
+  protected Set<String> _infoMsgs;
   protected Set<String> _warningMsgs;
   protected Set<String> _errorMsgs;
 
   public ValidationReport() {
     _status = ValidationStatus.PASS;
-    _passMsgs = new HashSet<String>();
+    _infoMsgs = new HashSet<String>();
     _warningMsgs = new HashSet<String>();
     _errorMsgs = new HashSet<String>();
   }
 
   /**
-   * Add a message with status level being {@link ValidationStatus#PASS}
+   * Add an information message associated with warning messages
    *
    * @param msgs
    */
-  public void addPassMsgs(Set<String> msgs) {
-    if (msgs != null) {
-      _passMsgs.addAll(msgs);
+  public void addWarnLevelInfoMsg(String msg) {
+    if (msg != null) {
+      _infoMsgs.add("WARN" + msg);
+    }
+  }
+
+  /**
+   * Add an information message associated with error messages
+   *
+   * @param msgs
+   */
+  public void addErrorLevelInfoMsg(String msg) {
+    if (msg != null) {
+      _infoMsgs.add("ERROR" + msg);
     }
   }
 
@@ -74,12 +85,12 @@ public class ValidationReport {
   }
 
   /**
-   * Retrieve the messages associated with status level {@link ValidationStatus#PASS}
+   * Retrieve the list of information messages associated with status level {@link ValidationStatus#PASS}
    *
    * @return
    */
-  public Set<String> getPassMsgs() {
-    return _passMsgs;
+  public Set<String> getInfoMsgs() {
+    return _infoMsgs;
   }
 
   /**
@@ -100,4 +111,35 @@ public class ValidationReport {
     return _errorMsgs;
   }
 
+  /**
+   * Return the severity level this information message is associated with.
+   *
+   * @param msg
+   * @return
+   */
+  public static ValidationStatus getInfoMsgLevel(String msg) {
+    if (msg.startsWith("ERROR")) {
+      return ValidationStatus.ERROR;
+    }
+    if (msg.startsWith("WARN")) {
+      return ValidationStatus.WARN;
+    }
+    return ValidationStatus.PASS;
+  }
+
+  /**
+   * Get the raw information message.
+   *
+   * @param msg
+   * @return
+   */
+  public static String getInfoMsg(String msg) {
+    if (msg.startsWith("ERROR")) {
+      return msg.replaceFirst("ERROR", "");
+    }
+    if (msg.startsWith("WARN")) {
+      return msg.replaceFirst("WARN", "");
+    }
+    return msg;
+  }
 }
diff --git a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
index 0997597..60efa24 100644
--- a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -1586,12 +1586,17 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         StringBuffer warnMsgs = new StringBuffer();
         for (Entry<String, ValidationReport> reportEntry : reports.entrySet()) {
           ValidationReport report = reportEntry.getValue();
-          if (!report.getPassMsgs().isEmpty()) {
-            for (String msg : report.getPassMsgs()) {
-              if (msg.startsWith("ERROR")) {
-                errorMsgs.append(msg.replaceFirst("ERROR", "") + "<br/>");
-              } else if (msg.startsWith("WARN")) {
-                warnMsgs.append(msg.replaceFirst("WARN", "") + "<br/>");
+          if (!report.getInfoMsgs().isEmpty()) {
+            for (String msg : report.getInfoMsgs()) {
+              switch (ValidationReport.getInfoMsgLevel(msg)) {
+                case ERROR:
+                  errorMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
+                  break;
+                case WARN:
+                  warnMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
+                  break;
+                default:
+                    break;
               }
             }
           }