Improving Batch Queue Validations
diff --git a/modules/configuration/server/src/main/resources/airavata-server.properties b/modules/configuration/server/src/main/resources/airavata-server.properties
index e604bd3..2df1531 100644
--- a/modules/configuration/server/src/main/resources/airavata-server.properties
+++ b/modules/configuration/server/src/main/resources/airavata-server.properties
@@ -247,7 +247,7 @@
 #job.submitter=org.apache.airavata.orchestrator.core.impl.GFACEmbeddedJobSubmitter
 job.submitter=org.apache.airavata.orchestrator.core.impl.GFACPassiveJobSubmitter
 #job.submitter=org.apache.airavata.orchestrator.core.impl.GFACRPCJobSubmitter
-job.validators=org.apache.airavata.orchestrator.core.validator.impl.SimpleAppDataValidator,org.apache.airavata.orchestrator.core.validator.impl.ExperimentStatusValidator
+job.validators=org.apache.airavata.orchestrator.core.validator.impl.BatchQueueValidator,org.apache.airavata.orchestrator.core.validator.impl.ExperimentStatusValidator
 submitter.interval=10000
 threadpool.size=10
 start.submitter=true
diff --git a/modules/credential-store/credential-store-service/src/test/resources/airavata-server.properties b/modules/credential-store/credential-store-service/src/test/resources/airavata-server.properties
index 37209a8..197d4e4 100644
--- a/modules/credential-store/credential-store-service/src/test/resources/airavata-server.properties
+++ b/modules/credential-store/credential-store-service/src/test/resources/airavata-server.properties
@@ -235,7 +235,7 @@
 #job.submitter=org.apache.airavata.orchestrator.core.impl.GFACEmbeddedJobSubmitter
 #job.submitter=org.apache.airavata.orchestrator.core.impl.GFACPassiveJobSubmitter
 job.submitter=org.apache.airavata.orchestrator.core.impl.GFACRPCJobSubmitter
-job.validators=org.apache.airavata.orchestrator.core.validator.impl.SimpleAppDataValidator,org.apache.airavata.orchestrator.core.validator.impl.ExperimentStatusValidator
+job.validators=org.apache.airavata.orchestrator.core.validator.impl.BatchQueueValidator,org.apache.airavata.orchestrator.core.validator.impl.ExperimentStatusValidator
 submitter.interval=10000
 threadpool.size=10
 start.submitter=true
diff --git a/modules/credential-store/credential-store-webapp/src/main/resources/airavata-server.properties b/modules/credential-store/credential-store-webapp/src/main/resources/airavata-server.properties
index 39f827d..580f598 100644
--- a/modules/credential-store/credential-store-webapp/src/main/resources/airavata-server.properties
+++ b/modules/credential-store/credential-store-webapp/src/main/resources/airavata-server.properties
@@ -218,7 +218,7 @@
 #job.submitter=org.apache.airavata.orchestrator.core.impl.GFACEmbeddedJobSubmitter
 #job.submitter=org.apache.airavata.orchestrator.core.impl.GFACPassiveJobSubmitter
 job.submitter=org.apache.airavata.orchestrator.core.impl.GFACRPCJobSubmitter
-job.validators=org.apache.airavata.orchestrator.core.validator.impl.SimpleAppDataValidator,org.apache.airavata.orchestrator.core.validator.impl.ExperimentStatusValidator
+job.validators=org.apache.airavata.orchestrator.core.validator.impl.BatchQueueValidator,org.apache.airavata.orchestrator.core.validator.impl.ExperimentStatusValidator
 submitter.interval=10000
 threadpool.size=10
 start.submitter=true
diff --git a/modules/gfac/airavata-gfac-service/src/test/resources/orchestrator.properties b/modules/gfac/airavata-gfac-service/src/test/resources/orchestrator.properties
index 5ebfe4f..35c0427 100644
--- a/modules/gfac/airavata-gfac-service/src/test/resources/orchestrator.properties
+++ b/modules/gfac/airavata-gfac-service/src/test/resources/orchestrator.properties
@@ -18,7 +18,7 @@
 # under the License.
 #
 job.submitter=org.apache.airavata.orchestrator.core.impl.EmbeddedGFACJobSubmitter
-job.validators=org.apache.airavata.orchestrator.core.validator.impl.SimpleAppDataValidator
+job.validators=org.apache.airavata.orchestrator.core.validator.impl.BatchQueueValidator
 submitter.interval=10000
 threadpool.size=0
 start.submitter=true
diff --git a/modules/orchestrator/airavata-orchestrator-service/src/test/resources/orchestrator.properties b/modules/orchestrator/airavata-orchestrator-service/src/test/resources/orchestrator.properties
index a1f0169..e84c429 100644
--- a/modules/orchestrator/airavata-orchestrator-service/src/test/resources/orchestrator.properties
+++ b/modules/orchestrator/airavata-orchestrator-service/src/test/resources/orchestrator.properties
@@ -18,7 +18,7 @@
 # under the License.
 #
 job.submitter=org.apache.airavata.orchestrator.core.impl.GFACEmbeddedJobSubmitter
-job.validators=org.apache.airavata.orchestrator.core.validator.impl.SimpleAppDataValidator
+job.validators=org.apache.airavata.orchestrator.core.validator.impl.BatchQueueValidator
 submitter.interval=10000
 threadpool.size=0
 start.submitter=true
diff --git a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/SimpleAppDataValidator.java b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/BatchQueueValidator.java
similarity index 71%
rename from modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/SimpleAppDataValidator.java
rename to modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/BatchQueueValidator.java
index 21e2ac7..8cd88fa 100644
--- a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/SimpleAppDataValidator.java
+++ b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/BatchQueueValidator.java
@@ -38,13 +38,13 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class SimpleAppDataValidator implements JobMetadataValidator {
-    private final static Logger logger = LoggerFactory.getLogger(SimpleAppDataValidator.class);
+public class BatchQueueValidator implements JobMetadataValidator {
+    private final static Logger logger = LoggerFactory.getLogger(BatchQueueValidator.class);
 
     private Registry registry;
     private AppCatalog appCatalog;
 
-    public SimpleAppDataValidator() {
+    public BatchQueueValidator() {
         try {
             this.registry = RegistryFactory.getDefaultRegistry();
             this.appCatalog = AppCatalogFactory.getAppCatalog();
@@ -79,7 +79,7 @@
             UserConfigurationData userConfigurationData = experiment.getUserConfigurationData();
             ComputationalResourceScheduling computationalResourceScheduling = userConfigurationData.getComputationalResourceScheduling();
             if (userConfigurationData.isAiravataAutoSchedule()) {
-                logger.error("We dont' support auto scheduling at this point, We will simply use user data as it is");
+                logger.error("Auto-Schedule is not yet supported. Experiment will proceed with provided scheduling information");
                 ValidatorResult validatorResult = new ValidatorResult();
                 validatorResult.setResult(false);
                 validatorResultList.add(validatorResult);
@@ -89,25 +89,39 @@
 
             if (batchQueues != null && !batchQueues.isEmpty()){
                 if (computationalResourceScheduling != null){
-                    String queueName = computationalResourceScheduling.getQueueName().trim();
-                    int wallTimeLimit = computationalResourceScheduling.getWallTimeLimit();
+                    String experimentQueueName = computationalResourceScheduling.getQueueName().trim();
+                    int experimentWallTimeLimit = computationalResourceScheduling.getWallTimeLimit();
                     ValidatorResult queueNameResult = new ValidatorResult();
 
+                    //Set the validation to false. Once all the queue's are looped, if nothing matches, then this gets passed.
                     queueNameResult.setResult(false);
-                    queueNameResult.setErrorDetails("Unable to find queue name from appcatalog configured queues.. Either you " +
-                            "specified a wrong queue name or you did not configure app catalog correctly...");
+                    queueNameResult.setErrorDetails("The specified queue" + experimentQueueName +
+                            "does not exist. If you believe this is an error, contact the administrator to verify App-Catalog Configurations");
                     for (BatchQueue queue : batchQueues){
-                        String configuredQname = queue.getQueueName();
-                        int maxRunTime = queue.getMaxRunTime();
-                        if (configuredQname != null && configuredQname.equals(queueName)){
-                            ValidatorResult wallTimeResult = new ValidatorResult();
-                            wallTimeResult.setResult(false);
-                            wallTimeResult.setErrorDetails("Provided walltime period exceeds max walltime configured..");
+                        String resourceQueueName = queue.getQueueName();
+                        int maxQueueRunTime = queue.getMaxRunTime();
+                        if (resourceQueueName != null && resourceQueueName.equals(experimentQueueName)){
                             queueNameResult.setResult(true);
                             queueNameResult.setErrorDetails("");
-                            if (maxRunTime != 0 && maxRunTime > wallTimeLimit){
+
+                            //Validate if the specified wall time is within allowable limit
+                            ValidatorResult wallTimeResult = new ValidatorResult();
+                            if (maxQueueRunTime == 0) {
                                 wallTimeResult.setResult(true);
-                                wallTimeResult.setErrorDetails("");
+                                wallTimeResult.setErrorDetails("Maximum wall time is not configured for the queue," +
+                                        "Validation is being skipped");
+                                logger.info("Maximum wall time is not configured for the queue" +
+                                        "Validation is being skipped");
+                            } else {
+                                if (maxQueueRunTime < experimentWallTimeLimit){
+                                    wallTimeResult.setResult(false);
+                                    wallTimeResult.setErrorDetails("Job Execution walltime " + experimentWallTimeLimit +
+                                            "exceeds the allowable walltime"  + maxQueueRunTime +
+                                            "for queue " + resourceQueueName);
+                                } else {
+                                    wallTimeResult.setResult(true);
+                                    wallTimeResult.setErrorDetails("");
+                                }
                             }
                             validatorResultList.add(wallTimeResult);
                         }