/**
   * @param xmlSpecification
   * @param userGroup
   * @return
   */
  public ValidationReport Validate(String xmlSpecification, String userGroup) {
    final String methodName = "Validate";
    Logfile.WriteCalled(logLevel, STR_ClassName, methodName);

    ValidationReport validationReport = null;

    try {
      if (this.labExperimentEngines == null) {
        throw new NullPointerException(STRERR_LabExperimentEngines);
      }

      /*
       * Pass to the each experiment engine in turn to validate until validation is successful.
       * It may be possible that the LabEquipment for a particular LabExperimentEngine may be offline.
       */
      for (int i = 0; i < this.labExperimentEngines.length; i++) {
        LabExperimentEngine labExperimentEngine = this.labExperimentEngines[i];
        if (labExperimentEngine == null) {
          throw new NullPointerException(String.format(STRERR_LabExperimentEngineUnitId_arg, 0));
        }

        /*
         * Check if the LabExperimentEngine is online before trying to use it to validate
         */
        LabStatus labStatus = labExperimentEngine.GetLabStatus();
        if (labStatus.isOnline() == false) {
          continue;
        }

        /*
         * Validate the specification
         */
        validationReport = labExperimentEngine.Validate(xmlSpecification);
        if (validationReport.isAccepted() == true) {
          break;
        }
      }
    } catch (Exception ex) {
      Logfile.WriteError(ex.toString());
      validationReport = new ValidationReport(ex.toString());
    }

    Logfile.WriteCompleted(
        logLevel,
        STR_ClassName,
        methodName,
        String.format(
            STRLOG_Accepted_arg,
            (validationReport != null) ? validationReport.isAccepted() : false));

    return validationReport;
  }
Esempio n. 2
0
  /**
   * Validate XML data from reader using specified grammar with Jing.
   *
   * @param stream XML input document.
   * @param grammarUrl User supplied path to grammar.
   * @return Validation report containing all validation info.
   */
  public ValidationReport validateJing(InputStream stream, String grammarUrl) {

    ValidationReport report = new ValidationReport();
    try {
      report.start();

      // Setup validation properties. see Jing interface
      PropertyMapBuilder properties = new PropertyMapBuilder();
      ValidateProperty.ERROR_HANDLER.put(properties, report);

      // Copied from Jing code ; the Compact syntax seem to have a different
      // Schema reader. To be investigated.
      // http://www.thaiopensource.com/relaxng/api/jing/index.html
      SchemaReader schemaReader =
          grammarUrl.endsWith(".rnc") ? CompactSchemaReader.getInstance() : null;

      // Setup driver
      ValidationDriver driver = new ValidationDriver(properties.toPropertyMap(), schemaReader);

      // Load schema
      driver.loadSchema(new InputSource(grammarUrl));

      // Validate XML instance
      driver.validate(new InputSource(stream));

    } catch (ExistIOException ex) {
      logger.error(ex.getCause());
      report.setThrowable(ex.getCause());

    } catch (Exception ex) {
      logger.debug(ex);
      report.setThrowable(ex);

    } finally {
      report.stop();
    }
    return report;
  }
  /**
   * @param experimentId
   * @param sbName
   * @param xmlSpecification
   * @param userGroup
   * @param priorityHint
   * @return
   */
  public synchronized SubmissionReport Submit(
      int experimentId,
      String sbName,
      String xmlSpecification,
      String userGroup,
      int priorityHint) {
    final String methodName = "Submit";
    Logfile.WriteCalled(
        logLevel,
        STR_ClassName,
        methodName,
        String.format(STRLOG_ExperimentIdSbName_arg2, experimentId, sbName));

    SubmissionReport submissionReport = new SubmissionReport(experimentId);

    /*
     * Validate the experiment specification before submitting
     */
    ValidationReport validationReport = this.Validate(xmlSpecification, userGroup);
    if (validationReport.isAccepted() == true) {
      /*
       * Specification is valid, create an instance of the experiment
       */
      LabExperimentInfo labExperimentInfo = new LabExperimentInfo(experimentId, sbName);
      labExperimentInfo.setXmlSpecification(xmlSpecification);
      labExperimentInfo.setUserGroup(userGroup);
      labExperimentInfo.setPriorityHint(priorityHint);
      labExperimentInfo.setEstimatedExecTime((int) validationReport.getEstRuntime());

      /*
       * Add the experiment to the queue
       */
      try {
        QueuedExperimentInfo queuedExperimentInfo =
            this.labManagement.getExperimentQueueDB().Enqueue(labExperimentInfo);
        if (queuedExperimentInfo == null) {
          throw new RuntimeException(STRERR_FailedToEnqueueExperiment);
        }

        /*
         * Update submission report current queue length and wait time
         */
        WaitEstimate waitEstimate = new WaitEstimate();
        waitEstimate.setEffectiveQueueLength(queuedExperimentInfo.getQueueLength());
        waitEstimate.setEstWait(queuedExperimentInfo.getWaitTime() + this.GetMinRemainingRuntime());
        submissionReport.setWaitEstimate(waitEstimate);

        /*
         * Update the statistics with revised wait estimate
         */
        queuedExperimentInfo.setWaitTime((int) waitEstimate.getEstWait());
        this.labManagement.getExperimentStatisticsDB().Submitted(queuedExperimentInfo);

        /*
         * Tell lab experiment manager thread that an experiment has been submitted
         */
        this.labManagement.getSignalSubmitted().Notify();
      } catch (Exception ex) {
        validationReport = new ValidationReport(ex.getMessage());
      }
    }

    submissionReport.setValidationReport(validationReport);

    Logfile.WriteCompleted(
        logLevel,
        STR_ClassName,
        methodName,
        String.format(STRLOG_Accepted_arg, submissionReport.getValidationReport().isAccepted()));

    return submissionReport;
  }
Esempio n. 4
0
 public void delete() {
   if (_object instanceof FlexoObservable) {
     ((FlexoObservable) _object).deleteObserver(this);
   }
   _validationReport.removeFromValidationIssues(this);
 }
Esempio n. 5
0
  /**
   * Validate XML data from reader using specified grammar.
   *
   * @param grammarUrl User supplied path to grammar.
   * @param stream XML input.
   * @return Validation report containing all validation info.
   */
  public ValidationReport validateParse(InputStream stream, String grammarUrl) {

    logger.debug("Start validation.");

    ValidationReport report = new ValidationReport();
    ValidationContentHandler contenthandler = new ValidationContentHandler();

    try {

      XMLReader xmlReader = getXMLReader(contenthandler, report);

      if (grammarUrl == null) {

        // Scenario 1 : no params - use system catalog
        logger.debug("Validation using system catalog.");
        xmlReader.setProperty(
            XMLReaderObjectFactory.APACHE_PROPERTIES_ENTITYRESOLVER, systemCatalogResolver);

      } else if (grammarUrl.endsWith(".xml")) {

        // Scenario 2 : path to catalog (xml)
        logger.debug("Validation using user specified catalog '" + grammarUrl + "'.");
        eXistXMLCatalogResolver resolver = new eXistXMLCatalogResolver();
        resolver.setCatalogList(new String[] {grammarUrl});
        xmlReader.setProperty(XMLReaderObjectFactory.APACHE_PROPERTIES_ENTITYRESOLVER, resolver);

      } else if (grammarUrl.endsWith("/")) {

        // Scenario 3 : path to collection ("/"): search.
        logger.debug("Validation using searched grammar, start from '" + grammarUrl + "'.");
        SearchResourceResolver resolver = new SearchResourceResolver(grammarUrl, brokerPool);
        xmlReader.setProperty(XMLReaderObjectFactory.APACHE_PROPERTIES_ENTITYRESOLVER, resolver);

      } else {

        // Scenario 4 : path to grammar (xsd, dtd) specified.
        logger.debug("Validation using specified grammar '" + grammarUrl + "'.");
        AnyUriResolver resolver = new AnyUriResolver(grammarUrl);
        xmlReader.setProperty(XMLReaderObjectFactory.APACHE_PROPERTIES_ENTITYRESOLVER, resolver);
      }

      logger.debug("Validation started.");
      report.start();
      InputSource source = new InputSource(stream);
      xmlReader.parse(source);
      logger.debug("Validation stopped.");

      report.stop();

      report.setNamespaceUri(contenthandler.getNamespaceUri());

      if (!report.isValid()) {
        logger.debug("Document is not valid.");
      }

    } catch (ExistIOException ex) {
      logger.error(ex.getCause());
      report.setThrowable(ex.getCause());

    } catch (Exception ex) {
      logger.error(ex);
      report.setThrowable(ex);

    } finally {
      report.stop();

      logger.debug("Validation performed in " + report.getValidationDuration() + " msec.");
    }

    return report;
  }
Esempio n. 6
0
 public ValidationException(ValidationReport report) {
   super(report.getMessage() != null ? report.getMessage() : report.getIssues().toString());
   this.report = report;
 }
Esempio n. 7
0
 public ValidationException(Throwable cause) {
   super(cause);
   report = new ValidationReport();
   report.setValid(false);
 }
Esempio n. 8
0
 public ValidationException(String message, Throwable cause) {
   super(message, cause);
   report = new ValidationReport();
   report.setValid(false);
   report.setMessage(message);
 }
Esempio n. 9
0
 public ValidationException() {
   super();
   report = new ValidationReport();
   report.setValid(false);
 }