Main.java 4.95 KB
Newer Older
package fr.emse.gitlab.saref;

import static fr.emse.gitlab.saref.CMDConfigurations.*;

import java.awt.Desktop;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringWriter;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
import java.util.Set;

import javax.net.ssl.HttpsURLConnection;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.ParseException;
import org.apache.commons.io.FileUtils;
import org.apache.jena.query.Dataset;
import org.apache.log4j.Layout;
import org.apache.log4j.PatternLayout;
import org.semanticweb.owlapi.model.OWLOntologyIRIMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

import fr.emse.gitlab.saref.entities.git.Repository;
import fr.emse.gitlab.saref.entities.git.Repositories;
import fr.emse.gitlab.saref.entities.tests.TestSuites;
import fr.emse.gitlab.saref.jobs.CreateDataset;
import fr.emse.gitlab.saref.jobs.JobRunner;
import fr.emse.gitlab.saref.jobs.ReadRepositories;
import fr.emse.gitlab.saref.jobs.WriteRDFFiles;
import fr.emse.gitlab.saref.jobs.CheckOWLProfile;
import fr.emse.gitlab.saref.jobs.CheckRepositoryStructure;
import fr.emse.gitlab.saref.jobs.CheckShapes;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
import fr.emse.gitlab.saref.jobs.CopyStaticFiles;

public class Main {

	static final Logger LOG = LoggerFactory.getLogger(Main.class);
	private static final Layout LAYOUT = new PatternLayout("%d{mm:ss,SSS} %t %-5p %c:%L - %m%n");
	private static final org.apache.log4j.Logger ROOT_LOGGER = org.apache.log4j.Logger.getRootLogger();

	private static TestSuites testSuites = new TestSuites();
	private static File directory;
	private static File target;
	private static boolean openBrowser = false;

	public static void main(String[] args)
			throws IOException, InterruptedException, URISyntaxException, JAXBException, ParseException {
		CommandLine cl = CMDConfigurations.parseArguments(args);
		if (cl.getOptions().length == 0 || cl.hasOption(ARG_HELP)) {
			CMDConfigurations.displayHelp();
			return;
		}
		if (cl.hasOption(ARG_INCLUDE_MASTER)) {
			Constants.INCLUDE_MASTER = true;
		}
		if (cl.hasOption(ARG_INCLUDE_ALL)) {
			Constants.INCLUDE_MASTER = true;
			Constants.INCLUDE_ALL = true;
		}
		if (cl.hasOption(ARG_PRODUCTION)) {
			if(cl.hasOption(ARG_INCLUDE_MASTER) || cl.hasOption(ARG_INCLUDE_ALL)) {
				throw new RuntimeException("Option --production is incompatible with options --master or --all ");
			}
			Constants.PRODUCTION = true;
		}
		String dirName = cl.getOptionValue(ARG_DIRECTORY, ARG_DIRECTORY_DEFAULT);
		if (dirName.equals("")) {
			dirName = ARG_DIRECTORY_DEFAULT;
		}

		directory = new File(dirName).getAbsoluteFile();

		target = new File(directory, Constants.TARGET_DIR);
		FileUtils.forceMkdir(target);

		File logFile = new File(directory, Constants.LOG_FILE_NAME);
		ROOT_LOGGER.addAppender(new org.apache.log4j.RollingFileAppender(LAYOUT, logFile.getAbsolutePath(), false));

		LOG.info("Starting pipeline");

		doJob(new CheckRepositoryStructure(directory));
Maxime Lefrançois's avatar
Maxime Lefrançois committed
//		doJob(new CheckShapes(directory));
//		Repositories repositories = doJob(new ReadRepositories(directory));
//		Repositories repositories = new Repositories();
//		Dataset dataset = doJob(new CreateDataset(directory, repositories));
//		doJob(new CopyStaticFiles(directory));
//		Set<OWLOntologyIRIMapper> mappers = doJob(new WriteRDFFiles(directory, dataset));
//		doJob(new CheckOWLProfile(directory, mappers));
		reportAndExit(0);
	}

	private static void reportAndExit(int code) {
		try {
			File report = new File(target, "report_output.xml");
			JAXBContext jaxbContext = JAXBContext.newInstance(TestSuites.class);
			Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
			jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
			jaxbMarshaller.marshal(testSuites, report);
			jaxbMarshaller.marshal(testSuites, System.out);
			final StringWriter sw = new StringWriter();
			jaxbMarshaller.marshal(testSuites, sw);

			if (openBrowser) {
				if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
					Desktop.getDesktop().browse(new URI(
							Constants.BASE + "report.html?report=" + URLEncoder.encode(sw.toString(), "UTF-8")));
				}
			}
		} catch (JAXBException | URISyntaxException | IOException ex) {
			LOG.error("Exception:", ex);
			ex.printStackTrace();
		}
		System.exit(code);
	}

	private static <T> T doJob(JobRunner<T> checker) {
		T result = checker.doJob(testSuites);
		if (testSuites.getErrors() > 0) {
			reportAndExit(-1);
		}
		return result;
	}

}