public VisitReport visit()

in taverna-beanshell-activity/src/main/java/org/apache/taverna/activities/beanshell/BeanshellActivityHealthChecker.java [45:103]


	public VisitReport visit(BeanshellActivity activity, List<Object> ancestors) {
		Object subject = (Processor) VisitReport.findAncestor(ancestors, Processor.class);
		if (subject == null) {
			// Fall back to using the activity itself as the subject of the reports
			subject = activity;
		}
		List<VisitReport> reports = new ArrayList<VisitReport>();

		String script = activity.getConfiguration().get("script").textValue();
		if (! script.trim().endsWith(";")) {
			/** Missing ; on last line is not allowed by Parser,
			 * but is allowed by Interpreter.eval() used at runtime
			 */
			script = script + ";";
		}
		Parser parser = new Parser(new StringReader(script));
		try {
			while (!parser.Line());
			reports.add(new VisitReport(HealthCheck.getInstance(), subject, "Script OK", HealthCheck.NO_PROBLEM, Status.OK));
		} catch (ParseException e) {
		    VisitReport report = new VisitReport(HealthCheck.getInstance(), subject ,e.getMessage(), HealthCheck.INVALID_SCRIPT, Status.SEVERE);
		    report.setProperty("exception", e);
		    reports.add(report);
		}

		// Check if we can find all the Beanshell's dependencies
		if (activity.getConfiguration().has("localDependency")) {
		LinkedHashSet<String> localDependencies = new LinkedHashSet<>();
		for (JsonNode localDependency : activity.getConfiguration().get("localDependency")) {
			localDependencies.add(localDependency.textValue());
		}

		String[] jarArray = activity.libDir.list(new FileExtFilter(".jar"));
		if (jarArray != null) {
		    List<String> jarFiles = Arrays.asList(jarArray); // URLs of all jars found in the lib directory
		    for (String jar : localDependencies) {
			if (jarFiles.contains(jar)){
			    localDependencies.remove(jar);
			}
		    }
		}
		if (localDependencies.isEmpty()){ // all dependencies found
			reports.add(new VisitReport(HealthCheck.getInstance(), subject, "Beanshell dependencies found", HealthCheck.NO_PROBLEM, Status.OK));
		}
		else{
			VisitReport vr = new VisitReport(HealthCheck.getInstance(), subject, "Beanshell dependencies missing", HealthCheck.MISSING_DEPENDENCY, Status.SEVERE);
			vr.setProperty("dependencies", localDependencies);
			vr.setProperty("directory", activity.libDir);
			reports.add(vr);
		}

		}
		Status status = VisitReport.getWorstStatus(reports);
		VisitReport report = new VisitReport(HealthCheck.getInstance(), subject, "Beanshell report", HealthCheck.NO_PROBLEM,
				status, reports);

		return report;

	}