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

check examples and terms

parent ae422769
Loading
Loading
Loading
Loading
+91 −1
Original line number Original line Diff line number Diff line
@@ -25,7 +25,16 @@
 */
 */
package fr.emse.gitlab.saref;
package fr.emse.gitlab.saref;


import java.nio.file.FileSystems;
import java.nio.file.PathMatcher;
import java.util.ResourceBundle;
import java.util.ResourceBundle;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

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


/**
/**
*
*
@@ -34,6 +43,9 @@ import java.util.ResourceBundle;
*/
*/
public class SAREF {
public class SAREF {


	public static final PathMatcher TTL_MATCHER = FileSystems.getDefault().getPathMatcher("glob:**/*.ttl");
	public static final PathMatcher CSV_MATCHER = FileSystems.getDefault().getPathMatcher("glob:**/*.csv");

	private final static ResourceBundle BUNDLE = ResourceBundle.getBundle("messages/SAREF");
	private final static ResourceBundle BUNDLE = ResourceBundle.getBundle("messages/SAREF");
	public final static String BASE = "https://saref.etsi.org/";
	public final static String BASE = "https://saref.etsi.org/";
	public final static String FORGE = "https://forge.etsi.org/rep/SAREF/";
	public final static String FORGE = "https://forge.etsi.org/rep/SAREF/";
@@ -46,6 +58,84 @@ public class SAREF {
	
	
	public static final String NAME_SITE = "site";
	public static final String NAME_SITE = "site";
	
	
	// project acronym
	public static final String REGEX_ACRONYM_VAR = "acronym";
	public static final String REGEX_ACRONYM = String.format("(?<%s>[a-z]{4})", REGEX_ACRONYM_VAR);

	// project name
	public static final String REGEX_NAME_EXTENSION = "saref4" + REGEX_ACRONYM;
	public static final String REGEX_NAME_PROJECT = String.format("(%s|%s)", REGEX_NAME_EXTENSION,
			SAREFCore.INSTANCE.getRepositoryName());

	// project paths
	public static final String REGEX_PATH_CORE = "core";
	public static final String REGEX_PATH_EXTENSION = "saref4" + REGEX_ACRONYM;
	public static final String REGEX_PATH_PROJECT = String.format("(%s|%s)", REGEX_PATH_CORE, REGEX_PATH_EXTENSION);

	// project version
	public static final String REGEX_VERSION_MAJOR_VAR = "major";
	public static final String REGEX_VERSION_MINOR_VAR = "minor";
	public static final String REGEX_VERSION_PATCH_VAR = "patch";
	public static final String REGEX_VERSION_NUMBER = String.format("v(?<%s>[0-9]+)\\.(?<%s>[0-9]+)\\.(?<%s>[0-9]+)", REGEX_VERSION_MAJOR_VAR, REGEX_VERSION_MINOR_VAR, REGEX_VERSION_PATCH_VAR);

	// project version prefix, namespace, ontology IRI, ontology version IRI,
	public static final String REGEX_CORE_PREFIX = "saref";
	public static final String REGEX_EXTENSION_PREFIX = "s4" + REGEX_ACRONYM;

	public static final String REGEX_ONTOLOGY_IRI = String.format("^%s%s/$", BASE, REGEX_PATH_PROJECT);
	public static final String REGEX_ONTOLOGY_VERSION_IRI = String.format("^%s%s/%s/$", BASE, REGEX_PATH_PROJECT,
			REGEX_VERSION_NUMBER);

	// example
	public static final String REGEX_EXAMPLE_NAME_VAR = "examplename";
	public static final String REGEX_EXAMPLE_NAME = String.format("(?<%s>([^/]+))", REGEX_EXAMPLE_NAME_VAR);
	public static final String REGEX_EXAMPLE_FILE_NAME = String.format("^(?<%s>([^/]+))\\.ttl$", REGEX_EXAMPLE_NAME_VAR);

	// example namespace, IRI
	public static final String REGEX_EXAMPLE_IRI = String.format("^%s%s/%s/example/%s#$", BASE, REGEX_PATH_PROJECT,
			REGEX_VERSION_NUMBER, REGEX_EXAMPLE_NAME);
	
	// terms
	public static final String REGEX_TERM_NAME_VAR = "localName";
	public static final String REGEX_TERM_NAME = String.format("(?<%s>[^/]+)", REGEX_TERM_NAME_VAR);
	public static final String REGEX_TERM = String.format("^%s%s/%s$", BASE, REGEX_PATH_PROJECT, REGEX_TERM_NAME);
	
	

	public static SAREFProject extractProject(String uri) {
		final Matcher matcher = Pattern.compile(String.format("^%s%s/", BASE, REGEX_PATH_PROJECT))
				.matcher(uri);
		if (!matcher.find()) {
			return null;
		}
		final String acronym = matcher.group(REGEX_ACRONYM_VAR);
		if (acronym == null) {
			return SAREFCore.INSTANCE;
		} else {
			return new SAREFExtension(acronym);
		}
	}

	public static SAREFVersionName extractVersionName(String uri) {
		final Matcher matcher = Pattern.compile(String.format("^%s%s/%s/", BASE, REGEX_PATH_PROJECT,
				REGEX_VERSION_NUMBER)).matcher(uri);
		if (!matcher.find()) {
			return null;
		}
		int major = Integer.parseInt(matcher.group(REGEX_VERSION_MAJOR_VAR));
		int minor = Integer.parseInt(matcher.group(REGEX_VERSION_MINOR_VAR));
		int patch = Integer.parseInt(matcher.group(REGEX_VERSION_PATCH_VAR));
		return new SAREFVersionName(major, minor, patch);
	}

	public static String extractExampleName(String uri) {
		final Matcher matcher = Pattern.compile(REGEX_EXAMPLE_IRI).matcher(uri);
		if (!matcher.find()) {
			return null;
		}
		return matcher.group(REGEX_EXAMPLE_NAME_VAR);
	}

	public static <T> String getMessage(String key, Object... args) {
	public static <T> String getMessage(String key, Object... args) {
		String msg = BUNDLE.getString(key);
		String msg = BUNDLE.getString(key);
		if (args != null) {
		if (args != null) {
+2 −0
Original line number Original line Diff line number Diff line
@@ -127,7 +127,9 @@ public class SAREFPipeline {
			siteManager.prepareSite();
			siteManager.prepareSite();
			
			
			sourcesManager = new SourcesManager(this, logger);
			sourcesManager = new SourcesManager(this, logger);
			sourcesManager.initTargetRepositoryManager();
			sourcesManager.fetchRepositories();
			sourcesManager.fetchRepositories();
			sourcesManager.loadRepositories();
			sourcesManager.checkClauses();
			sourcesManager.checkClauses();
			sourcesManager.checkTerms();
			sourcesManager.checkTerms();
			sourcesManager.generateSite();
			sourcesManager.generateSite();
+4 −6
Original line number Original line Diff line number Diff line
@@ -27,13 +27,12 @@ package fr.emse.gitlab.saref.checkers;


import java.io.File;
import java.io.File;
import java.io.IOException;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.util.Optional;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Collectors;


import fr.emse.gitlab.saref.SAREF;
import fr.emse.gitlab.saref.SAREFPipelineException;
import fr.emse.gitlab.saref.SAREFPipelineException;
import fr.emse.gitlab.saref.managers.RepositoryManager;
import fr.emse.gitlab.saref.managers.RepositoryManager;


@@ -43,7 +42,6 @@ import fr.emse.gitlab.saref.managers.RepositoryManager;
 */
 */
public class Clause_9_3_Checker extends AbstractClauseChecker {
public class Clause_9_3_Checker extends AbstractClauseChecker {


	private static final PathMatcher csvMatcher = FileSystems.getDefault().getPathMatcher("glob:**/*.csv");
	private static final String FIRST_LINE = "Id;Category;Requirement";
	private static final String FIRST_LINE = "Id;Category;Requirement";


	private static enum MESSAGE {
	private static enum MESSAGE {
@@ -82,7 +80,7 @@ public class Clause_9_3_Checker extends AbstractClauseChecker {


		String nonCsv = Files.walk(path, 1).filter(p -> {
		String nonCsv = Files.walk(path, 1).filter(p -> {
			try {
			try {
				return p.toFile().isFile() && !csvMatcher.matches(p) && !p.toFile().getName().startsWith(".");
				return p.toFile().isFile() && !SAREF.CSV_MATCHER.matches(p) && !p.toFile().getName().startsWith(".");
			} catch (Exception ex) {
			} catch (Exception ex) {
				return false;
				return false;
			}
			}
@@ -92,7 +90,7 @@ public class Clause_9_3_Checker extends AbstractClauseChecker {
		}
		}
		
		
		boolean containsFile = Files.walk(path, 1).anyMatch(p -> {
		boolean containsFile = Files.walk(path, 1).anyMatch(p -> {
			return csvMatcher.matches(p);
			return SAREF.CSV_MATCHER.matches(p);
		});
		});
		if (!containsFile) {
		if (!containsFile) {
			logWarning(getMessage(MESSAGE.missing));
			logWarning(getMessage(MESSAGE.missing));
@@ -101,7 +99,7 @@ public class Clause_9_3_Checker extends AbstractClauseChecker {


	private void checkFirstLine(Path path) throws IOException {
	private void checkFirstLine(Path path) throws IOException {
		Files.walk(path).filter(p -> {
		Files.walk(path).filter(p -> {
			return csvMatcher.matches(p);
			return SAREF.CSV_MATCHER.matches(p);
		}).forEach(p -> {
		}).forEach(p -> {
			Optional<String> firstLine;
			Optional<String> firstLine;
			try {
			try {
+0 −27
Original line number Original line Diff line number Diff line
@@ -26,17 +26,9 @@
package fr.emse.gitlab.saref.checkers;
package fr.emse.gitlab.saref.checkers;


import java.io.File;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.MalformedInputException;
import java.nio.file.Files;
import java.nio.file.Files;


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

import fr.emse.gitlab.saref.SAREF;
import fr.emse.gitlab.saref.SAREFPipelineException;
import fr.emse.gitlab.saref.SAREFPipelineException;
import fr.emse.gitlab.saref.managers.RepositoryManager;
import fr.emse.gitlab.saref.managers.RepositoryManager;
import fr.emse.gitlab.saref.utils.Languages;
import fr.emse.gitlab.saref.utils.Languages;
@@ -73,25 +65,6 @@ public class Clause_9_4_1_Checker extends AbstractClauseChecker {
			logError(msg);
			logError(msg);
			throw new SAREFPipelineException(msg);
			throw new SAREFPipelineException(msg);
		}
		}
		try (FileInputStream input = new FileInputStream(file)) {
			version.getModel().read(input, SAREF.BASE, Lang.TTL.getLabel());
		} catch (Exception ex) {
			if (ex instanceof RuntimeIOException && ex.getCause() instanceof MalformedInputException) {
				version.getModel().removeAll();
				try (InputStreamReader input2 = new InputStreamReader(new FileInputStream(file),
						Charset.defaultCharset())) {
					version.getModel().read(input2, SAREF.BASE, Lang.TTL.getLabel());
				} catch (Exception ex2) {
					String msg = getMessage(MESSAGE.turtle);
					logError(msg, ex2);
					throw new SAREFPipelineException(msg, ex2);
				}
			} else {
				String msg = getMessage(MESSAGE.turtle);
				logError(msg, ex);
				throw new SAREFPipelineException(msg, ex);
			}
		}
	}
	}


}
}
+3 −3
Original line number Original line Diff line number Diff line
@@ -30,9 +30,9 @@ 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 fr.emse.gitlab.saref.SAREF;
import fr.emse.gitlab.saref.SAREFPipelineException;
import fr.emse.gitlab.saref.SAREFPipelineException;
import fr.emse.gitlab.saref.entities.SAREFExtension;
import fr.emse.gitlab.saref.entities.SAREFExtension;
import fr.emse.gitlab.saref.entities.SAREFProject;
import fr.emse.gitlab.saref.managers.RepositoryManager;
import fr.emse.gitlab.saref.managers.RepositoryManager;


/**
/**
@@ -41,7 +41,7 @@ import fr.emse.gitlab.saref.managers.RepositoryManager;
 */
 */
public class Clause_9_4_2_Checker extends AbstractClauseChecker {
public class Clause_9_4_2_Checker extends AbstractClauseChecker {


	private final static Pattern PATTERN_PREFIX = Pattern.compile(SAREFProject.REGEX_EXTENSION_PREFIX);
	private final static Pattern PATTERN_PREFIX = Pattern.compile(SAREF.REGEX_EXTENSION_PREFIX);


	private static final Map<String, String> PREFIXES = new HashMap<String, String>();
	private static final Map<String, String> PREFIXES = new HashMap<String, String>();
	static {
	static {
@@ -78,7 +78,7 @@ public class Clause_9_4_2_Checker extends AbstractClauseChecker {
		for (String s : prefixes.keySet()) {
		for (String s : prefixes.keySet()) {
			Matcher m = PATTERN_PREFIX.matcher(s);
			Matcher m = PATTERN_PREFIX.matcher(s);
			if (m.matches()) {
			if (m.matches()) {
				String acronym = m.group(SAREFProject.REGEX_ACRONYM_VAR);
				String acronym = m.group(SAREF.REGEX_ACRONYM_VAR);
				String expected = new SAREFExtension(acronym).getNamespace();
				String expected = new SAREFExtension(acronym).getNamespace();
				if(!prefixes.get(s).equals(expected)) {
				if(!prefixes.get(s).equals(expected)) {
					logError(getMessage(MESSAGE.different, s, expected, prefixes.get(s)));
					logError(getMessage(MESSAGE.different, s, expected, prefixes.get(s)));
Loading