Commit 862907e9 authored by Maxime Lefrançois's avatar Maxime Lefrançois
Browse files

guess versionname from versionIRI metadata

parent ddec1f0f
Loading
Loading
Loading
Loading
+32 −0
Original line number Original line Diff line number Diff line
@@ -25,14 +25,24 @@
 */
 */
package fr.emse.gitlab.saref;
package fr.emse.gitlab.saref;


import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.MalformedInputException;
import java.nio.file.FileSystems;
import java.nio.file.FileSystems;
import java.nio.file.PathMatcher;
import java.nio.file.PathMatcher;
import java.util.ResourceBundle;
import java.util.ResourceBundle;
import java.util.regex.Matcher;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.Pattern;


import org.apache.jena.atlas.RuntimeIOException;
import org.apache.jena.riot.Lang;
import org.slf4j.Logger;

import fr.emse.gitlab.saref.entities.SAREFCore;
import fr.emse.gitlab.saref.entities.SAREFCore;
import fr.emse.gitlab.saref.entities.SAREFExtension;
import fr.emse.gitlab.saref.entities.SAREFExtension;
import fr.emse.gitlab.saref.entities.SAREFNamedGraph;
import fr.emse.gitlab.saref.entities.SAREFProject;
import fr.emse.gitlab.saref.entities.SAREFProject;
import fr.emse.gitlab.saref.entities.SAREFVersionName;
import fr.emse.gitlab.saref.entities.SAREFVersionName;


@@ -143,4 +153,26 @@ public class SAREF {
		}
		}
		return msg;
		return msg;
	}
	}
	

	public static void loadModel(SAREFNamedGraph namedGraph, File file, Logger logger) {
		try (FileInputStream input = new FileInputStream(file)) {
			namedGraph.getModel().read(input, SAREF.BASE, Lang.TTL.getLabel());
		} catch (Exception ex) {
			if (ex instanceof RuntimeIOException && ex.getCause() instanceof MalformedInputException) {
				namedGraph.getModel().removeAll();
				try (InputStreamReader input2 = new InputStreamReader(new FileInputStream(file),
						Charset.defaultCharset())) {
					namedGraph.getModel().read(input2, SAREF.BASE, Lang.TTL.getLabel());
				} catch (Exception ex2) {
					namedGraph.getModel().removeAll();
					String msg = getMessage("turtle", namedGraph.getIRI());
					logger.error(msg, ex2);
				}
			} else {
				String msg = getMessage("turtle", namedGraph.getIRI());
				logger.error(msg, ex);
			}
		}
	}
}
}
+4 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,9 @@ import java.io.IOException;
import java.util.Set;
import java.util.Set;
import java.util.function.Supplier;
import java.util.function.Supplier;


import org.apache.jena.vocabulary.OWL;
import org.apache.jena.vocabulary.OWL2;
import org.apache.jena.vocabulary.RDF;
import org.semanticweb.HermiT.ReasonerFactory;
import org.semanticweb.HermiT.ReasonerFactory;
import org.semanticweb.owl.explanation.api.Explanation;
import org.semanticweb.owl.explanation.api.Explanation;
import org.semanticweb.owl.explanation.api.ExplanationGenerator;
import org.semanticweb.owl.explanation.api.ExplanationGenerator;
@@ -65,6 +68,7 @@ import fr.emse.gitlab.saref.SAREFPipeline;
import fr.emse.gitlab.saref.SAREFPipeline.Mode;
import fr.emse.gitlab.saref.SAREFPipeline.Mode;
import fr.emse.gitlab.saref.entities.SAREFExample;
import fr.emse.gitlab.saref.entities.SAREFExample;
import fr.emse.gitlab.saref.entities.SAREFVersion;
import fr.emse.gitlab.saref.entities.SAREFVersion;
import fr.emse.gitlab.saref.entities.SAREFVersionName;
import fr.emse.gitlab.saref.managers.parsers.JenaModelDocumentFormatFactory;
import fr.emse.gitlab.saref.managers.parsers.JenaModelDocumentFormatFactory;
import fr.emse.gitlab.saref.managers.parsers.SourceOntologyParser;
import fr.emse.gitlab.saref.managers.parsers.SourceOntologyParser;


+22 −2
Original line number Original line Diff line number Diff line
@@ -33,6 +33,7 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.Pattern;


import org.apache.jena.vocabulary.OWL2;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.ListBranchCommand.ListMode;
import org.eclipse.jgit.api.ListBranchCommand.ListMode;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.GitAPIException;
@@ -46,10 +47,12 @@ import fr.emse.gitlab.saref.SAREFPipeline.Mode;
import fr.emse.gitlab.saref.SAREFPipelineException;
import fr.emse.gitlab.saref.SAREFPipelineException;
import fr.emse.gitlab.saref.entities.SAREFCore;
import fr.emse.gitlab.saref.entities.SAREFCore;
import fr.emse.gitlab.saref.entities.SAREFExtension;
import fr.emse.gitlab.saref.entities.SAREFExtension;
import fr.emse.gitlab.saref.entities.SAREFNamedGraph;
import fr.emse.gitlab.saref.entities.SAREFProject;
import fr.emse.gitlab.saref.entities.SAREFProject;
import fr.emse.gitlab.saref.entities.SAREFRepository;
import fr.emse.gitlab.saref.entities.SAREFRepository;
import fr.emse.gitlab.saref.entities.SAREFVersion;
import fr.emse.gitlab.saref.entities.SAREFVersion;
import fr.emse.gitlab.saref.entities.SAREFVersionName;
import fr.emse.gitlab.saref.entities.SAREFVersionName;
import fr.emse.gitlab.saref.utils.Languages;


/**
/**
 * Reads the repository and all the branches
 * Reads the repository and all the branches
@@ -130,11 +133,15 @@ public class RepositoryFactory extends SAREFErrorLogger {
					final String msg = String.format(getMessage(MESSAGE.release_branch, originalBranch));
					final String msg = String.format(getMessage(MESSAGE.release_branch, originalBranch));
					errorLogger.warn(msg);
					errorLogger.warn(msg);
					throw new SAREFPipelineException(msg);
					throw new SAREFPipelineException(msg);
				} else if (isTarget) {
				} 
				SAREFVersionName vn = guessVersion(project, directory);
				if (isTarget && vn == null) {
					final String msg = getMessage(MESSAGE.develop_branch, originalBranch);
					final String msg = getMessage(MESSAGE.develop_branch, originalBranch);
					errorLogger.warn(msg);
					errorLogger.warn(msg);
				}
					originalVersionName = SAREFVersionName.DEFAULT;
					originalVersionName = SAREFVersionName.DEFAULT;
				} else {
					originalVersionName = vn; 
				}
			} else {
			} else {
				int major = Integer.parseInt(m.group(SAREF.REGEX_VERSION_MAJOR_VAR));
				int major = Integer.parseInt(m.group(SAREF.REGEX_VERSION_MAJOR_VAR));
				int minor = Integer.parseInt(m.group(SAREF.REGEX_VERSION_MINOR_VAR));
				int minor = Integer.parseInt(m.group(SAREF.REGEX_VERSION_MINOR_VAR));
@@ -158,6 +165,19 @@ public class RepositoryFactory extends SAREFErrorLogger {
		}
		}
	}
	}


	private SAREFVersionName guessVersion(SAREFProject project, File directory) {
		try {
			File ontologyDirectory = new File(directory, "ontology");
			File ontologyFile = new File(ontologyDirectory, project.getOntologyFileName(Languages.TEXT_TURTLE));
			SAREFNamedGraph namedGraph = new SAREFNamedGraph("null");
			SAREF.loadModel(namedGraph, ontologyFile, errorLogger);
			String uri = namedGraph.getModel().listObjectsOfProperty(OWL2.versionIRI).next().asResource().getURI();
			return SAREF.extractVersionName(uri);
		} catch (Exception ex) {
			return null;
		}
	}

	private void readVersions(Git git, SAREFRepository repository) throws GitAPIException {
	private void readVersions(Git git, SAREFRepository repository) throws GitAPIException {
		final List<Ref> allBranches;
		final List<Ref> allBranches;
		final Pattern pattern;
		final Pattern pattern;
+2 −24
Original line number Original line Diff line number Diff line
@@ -185,7 +185,7 @@ public class RepositoryManager extends SAREFErrorLogger {
		} else {
		} else {
			versionName = version.getVersionName().toString();
			versionName = version.getVersionName().toString();
		}
		}
		loadModel(version, ontologyFile, pipeline.getLogger(SAREF.getMessage("clause", repositoryName, versionName, "9.4.1")));
		SAREF.loadModel(version, ontologyFile, pipeline.getLogger(SAREF.getMessage("clause", repositoryName, versionName, "9.4.1")));
		forEachTerm(version.getModel(), (term) -> {
		forEachTerm(version.getModel(), (term) -> {
			if(term.getProject().equals(project)) {
			if(term.getProject().equals(project)) {
				version.definesTerm(term);
				version.definesTerm(term);
@@ -202,7 +202,7 @@ public class RepositoryManager extends SAREFErrorLogger {
			}).forEach(p -> {
			}).forEach(p -> {
				SAREFExample example = new SAREFExample(version, p);
				SAREFExample example = new SAREFExample(version, p);
				File exampleFile = p.toFile();			
				File exampleFile = p.toFile();			
				loadModel(example, exampleFile, pipeline.getLogger(SAREF.getMessage("clause_for", repositoryName, versionName, exampleFile, "9.6.1")));
				SAREF.loadModel(example, exampleFile, pipeline.getLogger(SAREF.getMessage("clause_for", repositoryName, versionName, exampleFile, "9.6.1")));
				version.getExamples().put(example.getName(), example);
				version.getExamples().put(example.getName(), example);
				forEachTerm(example.getModel(), (term) -> {
				forEachTerm(example.getModel(), (term) -> {
					example.exemplifiesTerm(term);
					example.exemplifiesTerm(term);
@@ -214,28 +214,6 @@ public class RepositoryManager extends SAREFErrorLogger {
		}
		}
	}
	}



	private void loadModel(SAREFNamedGraph namedGraph, File file, Logger logger) {
		try (FileInputStream input = new FileInputStream(file)) {
			namedGraph.getModel().read(input, SAREF.BASE, Lang.TTL.getLabel());
		} catch (Exception ex) {
			if (ex instanceof RuntimeIOException && ex.getCause() instanceof MalformedInputException) {
				namedGraph.getModel().removeAll();
				try (InputStreamReader input2 = new InputStreamReader(new FileInputStream(file),
						Charset.defaultCharset())) {
					namedGraph.getModel().read(input2, SAREF.BASE, Lang.TTL.getLabel());
				} catch (Exception ex2) {
					namedGraph.getModel().removeAll();
					String msg = getMessage(MESSAGE.turtle, namedGraph.getIRI());
					logger.error(msg, ex2);
				}
			} else {
				String msg = getMessage(MESSAGE.turtle, namedGraph.getIRI());
				logger.error(msg, ex);
			}
		}
	}

	private void forEachTerm(Model model, Consumer<SAREFTerm> consumer) {
	private void forEachTerm(Model model, Consumer<SAREFTerm> consumer) {
		model.listStatements().forEachRemaining(stmt -> {
		model.listStatements().forEachRemaining(stmt -> {
			Resource s = stmt.getSubject();
			Resource s = stmt.getSubject();
+0 −1
Original line number Original line Diff line number Diff line
reset=Error when reseting repository to original branch %s
reset=Error when reseting repository to original branch %s
checkout=Error when checking out version %s
checkout=Error when checking out version %s
turtle=The document %s shall contain the sources of an ontology in the Turtle 1.1 format. See detailed error below.
ioexception=Error while checking the `examples` directory for %s %s
ioexception=Error while checking the `examples` directory for %s %s
load_exception=Error while loading the repository %s
load_exception=Error while loading the repository %s
Loading