package org.radargun.config; import java.io.File; import java.util.HashMap; import java.util.Map; import org.radargun.Version; import org.radargun.reporting.Reporter; import org.radargun.reporting.ReporterHelper; /** * Generates schemas for reporters * * @author Radim Vansa <rvansa@redhat.com> */ public class ReporterSchemaGenerator extends SchemaGenerator { protected static final String NAMESPACE_ROOT = "urn:radargun:reporters:"; protected final String reporterModule; protected final Map<String, Class<? extends Reporter>> reporters; public ReporterSchemaGenerator(String reporterModule, Map<String, Class<? extends Reporter>> reporters) { super(NAMESPACE_ROOT, String.format(NAMESPACE_ROOT + "%s:%s", reporterModule, Version.SCHEMA_VERSION), "reporter-"); this.reporterModule = reporterModule; this.reporters = reporters; } @Override protected String findDocumentation(Class<?> clazz) { return null; } @Override protected void generate() { createSchemaElement(namespace); for (Map.Entry<String, Class<? extends Reporter>> reporter : reporters.entrySet()) { XmlType type = generateClass(reporter.getValue()); createReference(schema, reporter.getKey(), type.toString()); } } public static void main(String[] args) { if (args.length < 3 || args[0] == null || args[1] == null || args[2] == null) throw new IllegalArgumentException("No schema location directory specified!" + args); String schemaDirectory = args[0]; String reporterDirectory = args[1]; String reporterName = args[2]; Map<String, Class<? extends Reporter>> reporters = new HashMap<>(); ReporterHelper.loadReporters(new File(reporterDirectory), reporters); ReporterSchemaGenerator generator = new ReporterSchemaGenerator(reporterName, reporters); generator.generate(schemaDirectory, String.format("%s-%s.xsd", reporterName, Version.SCHEMA_VERSION)); } }