diff --git a/pom.xml b/pom.xml index 2f8144946afb9bfc1c07f19d588dc072f53600f0..95f7ed0c9822e004f0feecaf94189db2841606be 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,6 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 fr.mines-stetienne.ci.saref saref-pipeline @@ -25,9 +24,9 @@ - Omar Qawasmeh - omar.alqawasmeh@emse.fr - https://perso.univ-st-etienne.fr/alo09685/ + David Gnabasik + David.Gnabasik@emse.fr + https://www.linkedin.com/in/david-gnabasik-0056a0ba/ Ecole des mines de Saint-Etienne http://www.mines-stetienne.fr/ +1 @@ -46,14 +45,21 @@ + + + gitlab-maven + ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven + + + - ossrh - https://oss.sonatype.org/content/repositories/snapshots + gitlab-maven + ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ + gitlab-maven + ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven @@ -201,9 +207,26 @@ - org.apache.jena - jena-text - 3.13.0 + org.apache.jena + jena-text + 3.13.0 + + + jakarta.xml.bind + jakarta.xml.bind-api + 2.3.2 + + + + + com.sun.xml.ws + jaxws-rt + 2.3.2 + + + javax.jws + javax.jws-api + 1.1 @@ -222,10 +245,8 @@ - - + + fr.mines_stetienne.ci.saref.Main diff --git a/src/main/java/fr/mines_stetienne/ci/saref/CLIExecution.java b/src/main/java/fr/mines_stetienne/ci/saref/CLIExecution.java index f9c304d9074ce6442bbf94379f9f6b6e1c83ed0b..2c83bf93710c25aba4033ed0edddfc39aa5f6556 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/CLIExecution.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/CLIExecution.java @@ -63,10 +63,15 @@ public class CLIExecution implements SAREFCredentialsProvider { private static final String ARG_IGNORE_TERMS_LONG = "no-terms"; private static final String ARG_IGNORE_TERMS_MAN = "Do not generate the static portal for terms"; + private static final String ARG_IGNORE_DOCUMENTATION = "d"; + private static final String ARG_IGNORE_DOCUMENTATION_LONG = "no-documentation"; + private static final String ARG_IGNORE_DOCUMENTATION_MAN = "Do not check documentation"; + private static final Options OPTIONS = new Options() .addOption(ARG_IGNORE_EXAMPLES, ARG_IGNORE_EXAMPLES_LONG, false, ARG_IGNORE_EXAMPLES_MAN) .addOption(ARG_IGNORE_TERMS, ARG_IGNORE_TERMS_LONG, false, ARG_IGNORE_TERMS_MAN) - .addOption(ARG_IGNORE_SITE, ARG_IGNORE_SITE_LONG, false, ARG_IGNORE_SITE_MAN); + .addOption(ARG_IGNORE_SITE, ARG_IGNORE_SITE_LONG, false, ARG_IGNORE_SITE_MAN) + .addOption(ARG_IGNORE_DOCUMENTATION, ARG_IGNORE_DOCUMENTATION_LONG, false, ARG_IGNORE_DOCUMENTATION_MAN); private static final Console console = System.console(); @@ -79,6 +84,7 @@ public class CLIExecution implements SAREFCredentialsProvider { final boolean ignoreExamples; final boolean ignoreTerms; final boolean ignoreSite; + final boolean ignoreDocumentation; final File directory; try { @@ -129,8 +135,9 @@ public class CLIExecution implements SAREFCredentialsProvider { ignoreExamples = cl.hasOption(ARG_IGNORE_EXAMPLES); ignoreTerms = cl.hasOption(ARG_IGNORE_TERMS); ignoreSite = cl.hasOption(ARG_IGNORE_SITE); - - return new SAREFPipeline(this, directory, mode, ignoreExamples, ignoreTerms, ignoreSite); + ignoreDocumentation = cl.hasOption(ARG_IGNORE_DOCUMENTATION); + + return new SAREFPipeline(this, directory, mode, ignoreExamples, ignoreTerms, ignoreSite, ignoreDocumentation); } catch (IOException | ParseException ex) { LOG.debug("Exception while parsing arguments", ex); throw new RuntimeException(); diff --git a/src/main/java/fr/mines_stetienne/ci/saref/Main.java b/src/main/java/fr/mines_stetienne/ci/saref/Main.java index 95d53f4e0911a6f7251c0240e132600c5d7a2f06..687847d687ef7a9c384fb33df81ef83efc3d8457 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/Main.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/Main.java @@ -55,7 +55,7 @@ public class Main { try { CAN_BROWSE = Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE); - } catch (Exception ex) {} + } catch (Error | Exception ex) {} } private static final String CI_SERVER_HOST = System.getenv("CI_SERVER_HOST"); diff --git a/src/main/java/fr/mines_stetienne/ci/saref/SAREF.java b/src/main/java/fr/mines_stetienne/ci/saref/SAREF.java index fed88f749a9a5c52f2e1f7435e6e2c2db136c9e8..d0eb737de66185f116ac445b2c74c316fe2dadd4 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/SAREF.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/SAREF.java @@ -62,8 +62,7 @@ public class SAREF { public final static String LICENSE = "https://forge.etsi.org/etsi-software-license"; public final static String PUBLISHER = "https://www.etsi.org/"; - public static final String SAREF_PORTAL_STATIC_GIT = "https://gitlab.emse.fr/saref/saref-portal-static.git"; -// public static final String SAREF_PORTAL_STATIC_GIT = "https://forge.etsi.org/rep/SAREF/saref-portal-static.git"; // uncomment when the project is public + public static final String SAREF_PORTAL_STATIC_GIT = "https://labs.etsi.org/rep/saref/saref-portal.git"; public static final String LOGGER_BASE = "SAREF Pipeline: "; public static final String NAME_SITE = "site"; diff --git a/src/main/java/fr/mines_stetienne/ci/saref/SAREFPipeline.java b/src/main/java/fr/mines_stetienne/ci/saref/SAREFPipeline.java index 670457dd6509f53db1d1afe5d577bf23291f6d01..819e1823299e2e1c158a51a3201c4669d93687aa 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/SAREFPipeline.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/SAREFPipeline.java @@ -69,7 +69,8 @@ public class SAREFPipeline { public final boolean ignoreExamples; public final boolean ignoreTerms; public final boolean ignoreSite; - + public final boolean ignoreDocumentation; + private Logger logger; private DatasetManager datasetManager; private SiteManager siteManager; @@ -92,7 +93,7 @@ public class SAREFPipeline { return ontologyManager; } - public SAREFPipeline(SAREFCredentialsProvider credentialsProvider, File directory, Mode mode, boolean ignoreExamples, boolean ignoreTerms, boolean ignoreSite) { + public SAREFPipeline(SAREFCredentialsProvider credentialsProvider, File directory, Mode mode, boolean ignoreExamples, boolean ignoreTerms, boolean ignoreSite, boolean ignoreDocumentation) { this.credentialsProvider = credentialsProvider; this.directory = directory; targetDir = new File(directory, NAME_TARGET); @@ -100,6 +101,7 @@ public class SAREFPipeline { this.ignoreExamples = ignoreExamples; this.ignoreTerms = ignoreTerms; this.ignoreSite = ignoreSite; + this.ignoreDocumentation = ignoreDocumentation; } public TestSuites run() { diff --git a/src/main/java/fr/mines_stetienne/ci/saref/checkers/AbstractClauseChecker.java b/src/main/java/fr/mines_stetienne/ci/saref/checkers/AbstractClauseChecker.java index e223be3035d8fbc30274c705770cc7001e256daa..4ea4cbd3531e60dc3b1f9a648a201952e652f47a 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/checkers/AbstractClauseChecker.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/checkers/AbstractClauseChecker.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 ETSI + * Copyright 2024 ETSI * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -25,6 +25,8 @@ */ package fr.mines_stetienne.ci.saref.checkers; +import java.io.*; + import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -50,14 +52,14 @@ public abstract class AbstractClauseChecker extends AbstractChecker { } final String repositoryName = repositoryManager.getRepository().getName(); final String versionName; - if(repositoryManager.getCurrentVersionName()==null) { + if (repositoryManager.getCurrentVersionName() == null) { versionName = "SNAPSHOT"; } else { versionName = repositoryManager.getCurrentVersionName().toString(); } - + final String loggerName; - if(file == null) { + if (file == null) { loggerName = SAREF.getMessage(CLAUSE, repositoryName, versionName, clause); } else { loggerName = SAREF.getMessage(CLAUSE_FOR, repositoryName, versionName, file, clause); @@ -74,9 +76,57 @@ public abstract class AbstractClauseChecker extends AbstractChecker { } protected abstract void checkClause() throws SAREFPipelineException; - + public final void check() throws SAREFPipelineException { this.checkClause(); } -} + /** + * If the directory does not exist, create it. directoryPath can be relative or absolute. + * If the file does not exist, create it with the default contents. Creates a file of length=0 if fileContents is empty. + * + * @param directoryPath + * @param fileName + * @param fileContents + */ + public final void CreateFileInDirectoryWithContents(String directoryPath, String fileName, String[] fileContents) throws IOException { + File theDir = new File(directoryPath); + if (!theDir.exists()) { + try { + theDir.mkdirs(); + } catch (Exception se) { + throw new IOException("Unable to create directory " + directoryPath); + } + } + String fName = directoryPath + "/" + fileName; + File fout = new File(fName); // implicit bw.close(). + try (FileOutputStream fos = new FileOutputStream(fout); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));) { + for (String str : fileContents) { + bw.write(str); + bw.newLine(); + } + } catch (IOException e) { + throw new IOException("Unable to create file " + fName); + } + } + + public final int CountFilesInDirectory(String directoryPath) throws IOException { + int count = 0; + File theDir = new File(directoryPath); + if(theDir.exists()) { + try { + for (File file : theDir.listFiles()) { + if (file.isFile()) { + count++; + } + } + } catch (Exception se) { + throw new IOException("Unable to list directory " + directoryPath); + } + } else { + throw new IOException("Directory does not exist " + directoryPath); + } + return count; + } + +} \ No newline at end of file diff --git a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_3_Checker.java b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_3_Checker.java index b515f7c1bb07606e3dba70d3b2f68222823992af..e19375a2c4acefebbd84288b6f4cbd2112ca3e77 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_3_Checker.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_3_Checker.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 ETSI + * Copyright 2024 ETSI * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -69,7 +69,13 @@ public class Clause_9_3_Checker extends AbstractClauseChecker { public void checkClause() throws SAREFPipelineException { File dir = new File(repository.getDirectory(), "requirements"); if (!dir.isDirectory()) { - return; + //return; + try { + String[] lines = {FIRST_LINE}; + CreateFileInDirectoryWithContents("requirements", "requirements.csv", lines); + } catch (IOException ex) { + logError(getMessage(Clause_9_3_Checker.MESSAGE.ioexception)); + } } try { File file = new File(dir, "requirements.csv"); diff --git a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_4_2_Checker.java b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_4_2_Checker.java index 9f943a934c26a213981808c528695717df67af30..e3997efab591eef8e756066585f2e4eebbdb4e07 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_4_2_Checker.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_4_2_Checker.java @@ -53,6 +53,7 @@ public class Clause_9_4_2_Checker extends AbstractClauseChecker { PREFIXES.put("vann", "http://purl.org/vocab/vann/"); PREFIXES.put("voaf", "http://purl.org/vocommons/voaf#"); PREFIXES.put("schema", "http://schema.org/"); + PREFIXES.put("geo", "http://www.opengis.net/ont/geosparql#"); PREFIXES.put("saref", "https://saref.etsi.org/core/"); } diff --git a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_4_5_Checker.java b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_4_5_Checker.java index 3cb7810bb1024385845f96de7d52dfe056ff727a..f768e51c948f9a4be8000fee55a40dba04b72eb1 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_4_5_Checker.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_4_5_Checker.java @@ -30,7 +30,6 @@ import java.io.IOException; import java.net.SocketTimeoutException; import java.util.ArrayList; import java.util.Set; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import org.apache.jena.rdf.model.Model; @@ -84,11 +83,9 @@ public class Clause_9_4_5_Checker extends AbstractClauseChecker { } final OWLProfileReport report = new OWL2DLProfile().checkOntology(ontology); - report.getViolations().removeIf(v->{ - if(v instanceof UseOfDefinedDatatypeInDatatypeRestriction - || v instanceof UseOfDefinedDatatypeInLiteral - || v instanceof UseOfUndeclaredDatatype - || v instanceof UseOfUnknownDatatype) { + report.getViolations().removeIf(v -> { + if (v instanceof UseOfDefinedDatatypeInDatatypeRestriction || v instanceof UseOfDefinedDatatypeInLiteral + || v instanceof UseOfUndeclaredDatatype || v instanceof UseOfUnknownDatatype) { return true; } return false; @@ -129,7 +126,7 @@ public class Clause_9_4_5_Checker extends AbstractClauseChecker { } public void checkOops() throws Exception { - if(SAREF.IGNORE_OOPS) { + if (SAREF.IGNORE_OOPS) { return; } @@ -144,8 +141,6 @@ public class Clause_9_4_5_Checker extends AbstractClauseChecker { + "" + "" + "RDF/XML" + ""; - - Object[] arrayData = new Object[0]; try { @@ -159,92 +154,78 @@ public class Clause_9_4_5_Checker extends AbstractClauseChecker { Request request = new Request.Builder().url("http://oops.linkeddata.es/rest").method("POST", body) .addHeader("Content-Type", "application/xml").build(); - Response response; - - try{ - response = httpClient.newCall(request).execute(); - } - catch (SocketTimeoutException e){ - - httpClient = new OkHttpClient().newBuilder().readTimeout(10, TimeUnit.SECONDS).build(); + try (Response response = httpClient.newCall(request).execute();) { - try{ - response = httpClient.newCall(request).execute(); - } - catch (SocketTimeoutException f){ - httpClient = new OkHttpClient().newBuilder().readTimeout(20, TimeUnit.SECONDS).build(); - response = httpClient.newCall(request).execute(); + if (response.code() != 200) { + throw new SAREFPipelineException("response", "Unexpected response code " + response.code()); } - } - - - if (response.code() != 200) { - throw new SAREFPipelineException("response", "Unexpected response code " + response.code()); - } - String result = response.body().string(); - - Document doc = ThemisManager.convertStringToXMLDocument(result); - - NodeList nodeList = doc.getElementsByTagName("rdf:Description"); - - ArrayList oopsErrors = new ArrayList(); - for (int temp = 0; temp < nodeList.getLength(); temp++){ - org.w3c.dom.Node node = nodeList.item(temp); - if (node.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) { - Element element = (Element) node; - if (((Element) node).getElementsByTagName("oops:hasCode").item(0) != null) { - if (((Element) node).getElementsByTagName("oops:hasName").item(0) != null) { - String code = element.getElementsByTagName("oops:hasCode").item(0).getTextContent(); - String name = element.getElementsByTagName("oops:hasName").item(0).getTextContent(); - String description = element.getElementsByTagName("oops:hasDescription").item(0).getTextContent(); - String affected = ""; - NodeList affectedElements = element.getElementsByTagName("oops:hasAffectedElement"); - if (affectedElements != null) { - for (int k = 0; k < affectedElements.getLength(); k++) { - if (k == 0) { - affected += "\"" + affectedElements.item(k).getTextContent() + "\""; - } else { - affected += " ; \"" + affectedElements.item(k).getTextContent() + "\""; + String result = response.body().string(); + + Document doc = ThemisManager.convertStringToXMLDocument(result); + + NodeList nodeList = doc.getElementsByTagName("rdf:Description"); + + ArrayList oopsErrors = new ArrayList(); + for (int temp = 0; temp < nodeList.getLength(); temp++) { + org.w3c.dom.Node node = nodeList.item(temp); + if (node.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) { + Element element = (Element) node; + if (((Element) node).getElementsByTagName("oops:hasCode").item(0) != null) { + if (((Element) node).getElementsByTagName("oops:hasName").item(0) != null) { + String code = element.getElementsByTagName("oops:hasCode").item(0).getTextContent(); + String name = element.getElementsByTagName("oops:hasName").item(0).getTextContent(); + String description = element.getElementsByTagName("oops:hasDescription").item(0) + .getTextContent(); + String affected = ""; + NodeList affectedElements = element.getElementsByTagName("oops:hasAffectedElement"); + if (affectedElements != null) { + for (int k = 0; k < affectedElements.getLength(); k++) { + if (k == 0) { + affected += "\"" + affectedElements.item(k).getTextContent() + "\""; + } else { + affected += " ; \"" + affectedElements.item(k).getTextContent() + "\""; + } } } - } - - String oopsError = String.format("Code: %s, Name: %s, Description: %s, Affected Elements: %s", code, name, description, affected); - oopsErrors.add(oopsError); - } - else{ - String code = element.getElementsByTagName("oops:hasCode").item(0).getTextContent(); - String description = element.getElementsByTagName("oops:hasDescription").item(0).getTextContent(); - String affected = ""; - NodeList affectedElements = element.getElementsByTagName("oops:hasAffectedElement"); - if (affectedElements != null) { - for (int k = 0; k < affectedElements.getLength(); k++) { - if (k == 0) { - affected += "\"" + affectedElements.item(k).getTextContent() + "\""; - } else { - affected += " ; \"" + affectedElements.item(k).getTextContent() + "\""; + String oopsError = String.format( + "Code: %s, Name: %s, Description: %s, Affected Elements: %s", code, name, + description, affected); + oopsErrors.add(oopsError); + } else { + String code = element.getElementsByTagName("oops:hasCode").item(0).getTextContent(); + String description = element.getElementsByTagName("oops:hasDescription").item(0) + .getTextContent(); + String affected = ""; + NodeList affectedElements = element.getElementsByTagName("oops:hasAffectedElement"); + if (affectedElements != null) { + for (int k = 0; k < affectedElements.getLength(); k++) { + if (k == 0) { + affected += "\"" + affectedElements.item(k).getTextContent() + "\""; + } else { + affected += " ; \"" + affectedElements.item(k).getTextContent() + "\""; + } } } - } - - String oopsError = String.format("Code: %s, Description: %s, Affected Elements: %s", code, description, affected); - oopsErrors.add(oopsError); + String oopsError = String.format("Code: %s, Description: %s, Affected Elements: %s", + code, description, affected); + oopsErrors.add(oopsError); + } } - } + } } - } - if (!oopsErrors.isEmpty()) { - String data = oopsErrors.stream().map(e -> e.toString()) - .collect(Collectors.joining("\n- ", "\n\n- ", "\n\n")); - logWarning(getMessage(MESSAGE.oops, data)); + if (!oopsErrors.isEmpty()) { + String data = oopsErrors.stream().map(e -> e.toString()) + .collect(Collectors.joining("\n- ", "\n\n- ", "\n\n")); + logWarning(getMessage(MESSAGE.oops, data)); + } + } catch (SocketTimeoutException e) { + logWarning(getMessage(MESSAGE.oopsError), e); } - - } catch (IOException | SAREFPipelineException e) { logWarning(getMessage(MESSAGE.oopsError), e); } diff --git a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_5_Checker.java b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_5_Checker.java index 2eb4458eeb00ff9434c81628b5df4adbb7e6f7ae..d103e216a55cfe1c47814d8fe9c45860b35affc1 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_5_Checker.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_5_Checker.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 ETSI + * Copyright 2024 ETSI * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -56,6 +56,7 @@ import fr.mines_stetienne.ci.saref.managers.RepositoryManager; import fr.mines_stetienne.ci.saref.managers.ThemisManager; import fr.mines_stetienne.ci.saref.utils.Languages; import fr.mines_stetienne.ci.saref.vocabs.VTC; + import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -87,8 +88,15 @@ public class Clause_9_5_Checker extends AbstractClauseChecker { public void checkClause() throws SAREFPipelineException { File dir = new File(repository.getDirectory(), "tests"); if (!dir.isDirectory()) { - return; + //return; + try { + String[] lines = {FIRST_LINE}; + CreateFileInDirectoryWithContents("tests", "tests.csv", lines); + } catch (IOException ex) { + logError(getMessage(MESSAGE.ioexception)); + } } + try { File file = new File(dir, "tests.csv"); if (!file.exists()) { @@ -159,8 +167,7 @@ public class Clause_9_5_Checker extends AbstractClauseChecker { Request request = new Request.Builder().url("http://themis.linkeddata.es/rest/api/results").method("POST", body) .addHeader("accept", "application/json").addHeader("Content-Type", "application/json").build(); - try { - Response response = httpClient.newCall(request).execute(); + try (Response response = httpClient.newCall(request).execute();) { if (response.code() != 200) { throw new SAREFPipelineException("response", "Unexpected response code " + response.code()); } diff --git a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_6_Checker.java b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_6_Checker.java index d251672da6e9aa44f130e4355e2e054184f341e9..35140f6d657896bb8e340bd2e009b4992993a27c 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_6_Checker.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_6_Checker.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 ETSI + * Copyright 2024 ETSI * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -26,6 +26,7 @@ package fr.mines_stetienne.ci.saref.checkers; import java.io.File; +import java.io.IOException; import fr.mines_stetienne.ci.saref.SAREFPipelineException; import fr.mines_stetienne.ci.saref.entities.SAREFExample; @@ -36,7 +37,11 @@ import fr.mines_stetienne.ci.saref.managers.RepositoryManager; * */ public class Clause_9_6_Checker extends AbstractClauseChecker { - + + private static enum MESSAGE { + directories + }; + public Clause_9_6_Checker(RepositoryManager repositoryManager) { super(repositoryManager, Clause_9_6_Checker.class); } @@ -45,7 +50,35 @@ public class Clause_9_6_Checker extends AbstractClauseChecker { public void checkClause() throws SAREFPipelineException { File dir = new File(repository.getDirectory(), "examples"); if (!dir.isDirectory()) { - return; + //return; + try { + String[] lines = { + "@prefix dcterms: .", + "@prefix dctype: .", + "@prefix geo: .", + "@prefix geosp: .", + "@prefix owl: .", + "@prefix rdf: .", + "@prefix rdfs: .", + "@prefix saref: .", + "@prefix time: .", + "@prefix xsd: .", + "### CHANGE abcd !!! ", + "@prefix s4abcd: .", + "@prefix ex: .", + "", + " a dctype:Dataset ;", + "dcterms:license ;", + "dcterms:conformsTo ;", + "dcterms:conformsTo ;", + "dcterms:title \"SAREF4abcd example number 1.\"@en ;", + "dcterms:description \"SAREF4abcd example number 1.\"@en .", + "", + }; + CreateFileInDirectoryWithContents("examples", "example1.ttl", lines); + } catch (IOException ex) { + logError(getMessage(Clause_9_6_Checker.MESSAGE.directories)); + } } new Clause_9_6_1_Checker(repositoryManager).check(); diff --git a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_Checker.java b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_Checker.java index bf8267ac9a67a10938497c02201075cef1fb12fe..415f06ca2f5a3a4f626ff6af0b3ca60a7d8d03f0 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_Checker.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/checkers/Clause_9_Checker.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 ETSI + * Copyright 2024 ETSI * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -52,6 +52,9 @@ public class Clause_9_Checker extends AbstractClauseChecker { if(!pipeline.ignoreExamples) { new Clause_9_6_Checker(repositoryManager).check(); } + if(!pipeline.ignoreDocumentation) { + new Clause_9_7_Checker(repositoryManager).check(); + } } catch (SAREFPipelineException ex) { logError(getMessage(MESSAGE.error), ex); } diff --git a/src/main/java/fr/mines_stetienne/ci/saref/gui/FunctionalitiesPanel.java b/src/main/java/fr/mines_stetienne/ci/saref/gui/FunctionalitiesPanel.java index 60592168ed7a0a84a2a0b191e4f6b5327fec85c1..3bca727b823d68bf74b403f3c845bc0c96959e5e 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/gui/FunctionalitiesPanel.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/gui/FunctionalitiesPanel.java @@ -51,6 +51,7 @@ public class FunctionalitiesPanel extends JPanel { final JCheckBox ignoreSite; final JCheckBox ignoreExamples; final JCheckBox ignoreTerms; + final JCheckBox ignoreDocumentation; public FunctionalitiesPanel(MainFrame mainFrame) { super(); @@ -121,6 +122,7 @@ public class FunctionalitiesPanel extends JPanel { mainFrame.setIgnoreSite(ignoreSite.isSelected()); } }); + ignoreExamples = new JCheckBox(SAREF.getMessage("ignoreExamples"), false); ignoreExamples.setToolTipText(SAREF.getMessage("ignoreExamples_tooltip")); ignoreExamples.addActionListener(new ActionListener() { @@ -129,6 +131,7 @@ public class FunctionalitiesPanel extends JPanel { mainFrame.setIgnoreExamples(ignoreExamples.isSelected()); } }); + ignoreTerms = new JCheckBox(SAREF.getMessage("ignoreTerms"), false); ignoreTerms.setToolTipText(SAREF.getMessage("ignoreTerms_tooltip")); ignoreTerms.addActionListener(new ActionListener() { @@ -137,12 +140,23 @@ public class FunctionalitiesPanel extends JPanel { mainFrame.setIgnoreTerms(ignoreTerms.isSelected()); } }); + + ignoreDocumentation = new JCheckBox(SAREF.getMessage("ignoreDocumentation"), false); + ignoreDocumentation.setToolTipText(SAREF.getMessage("ignoreDocumentation_tooltip")); + ignoreDocumentation.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + mainFrame.setIgnoreDocumentation(ignoreDocumentation.isSelected()); + } + }); + JPanel panel3 = new JPanel(); panel3.setLayout(new BoxLayout(panel3, BoxLayout.Y_AXIS)); panel3.add(new JLabel(SAREF.getMessage("options"))); panel3.add(ignoreSite); panel3.add(ignoreExamples); panel3.add(ignoreTerms); + panel3.add(ignoreDocumentation); add(panel3); start = new JButton(SAREF.getMessage("run")); diff --git a/src/main/java/fr/mines_stetienne/ci/saref/gui/MainFrame.java b/src/main/java/fr/mines_stetienne/ci/saref/gui/MainFrame.java index 0dfdcdc903601c08ca4c54ae46c1c4a20169d23c..231f03eaa32084d98295713b12cff91901488fb1 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/gui/MainFrame.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/gui/MainFrame.java @@ -62,6 +62,7 @@ public class MainFrame extends JFrame implements SAREFCredentialsProvider { private boolean ignoreExamples = false; private boolean ignoreTerms = false; private boolean ignoreSite = false; + private boolean ignoreDocumentation = false; private final InfoPanel infoPanel = new InfoPanel(); private final FunctionalitiesPanel functionalitiesPanel = new FunctionalitiesPanel(this); @@ -108,6 +109,10 @@ public class MainFrame extends JFrame implements SAREFCredentialsProvider { public void setIgnoreTerms(boolean ignoreTerms) { this.ignoreTerms = ignoreTerms; } + + public void setIgnoreDocumentation(boolean ignoreDocumentation) { + this.ignoreDocumentation = ignoreDocumentation; + } private class FileChooserActionListener implements ActionListener { private final MainFrame mainFrame; @@ -140,7 +145,7 @@ public class MainFrame extends JFrame implements SAREFCredentialsProvider { @Override public void actionPerformed(ActionEvent e) { SAREFPipeline pipeline = new SAREFPipeline(mainFrame, directory, mode, ignoreExamples, ignoreTerms, - ignoreSite); + ignoreSite, ignoreDocumentation); consolePanel.clear(); TestSuites testSuites = pipeline.run(); if(pipeline.mode == Mode.CLEAN) { diff --git a/src/main/java/fr/mines_stetienne/ci/saref/managers/SiteManager.java b/src/main/java/fr/mines_stetienne/ci/saref/managers/SiteManager.java index eec7d25296aab723b5059c411dd39e0093a97ed6..aa2c38186bdf9351c7068c393e6c587a36e8aada 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/managers/SiteManager.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/managers/SiteManager.java @@ -202,7 +202,7 @@ public class SiteManager extends SAREFErrorLogger { public void generateHtaccess() { File htaccess = new File(siteDir, ".htaccess"); try (FileWriter writer = new FileWriter(htaccess)) { - writer.write("RewriteRule ^sources/(.*)$ https://forge.etsi.org/rep/SAREF/$1 [R=302]\n\n"); + writer.write("RewriteRule ^sources/(.*)$ https://labs.etsi.org/rep/saref/$1 [R=302]\n\n"); writer.write( "Header set Content-disposition \"expr=attachement; filename=%{resp:Content-Location}\" \"expr=%{resp:Content-Location} =~ /.(rdf|nt|n3)$/\"\n"); diff --git a/src/main/java/fr/mines_stetienne/ci/saref/managers/ThemisManager.java b/src/main/java/fr/mines_stetienne/ci/saref/managers/ThemisManager.java index c7ace42180e341a8b7044da8597fb4d284b4c4f3..1dc8cfc76bb6844b9d69caadf0690a037940e929 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/managers/ThemisManager.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/managers/ThemisManager.java @@ -38,16 +38,17 @@ public class ThemisManager { // Parser that produces DOM object trees from XML content DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // API to obtain DOM Document instance - try { + try(StringReader reader = new StringReader(xmlString)) { + // Create DocumentBuilder with default configuration DocumentBuilder builder = factory.newDocumentBuilder(); // Parse the content to Document object - Document doc = builder.parse(new InputSource(new StringReader(xmlString))); - + Document doc = builder.parse(new InputSource(reader)); + return doc; - } catch (Exception e) { - e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); } return null; } diff --git a/src/main/java/fr/mines_stetienne/ci/saref/managers/VersionSiteManager.java b/src/main/java/fr/mines_stetienne/ci/saref/managers/VersionSiteManager.java index 2fbb9ee3330db86eb04d18dfbf81ebe697df2266..7536c0d731ce70ff459f6381a6a321514bd582b7 100644 --- a/src/main/java/fr/mines_stetienne/ci/saref/managers/VersionSiteManager.java +++ b/src/main/java/fr/mines_stetienne/ci/saref/managers/VersionSiteManager.java @@ -100,6 +100,13 @@ public class VersionSiteManager extends SAREFRepositoryVersionErrorLogger { generateHTMLFile(example); } } + /*<< -PREFIX rdf: -PREFIX owl: -PREFIX dcterms: -PREFIX dc: -PREFIX fun: -PREFIX rdfs: -PREFIX skos: -PREFIX obo: - -TEMPLATE ( ?before, ?pathToStatic , ?isOntologyDocumentation ) { - -""" - - - - - - - { ?before } - - - - - - - - - - - { IF( ?isOntologyDocumentation , """""" , "" ) } - - - - - - - - - - - -""" - - -""" -
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
-
""" -} +PREFIX st: +PREFIX rdf: +PREFIX owl: +PREFIX dcterms: +PREFIX dc: +PREFIX fun: +PREFIX rdfs: +PREFIX skos: +PREFIX obo: + +TEMPLATE ( ?before, ?pathToStatic , ?isOntologyDocumentation ) { + +""" + + + + + + + { ?before } + + + + + + + + + + + { IF( ?isOntologyDocumentation , """""" , "" ) } + + + + + + + + + + + +""" + + +""" +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+
+
""" +} diff --git a/src/main/resources/themis/body.html b/src/main/resources/themis/body.html index 9d2e2f6e1ea2e6527d7843d11c7e4b9299da204c..03a35b120c3461ed445587a4cffa5c0f6a61a006 100644 --- a/src/main/resources/themis/body.html +++ b/src/main/resources/themis/body.html @@ -53,7 +53,7 @@
  • - Participate + Sources & Issues