diff --git a/src/main/java/fr/emse/gitlab/saref/CLIExecution.java b/src/main/java/fr/emse/gitlab/saref/CLIExecution.java index a83676873aff8895e8167e2d7f7e9af004d8b7d5..28b390deb0758bd3a6686439b1c6c015cef2e9d1 100644 --- a/src/main/java/fr/emse/gitlab/saref/CLIExecution.java +++ b/src/main/java/fr/emse/gitlab/saref/CLIExecution.java @@ -86,8 +86,11 @@ public class CLIExecution implements SAREFCredentialsProvider { case "develop": mode = Mode.DEVELOP; break; - case "portal": - mode = Mode.PORTAL; + case "prerelease-portal": + mode = Mode.PRERELEASE_PORTAL; + break; + case "release-portal": + mode = Mode.RELEASE_PORTAL; break; case "release": mode = Mode.RELEASE; @@ -99,7 +102,7 @@ public class CLIExecution implements SAREFCredentialsProvider { displayHelp(0); throw new RuntimeException(); default: - LOG.error(String.format("<mode> %s is invalid. Valid modes are develop, portal, release, help.", args[0])); + LOG.error(String.format("<mode> %s is invalid. Valid modes are develop, portal, prerelease-portal, release-portal, help.", args[0])); displayHelp(-1); throw new RuntimeException(); } diff --git a/src/main/java/fr/emse/gitlab/saref/SAREF.java b/src/main/java/fr/emse/gitlab/saref/SAREF.java index 0210410d6f27012cefe4633d090e426474540b27..781183364b0bb85a508beea36bef9bf5a6920295 100644 --- a/src/main/java/fr/emse/gitlab/saref/SAREF.java +++ b/src/main/java/fr/emse/gitlab/saref/SAREF.java @@ -67,6 +67,9 @@ public class SAREF { public static final String LOGGER_BASE = "SAREF Pipeline: "; public static final String NAME_SITE = "site"; + public static final String NAME_SOURCES = "sources"; + public static final String NAME_SOURCES_PORTAL = "portal"; + // project acronym public static final String REGEX_ACRONYM_VAR = "acronym"; diff --git a/src/main/java/fr/emse/gitlab/saref/SAREFPipeline.java b/src/main/java/fr/emse/gitlab/saref/SAREFPipeline.java index c15cf154bd88f5f653f11561a98f9a3938cfd3cc..d69398e7ee17c9fd4aa6a8fc4f2e8c4361c03c4c 100644 --- a/src/main/java/fr/emse/gitlab/saref/SAREFPipeline.java +++ b/src/main/java/fr/emse/gitlab/saref/SAREFPipeline.java @@ -56,7 +56,7 @@ public class SAREFPipeline { private static final String NAME_LOG_FILE = "output.log"; public static enum Mode { - DEVELOP, RELEASE, PORTAL, CLEAN + DEVELOP, RELEASE, PRERELEASE_PORTAL, RELEASE_PORTAL, CLEAN } private final TestSuites testSuites = new TestSuites("SAREF pipeline"); @@ -131,7 +131,7 @@ public class SAREFPipeline { sourcesManager.checkTerms(); sourcesManager.generateSite(); sourcesManager.resetCheckout(); - if(mode == Mode.PORTAL) { + if(mode == Mode.PRERELEASE_PORTAL || mode == Mode.RELEASE_PORTAL) { datasetManager = new DatasetManager(this, logger); datasetManager.createDataset(); } diff --git a/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_4_5_Checker.java b/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_4_5_Checker.java index c1c1bfbeb4b949214095cd5a231da450fb06c8d9..ab3081d822517e8d5e09c17813cb8a7dd6d6733d 100644 --- a/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_4_5_Checker.java +++ b/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_4_5_Checker.java @@ -118,10 +118,14 @@ public class Clause_9_4_5_Checker extends AbstractClauseChecker { } }); } - checkOops(); + try { + checkOops(); + } catch (Exception ex) { + logWarning(getMessage(MESSAGE.oopsError), ex); + } } - public void checkOops() throws SAREFPipelineException { + public void checkOops() throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); String onto = ""; diff --git a/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_5_Checker.java b/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_5_Checker.java index 02ca3deec1cf4971a1fa543a4158894f2855ee59..fa8edd678f0f94e39a2d49a1cf6076c7cbd76853 100644 --- a/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_5_Checker.java +++ b/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_5_Checker.java @@ -25,7 +25,11 @@ */ package fr.emse.gitlab.saref.checkers; -import java.io.*; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.StringWriter; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.nio.file.PathMatcher; @@ -97,8 +101,14 @@ public class Clause_9_5_Checker extends AbstractClauseChecker { return; } readTests(); // generates the RDF model for the tests - callThemis(); // uses the RDF model for the tests and sends it to ThemisOWL profile, consistency, lack of pitfalls and class satisfiability - testsRDFaGenerator(); // this generates the html file with rdfa embedded. + + try { + callThemis(); // uses the RDF model for the tests and sends it to ThemisOWL profile, consistency, lack of pitfalls and class satisfiability + testsRDFaGenerator(); // this generates the html file with rdfa embedded. + } catch (Exception ex) { + logWarning(getMessage(MESSAGE.themis), ex); + } + } catch (IOException ex) { logError(getMessage(MESSAGE.ioexception)); } diff --git a/src/main/java/fr/emse/gitlab/saref/gui/FunctionalitiesPanel.java b/src/main/java/fr/emse/gitlab/saref/gui/FunctionalitiesPanel.java index 29a5da0322012544cb63e185bc1742480f79bb2d..b2acb7e6d72efe9b4cf2c4f2cdae86f15d89e318 100644 --- a/src/main/java/fr/emse/gitlab/saref/gui/FunctionalitiesPanel.java +++ b/src/main/java/fr/emse/gitlab/saref/gui/FunctionalitiesPanel.java @@ -46,7 +46,8 @@ public class FunctionalitiesPanel extends JPanel { final JButton fileChooser; final JRadioButton develop; final JRadioButton release; - final JRadioButton portal; + final JRadioButton prerelease_portal; + final JRadioButton release_portal; final JCheckBox ignoreSite; final JCheckBox ignoreExamples; final JCheckBox ignoreTerms; @@ -78,26 +79,38 @@ public class FunctionalitiesPanel extends JPanel { } } }); - portal = new JRadioButton(SAREF.getMessage("portal")); - portal.setToolTipText(SAREF.getMessage("portal_tooltip")); - portal.addActionListener(new ActionListener() { + prerelease_portal = new JRadioButton(SAREF.getMessage("prerelease_portal")); + prerelease_portal.setToolTipText(SAREF.getMessage("prerelease_portal_tooltip")); + prerelease_portal.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if(portal.isSelected()) { - mainFrame.setMode(Mode.PORTAL); + if(prerelease_portal.isSelected()) { + mainFrame.setMode(Mode.PRERELEASE_PORTAL); + } + } + }); + release_portal = new JRadioButton(SAREF.getMessage("release_portal")); + release_portal.setToolTipText(SAREF.getMessage("release_portal_tooltip")); + release_portal.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(release_portal.isSelected()) { + mainFrame.setMode(Mode.RELEASE_PORTAL); } } }); ButtonGroup modeGroup = new ButtonGroup(); modeGroup.add(develop); modeGroup.add(release); - modeGroup.add(portal); + modeGroup.add(prerelease_portal); + modeGroup.add(release_portal); JPanel panel2 = new JPanel(); panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS)); panel2.add(new JLabel(SAREF.getMessage("modes"))); panel2.add(develop); panel2.add(release); - panel2.add(portal); + panel2.add(prerelease_portal); + panel2.add(release_portal); add(panel2); ignoreSite = new JCheckBox(SAREF.getMessage("ignoreSite"), false); diff --git a/src/main/java/fr/emse/gitlab/saref/managers/DatasetManager.java b/src/main/java/fr/emse/gitlab/saref/managers/DatasetManager.java index 80f96e50e6dc89f44b867b45e296a1b87d340bbe..b65ffa5886b77dfe186e084a47b1f08b90e3f842 100644 --- a/src/main/java/fr/emse/gitlab/saref/managers/DatasetManager.java +++ b/src/main/java/fr/emse/gitlab/saref/managers/DatasetManager.java @@ -26,7 +26,6 @@ package fr.emse.gitlab.saref.managers; import java.io.File; -import java.io.FileWriter; import java.io.IOException; import java.util.Collection; @@ -39,10 +38,6 @@ import org.apache.jena.query.text.TextDatasetFactory; import org.apache.jena.query.text.TextIndex; import org.apache.jena.query.text.TextIndexConfig; import org.apache.jena.rdf.model.Model; -import org.apache.jena.rdf.model.ModelFactory; -import org.apache.jena.rdf.model.Property; -import org.apache.jena.rdf.model.Resource; -import org.apache.jena.riot.Lang; import org.apache.jena.tdb.TDBFactory; import org.apache.jena.vocabulary.DCTerms; import org.apache.jena.vocabulary.OWL; @@ -50,9 +45,7 @@ import org.apache.jena.vocabulary.OWL2; import org.apache.jena.vocabulary.RDF; import org.apache.jena.vocabulary.RDFS; import org.apache.lucene.analysis.en.EnglishAnalyzer; -import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.store.Directory; -import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.store.SimpleFSDirectory; import org.slf4j.Logger; diff --git a/src/main/java/fr/emse/gitlab/saref/managers/OntologyManager.java b/src/main/java/fr/emse/gitlab/saref/managers/OntologyManager.java index 8c98e83230a359741ddf40a67ddea538aee5348b..45ed91eb76c0dc61c2b4e1b0b03d0b479799ec22 100644 --- a/src/main/java/fr/emse/gitlab/saref/managers/OntologyManager.java +++ b/src/main/java/fr/emse/gitlab/saref/managers/OntologyManager.java @@ -122,7 +122,7 @@ public class OntologyManager extends SAREFErrorLogger { try { return ONTOLOGY_MANAGER.loadOntologyFromOntologyDocument(iri); } catch (OWLOntologyCreationException ex) { - log(logger, getMessage(MESSAGE.loading_error), ex, Mode.DEVELOP, Mode.RELEASE, Mode.PORTAL); + log(logger, getMessage(MESSAGE.loading_error), ex, Mode.DEVELOP, Mode.RELEASE, Mode.PRERELEASE_PORTAL, Mode.RELEASE_PORTAL); return null; } } @@ -136,7 +136,7 @@ public class OntologyManager extends SAREFErrorLogger { try { return ONTOLOGY_MANAGER.loadOntologyFromOntologyDocument(IRI.create(example.getIRI())); } catch (OWLOntologyCreationException ex) { - log(logger, getMessage(MESSAGE.loading_error), ex, Mode.DEVELOP, Mode.RELEASE, Mode.PORTAL); + log(logger, getMessage(MESSAGE.loading_error), ex, Mode.DEVELOP, Mode.RELEASE, Mode.PRERELEASE_PORTAL, Mode.RELEASE_PORTAL); return null; } } @@ -147,7 +147,7 @@ public class OntologyManager extends SAREFErrorLogger { try { return gen.getExplanations(axiomInconsistent, 10); } catch (Exception ex) { - log(logger, getMessage(MESSAGE.reasoning_error), ex, Mode.DEVELOP, Mode.RELEASE, Mode.PORTAL); + log(logger, getMessage(MESSAGE.reasoning_error), ex, Mode.DEVELOP, Mode.RELEASE, Mode.PRERELEASE_PORTAL, Mode.RELEASE_PORTAL); return null; } } diff --git a/src/main/java/fr/emse/gitlab/saref/managers/RepositoryFactory.java b/src/main/java/fr/emse/gitlab/saref/managers/RepositoryFactory.java index 4b5843f75b3f52907ed745c49c1038536f9f316f..c73c8b6c76c2fd044e4d55ae9d0f2a87a659f922 100644 --- a/src/main/java/fr/emse/gitlab/saref/managers/RepositoryFactory.java +++ b/src/main/java/fr/emse/gitlab/saref/managers/RepositoryFactory.java @@ -100,8 +100,7 @@ public class RepositoryFactory extends SAREFErrorLogger { log(msg, Mode.DEVELOP, Mode.RELEASE); throw new SAREFPipelineException(msg); } else { - log(getMessage(MESSAGE.source_name, SAREF.REGEX_NAME_PROJECT, name), Mode.DEVELOP, Mode.RELEASE, - Mode.PORTAL); + logError(getMessage(MESSAGE.source_name, SAREF.REGEX_NAME_PROJECT, name)); return null; } @@ -135,7 +134,7 @@ public class RepositoryFactory extends SAREFErrorLogger { if (!m.find()) { if (isTarget && pipeline.mode == Mode.RELEASE) { final String msg = String.format(getMessage(MESSAGE.release_branch, originalBranch)); - errorLogger.warn(msg); + errorLogger.error(msg); throw new SAREFPipelineException(msg); } originalVersionName = guessVersion(project, directory); @@ -205,6 +204,18 @@ public class RepositoryFactory extends SAREFErrorLogger { for (Ref ref : allBranches) { Matcher m = pattern.matcher(ref.getName()); if (m.find()) { + String branchType = m.group(REGEX_VERSION_BRANCH_VAR); + + // only consider release branches when running in RELEASE_PORTAL mode + if(pipeline.mode == Mode.RELEASE_PORTAL && !branchType.equals("release")) { + continue; + } + + // only consider prerelease and release branches when running in PRERELEASE_PORTAL mode + if(pipeline.mode == Mode.PRERELEASE_PORTAL && branchType.equals("develop")) { + continue; + } + int major = Integer.parseInt(m.group(SAREF.REGEX_VERSION_MAJOR_VAR)); int minor = Integer.parseInt(m.group(SAREF.REGEX_VERSION_MINOR_VAR)); int patch = Integer.parseInt(m.group(SAREF.REGEX_VERSION_PATCH_VAR)); @@ -215,7 +226,7 @@ public class RepositoryFactory extends SAREFErrorLogger { versionBuilder = new VersionBuilder(repository, versionName); versionBuilders.put(versionName, versionBuilder); } - switch (m.group(REGEX_VERSION_BRANCH_VAR)) { + switch (branchType) { case "develop": versionBuilder.developRef = ref; break; diff --git a/src/main/java/fr/emse/gitlab/saref/managers/RepositoryManager.java b/src/main/java/fr/emse/gitlab/saref/managers/RepositoryManager.java index 50712b638e50d64b31248daa12c8228a33b5a5db..82988e4e89ba3b226eb34e5f78d26ab01610ecb1 100644 --- a/src/main/java/fr/emse/gitlab/saref/managers/RepositoryManager.java +++ b/src/main/java/fr/emse/gitlab/saref/managers/RepositoryManager.java @@ -42,7 +42,6 @@ import org.slf4j.Logger; import fr.emse.gitlab.saref.SAREF; import fr.emse.gitlab.saref.SAREFErrorLogger; import fr.emse.gitlab.saref.SAREFPipeline; -import fr.emse.gitlab.saref.SAREFPipeline.Mode; import fr.emse.gitlab.saref.SAREFPipelineException; import fr.emse.gitlab.saref.entities.SAREFExample; import fr.emse.gitlab.saref.entities.SAREFProject; @@ -99,8 +98,7 @@ public class RepositoryManager extends SAREFErrorLogger { return; } SAREFVersion version = repository.getVersions().get(versionName); - boolean prereleaseOnly = pipeline.mode == Mode.RELEASE || pipeline.mode == Mode.PORTAL; - Ref ref = sourcesManager.getRef(version, prereleaseOnly); + Ref ref = sourcesManager.getRef(version); if(ref == null) { throw new SAREFPipelineException(); } @@ -111,7 +109,7 @@ public class RepositoryManager extends SAREFErrorLogger { currentVersionName = versionName; } catch (IOException | GitAPIException ex) { String msg = getMessage(MESSAGE.checkout, repository.getProject().getName(), versionName); - log(msg, ex, Mode.DEVELOP, Mode.RELEASE, Mode.PORTAL); + logError(msg, ex); throw new SAREFPipelineException(msg, ex); } } @@ -128,7 +126,7 @@ public class RepositoryManager extends SAREFErrorLogger { git.checkout().setName(originalBranch).call(); } catch (IOException | GitAPIException ex) { String msg = getMessage(MESSAGE.reset, originalBranch); - log(msg, ex, Mode.DEVELOP, Mode.RELEASE, Mode.PORTAL); + logError(msg, ex); throw new SAREFPipelineException(msg, ex); } } @@ -154,7 +152,7 @@ public class RepositoryManager extends SAREFErrorLogger { private void loadVersions(Git git, SAREFRepository repository) throws GitAPIException { for (SAREFVersion version : repository.getVersions().values()) { - Ref ref = sourcesManager.getRef(version, false); + Ref ref = sourcesManager.getRef(version); if(ref == null) { continue; } diff --git a/src/main/java/fr/emse/gitlab/saref/managers/SiteManager.java b/src/main/java/fr/emse/gitlab/saref/managers/SiteManager.java index 7780ace25fcfd5cdf0f353d2752525ca6c4c1cab..64fba894248129e23b8f807a047c53c4e92b1639 100644 --- a/src/main/java/fr/emse/gitlab/saref/managers/SiteManager.java +++ b/src/main/java/fr/emse/gitlab/saref/managers/SiteManager.java @@ -32,10 +32,9 @@ import java.io.IOException; import java.io.StringWriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; -import java.util.stream.Collectors; +import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.jena.atlas.io.IndentedWriter; import org.apache.jena.graph.NodeFactory; @@ -77,30 +76,27 @@ public class SiteManager extends SAREFErrorLogger { private static final String EXAMPLE_QUERY = DOC_BASE + "example/main.rqg"; private static final Var VAR_EXAMPLE = VarUtils.allocVar("example"); - private static final String NAME_STATIC = "static"; private static final String NAME_REPORT_HTML = "report.html"; - private static final String HTACCESS_HTML = "RewriteCond %{HTTP_ACCEPT} !(application/rdf\\+xml|text/turtle|text/n3|application/n\\-triples|application/ld\\+json)"; - private static final String HTACCESS_RDFXML = "RewriteCond %{HTTP_ACCEPT} application/rdf\\+xml"; - private static final String HTACCESS_TURTLE = "RewriteCond %{HTTP_ACCEPT} text/turtle"; - private static final String HTACCESS_N3 = "RewriteCond %{HTTP_ACCEPT} text/n3"; - private static final String HTACCESS_NTRIPLE = "RewriteCond %{HTTP_ACCEPT} application/n-triples"; - private static final String HTACCESS_JSONLD = "RewriteCond %{HTTP_ACCEPT} application/ld\\+json"; + private static final String HTACCESS_PATH = "RewriteCond %{REQUEST_URI} ^(.*/)?[^/]*$\n"; private static final SPARQLExtStreamManager STREAM_MANAGER_BASE = StreamManagerFactory.get(); public final File siteDir; + public final File sourcesDir; private final File reportFileHTML; private final RootPlan planForTerm; private final RootPlan planForOntologyVersion; private final RootPlan planForExample; private static enum MESSAGE { - prepare_error; + prepare_target_error, prepare_portal_error; } public SiteManager(SAREFPipeline pipeline, Logger errorLogger) throws IOException { super(pipeline, errorLogger); siteDir = new File(pipeline.targetDir, SAREF.NAME_SITE); + sourcesDir = new File(pipeline.targetDir, SAREF.NAME_SOURCES); + reportFileHTML = new File(siteDir, NAME_REPORT_HTML); String query = IOUtils.toString(STREAM_MANAGER_BASE.open(new LookUpRequest(TERM_QUERY, SPARQLExt.MEDIA_TYPE)), @@ -120,12 +116,29 @@ public class SiteManager extends SAREFErrorLogger { * Prepare the site folder and clone the saref-portal-static project repository. */ public void prepareSite() throws SAREFPipelineException { - try (Git git = Git.cloneRepository().setURI(SAREF.SAREF_PORTAL_STATIC_GIT).setDirectory(siteDir).call()) { - } catch (Exception ex) { - try (Git git = Git.open(siteDir)) { - git.pull().call(); + if(pipeline.mode == Mode.DEVELOP || pipeline.mode == Mode.RELEASE) { + File portalSourcesDir = new File(sourcesDir, SAREF.NAME_SOURCES_PORTAL); + try (Git git = Git.cloneRepository().setURI(SAREF.SAREF_PORTAL_STATIC_GIT).setDirectory(portalSourcesDir).call()) { + File portal = new File(portalSourcesDir, SAREF.NAME_SOURCES_PORTAL); + FileUtils.copyDirectory(portal, siteDir); + } catch (Exception ex) { + try (Git git = Git.open(portalSourcesDir)) { + git.pull().call(); + File portal = new File(portalSourcesDir, SAREF.NAME_SOURCES_PORTAL); + FileUtils.copyDirectory(portal, siteDir); + } catch (Exception e) { + String msg = getMessage(MESSAGE.prepare_target_error, SAREF.SAREF_PORTAL_STATIC_GIT); + logError(msg, e); + throw new SAREFPipelineException(msg, e); + } + } + } else { + try { + File portal = new File(pipeline.directory, SAREF.NAME_SOURCES_PORTAL); + FileUtils.copyDirectory(portal, siteDir); } catch (Exception e) { - String msg = getMessage(MESSAGE.prepare_error, SAREF.SAREF_PORTAL_STATIC_GIT); + // should have a folder portal + String msg = getMessage(MESSAGE.prepare_target_error, SAREF.SAREF_PORTAL_STATIC_GIT); logError(msg, e); throw new SAREFPipelineException(msg, e); } @@ -188,71 +201,50 @@ public class SiteManager extends SAREFErrorLogger { public void generateHtaccess() { File htaccess = new File(siteDir, ".htaccess"); try (FileWriter writer = new FileWriter(htaccess)) { - writer.write("RewriteEngine on\nDirectorySlash Off\n\n"); - writer.write("nRewriteRule ^sources/(.*)$ https://forge.etsi.org/rep/SAREF/$1 [R=302,NE]\\n"); // redirect the sources - writer.write(HTACCESS_HTML); - writer.write("\nRewriteRule ^(.*)\\.conneg$ /$1.html\n"); - writer.write(HTACCESS_JSONLD); - writer.write("\nRewriteRule ^(.*)\\.conneg$ /$1.jsonld\n"); - writer.write(HTACCESS_N3); - writer.write("\nRewriteRule ^(.*)\\.conneg$ /$1.n3\n"); - writer.write(HTACCESS_NTRIPLE); - writer.write("\nRewriteRule ^(.*)\\.conneg$ /$1.nt\n"); - writer.write(HTACCESS_RDFXML); - writer.write("\nRewriteRule ^(.*)\\.conneg$ /$1.rdf\n"); - writer.write(HTACCESS_TURTLE); - writer.write("\nRewriteRule ^(.*)\\.conneg$ /$1.ttl\n"); - writer.write("\n"); - for (RepositoryManager repositoryManager : pipeline.getSourcesManager().getSourceRepositoryManagers()) { - SAREFRepository repository = repositoryManager.getRepository(); - SAREFProject project = repository.getProject(); - SAREFVersion lastVersion = repository.getVersions().lastEntry().getValue(); + writer.write("RewriteRule ^sources/(.*)$ https://forge.etsi.org/rep/SAREF/$1 [R=302]\n\n"); - // redirects core to core/v3.1.1/ - // redirects core/ to core/v3.1.1/ - writer.write(String.format("RewriteRule ^%s/?$ /%s/ [R=302,NE]\n", project.getPath(), lastVersion.getVersionPath())); - - // redirects core/Sensor to core/Sensor.conneg - String choiceOfTerms = repository.getTerms().values().stream().map(SAREFTerm::getLocalName) - .collect(Collectors.joining("|", "(", ")")); - writer.write(String.format("RewriteCond %%{REQUEST_URI} ^/%s/%s$\n", project.getPath(), choiceOfTerms)); - writer.write(String.format("RewriteRule ^%s/(.*)$ /%s/$1.conneg\n\n", project.getPath(), project.getPath())); + writer.write( + "Header set Content-disposition \"expr=attachement; filename=%{resp:Content-Location}\" \"expr=%{resp:Content-Location} =~ /.(rdf|nt|n3)$/\"\n"); + writer.write( + "Header set Content-disposition \"expr=inline; filename=%{resp:Content-Location}\" \"expr= %{resp:Content-Location} =~ /.+/ && !( %{resp:Content-Location} =~ /.(rdf|nt|n3)$/ )\"\n\n"); - // redirects core.ttl to core/v1.1.1.ttl - writer.write(String.format("RewriteRule ^%s\\.([^\\./]+)$ /%s.$1 [R=302,NE]\n\n", - project.getPath(), lastVersion.getVersionPath())); - - for (SAREFVersion version : repository.getVersions().values()) { - writer.write(String.format("RewriteRule ^%s/?$ /%s/%s.conneg\n", - version.getVersionPath(), version.getVersionPath(), project.getOntologyFileName())); - - // redirects core/v1.1.1.ttl to core/v1.1.1/saref.ttl - writer.write(String.format("RewriteRule ^%s\\.([^\\./]+)$ /%s/%s.$1 [R=302,NE]\n", - version.getVersionPath(), version.getVersionPath(), project.getOntologyFileName())); - - // redirects core/v1.1.1/saref to core/v1.1.1/saref.conneg - writer.write(String.format("RewriteRule ^%s/%s$ /%s/%s.conneg\n", - version.getVersionPath(), project.getOntologyFileName(), version.getVersionPath(), - project.getOntologyFileName())); - - // redirects core/v1.1.1/tests to core/v1.1.1/tests.conneg - writer.write(String.format("RewriteRule ^%s/tests$ /%s/tests.conneg\n", - version.getVersionPath(), version.getVersionPath())); - - // redirects core/v1.1.1/requirements to core/v1.1.1/requirements.conneg - writer.write(String.format("RewriteRule ^%s/requirements$ /%s/requirements.conneg\n", - version.getVersionPath(), version.getVersionPath())); - - for (SAREFExample example : version.getExamples().values()) { - writer.write(String.format("RewriteRule ^%s/example/%s$ /%s/example/%s.conneg\n", - version.getVersionPath(), example.getName(), version.getVersionPath(), - example.getName())); - } - writer.write("\n\n"); - } + if (pipeline.getSourcesManager().getTargetRepositoryManager() != null) { + writeHtaccess(writer, pipeline.getSourcesManager().getTargetRepositoryManager()); + } + for (RepositoryManager repositoryManager : pipeline.getSourcesManager().getSourceRepositoryManagers()) { + writeHtaccess(writer, repositoryManager); } } catch (IOException ex) { ex.printStackTrace(); } } + + private void writeHtaccess(FileWriter writer, RepositoryManager repositoryManager) throws IOException { + SAREFRepository repository = repositoryManager.getRepository(); + SAREFProject project = repository.getProject(); + if(repository.getVersions().isEmpty()) { + return; + } + SAREFVersion lastVersion = repository.getVersions().lastEntry().getValue(); + // redirects core/ to core/v3.1.1/ + writer.write(HTACCESS_PATH); + writer.write( + String.format("RewriteRule ^%s/$ %%1%s/ [R=302]\n", project.getPath(), lastVersion.getVersionName())); + // redirects core.ttl to core/v1.1.1.ttl + writer.write(HTACCESS_PATH); + writer.write(String.format("RewriteRule ^%s\\.([^\\./]+)$ %%1%s/%s.$1 [R=302]\n\n", project.getPath(), + lastVersion.getVersionPath(), project.getOntologyFileName())); + for (SAREFVersion version : repository.getVersions().values()) { + // redirects core/v3.1.1/ to core/v3.1.1/saref.conneg + writer.write(HTACCESS_PATH); + writer.write(String.format("RewriteRule ^%s/$ %%1%s\n", version.getVersionPath(), + project.getOntologyFileName())); + // redirects core/v1.1.1.ttl to core/v1.1.1/saref.ttl + writer.write(HTACCESS_PATH); + writer.write(String.format("RewriteRule ^%s\\.([^\\./]+)$ %%1%s/%s.$1 [R=302]\n", version.getVersionPath(), + version.getVersionName(), project.getOntologyFileName())); + writer.write("\n"); + } + writer.write("\n"); + } } diff --git a/src/main/java/fr/emse/gitlab/saref/managers/SourcesManager.java b/src/main/java/fr/emse/gitlab/saref/managers/SourcesManager.java index ebba034da16ef473cff6a8e38dae8ebf36217200..52081c05b565d56bf2d441e5a5fbcc83a535f02a 100644 --- a/src/main/java/fr/emse/gitlab/saref/managers/SourcesManager.java +++ b/src/main/java/fr/emse/gitlab/saref/managers/SourcesManager.java @@ -72,7 +72,6 @@ public class SourcesManager extends SAREFErrorLogger { private static final Logger LOG = LoggerFactory.getLogger(SourcesManager.class); private static final String CONFIGURATION_FILE_NAME = ".saref-repositories.yml"; - private static final String NAME_SOURCES = "sources"; private static enum MESSAGE { versions, yaml_error, yaml_repository, yaml_fetch, yaml_failure, reset_checkout_error, check_versions_error, @@ -86,11 +85,11 @@ public class SourcesManager extends SAREFErrorLogger { public SourcesManager(SAREFPipeline pipeline, Logger errorLogger) { super(pipeline, errorLogger); - this.sourcesDir = new File(pipeline.targetDir, NAME_SOURCES); + this.sourcesDir = new File(pipeline.targetDir, SAREF.NAME_SOURCES); } public void initTargetRepositoryManager() throws SAREFPipelineException { - if (pipeline.mode == Mode.PORTAL) { + if (pipeline.mode == Mode.PRERELEASE_PORTAL || pipeline.mode == Mode.RELEASE_PORTAL) { targetRepositoryManager = null; } else { File directory = pipeline.directory; @@ -109,7 +108,7 @@ public class SourcesManager extends SAREFErrorLogger { public void fetchRepositories() throws SAREFPipelineException { final File confFile = new File(pipeline.directory, CONFIGURATION_FILE_NAME); if (!confFile.exists()) { - if (pipeline.mode == Mode.PORTAL) { + if (pipeline.mode == Mode.PRERELEASE_PORTAL || pipeline.mode == Mode.RELEASE_PORTAL) { logError(getMessage(MESSAGE.yaml_error, CONFIGURATION_FILE_NAME)); } return; @@ -318,6 +317,7 @@ public class SourcesManager extends SAREFErrorLogger { if (!pipeline.ignoreTerms) { new TermSiteManager(pipeline, repository).generateSite(); } + siteManager.generateHtaccess(); } else { // Mode is PORTAL. generate for every source for (RepositoryManager repositoryManager : sourcesManagers.values()) { @@ -393,17 +393,20 @@ public class SourcesManager extends SAREFErrorLogger { return sourcesManagers.get(project); } - public Ref getRef(SAREFVersion version, boolean prereleaseOnly) { + public Ref getRef(SAREFVersion version) { if(version == null) { return null; } if(version.getReleaseRef() != null) { return version.getReleaseRef(); } + if(pipeline.mode == Mode.RELEASE_PORTAL) { + return null; + } if(version.getPrereleaseRef() != null) { return version.getPrereleaseRef(); } - if(prereleaseOnly) { + if(pipeline.mode == Mode.PRERELEASE_PORTAL) { return null; } return version.getDevelopRef(); diff --git a/src/main/resources/cli/helpCmdLineSyntax.txt b/src/main/resources/cli/helpCmdLineSyntax.txt index b7a823c745127460e87c5aaf338aea62d8289c05..66ddafbb9b582084bd141a6cc44a07126191d444 100644 --- a/src/main/resources/cli/helpCmdLineSyntax.txt +++ b/src/main/resources/cli/helpCmdLineSyntax.txt @@ -6,7 +6,8 @@ Runs the SAREF pipeline as specified in Technical Specification: <mode> can take the following values: develop Run the SAREF pipeline in relax mode in the target SAREF project release Run the SAREF pipeline in strict mode in the target SAREF project - portal Run the SAREF pipeline in strict mode in all the SAREF projects listed in the `.saref-repositories.yml` file + prerelease-portal Operate a strict check and generate the portal for pre-release or release branches of each source in the configuration file `.saref-repositories.yml` + release-portal Operate a strict check generate the portal for release branches of each source in the configuration file `.saref-repositories.yml` clean Remove all files generated by the previous executions help Displays this message diff --git a/src/main/resources/documentation/footer.rqg b/src/main/resources/documentation/footer.rqg index 9d9377fdb755722770e3d4d0e9f74ca74516b04f..8a8005c26c1c0b4b4fd436eb8d2173256c69ca78 100644 --- a/src/main/resources/documentation/footer.rqg +++ b/src/main/resources/documentation/footer.rqg @@ -29,7 +29,7 @@ TEMPLATE <footer.rqg>( ?pathToStatic , ?isOntologyDocumentation ) { <nav class="g-main-nav" role="navigation" data-g-hover-expand="true"> <ul class="g-toplevel"> <li class="g-menu-item g-menu-item-type-component g-menu-item-245 g-standard "> - <a class="g-menu-item-container" href="index.php/legal-matters"> + <a class="g-menu-item-container" href="https://forge.etsi.org/index.php/legal-matters"> <span class="g-menu-item-content"> <span class="g-menu-item-title">Legal matters</span> </span> diff --git a/src/main/resources/documentation/header.rqg b/src/main/resources/documentation/header.rqg index 6147df8839c436e48d0e014e5374fe85788abb49..56284b5c50ca4a9e3099a205524f400134a60820 100644 --- a/src/main/resources/documentation/header.rqg +++ b/src/main/resources/documentation/header.rqg @@ -44,7 +44,7 @@ TEMPLATE <head.rqg>( ?before, ?pathToStatic , ?isOntologyDocumentation ) { </script> <!--[if (gte IE 8)&(lte IE 9)]> <script type="text/javascript" src="{ ?pathToStatic }/media/gantry5/assets/js/html5shiv-printshiv.min.js"></script> - <link rel="stylesheet" href="media/gantry5/engines/nucleus/css/nucleus-ie9.css" type="text/css"/> + <link rel="stylesheet" href="{ ?pathToStatic }/media/gantry5/engines/nucleus/css/nucleus-ie9.css" type="text/css"/> <script type="text/javascript" src="{ ?pathToStatic }/media/gantry5/assets/js/matchmedia.polyfill.js"></script> <![endif]--> @@ -68,7 +68,7 @@ TEMPLATE <head.rqg>( ?before, ?pathToStatic , ?isOntologyDocumentation ) { <div class="g-grid"> <div class="g-block size-17"> <div class="g-content g-particle"> - <a href="" title="" rel="home" class="g-logo g-logo-helium"> + <a href="https://www.etsi.org/" title="" rel="home" class="g-logo g-logo-helium"> <img src="{ ?pathToStatic }/images/logo-l.png" alt="" /> </a> </div> @@ -80,7 +80,7 @@ TEMPLATE <head.rqg>( ?before, ?pathToStatic , ?isOntologyDocumentation ) { <li class="g-menu-item g-menu-item-type-component g-menu-item-217 active g-standard "> - <a class="g-menu-item-container" href="index.html"> + <a class="g-menu-item-container" href="/index.html"> <span class="g-menu-item-content"> <span class="g-menu-item-title">Home</span> </span> @@ -89,36 +89,28 @@ TEMPLATE <head.rqg>( ?before, ?pathToStatic , ?isOntologyDocumentation ) { <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard "> - <a class="g-menu-item-container" href="core/"> + <a class="g-menu-item-container" href="/core/"> <span class="g-menu-item-content"> <span class="g-menu-item-title">SAREF core</span> </span> </a> </li> <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard "> - <a class="g-menu-item-container" href="resources.html"> + <a class="g-menu-item-container" href="/extensions.html"> <span class="g-menu-item-content"> - <span class="g-menu-item-title">Resources</span> + <span class="g-menu-item-title">Extensions</span> </span> </a> </li> <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard "> - <a class="g-menu-item-container" href="https://forge.etsi.org/gitlab/SAREF/"> + <a class="g-menu-item-container" href="/sources/"> <span class="g-menu-item-content"> <span class="g-menu-item-title">Participate</span> </span> </a> </li> - <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard "> - <a class="g-menu-item-container" href=""> - <span class="g-menu-item-content"> - <span class="g-menu-item-title">About us</span> - </span> - </a> - </li> - <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard "> <a class="g-menu-item-container" href="https://www.etsi.org/committee/smartm2m"> <span class="g-menu-item-content"> diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties index cfffbba9a49f6e79f67916001e6a0b7a0ba1f957..5fd497ea99208d9fd138ae19a54451897d7838e4 100644 --- a/src/main/resources/log4j.properties +++ b/src/main/resources/log4j.properties @@ -10,4 +10,5 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #log4j.appender.stdout.layout.ConversionPattern=## %-5p in %c%n%n%m%n%n -log4j.appender.stdout.layout.ConversionPattern=## %-5p in %c%n%n%m%nIn %C:%L:%M%n%n +log4j.appender.stdout.layout.ConversionPattern=## %p in %c%n%n%m%n%n +#In %C:%L:%M%n%n diff --git a/src/main/resources/messages/SAREF.properties b/src/main/resources/messages/SAREF.properties index 43a6056e428174538430ae320e08a06f27cce82d..687b5824593e5bacf6ad5c03b3f05456373f488e 100644 --- a/src/main/resources/messages/SAREF.properties +++ b/src/main/resources/messages/SAREF.properties @@ -17,8 +17,10 @@ develop=develop develop_tooltip=Check a SAREF project under development release=release release_tooltip=Operate a strict check on a SAREF project on branches develop-vx.y.z, prerelease-vx.y.z, or release-vx.y.z -portal=portal -portal_tooltip=Operate a strict check for each source reference in the configuration file .saref-repositories.yml +prerelease_portal=portal prerelease +prerelease_portal_tooltip=Operate a strict check and generate the portal for pre-release or release branches of each source in the configuration file .saref-repositories.yml +release_portal=portal release +release_portal_tooltip=Operate a strict check generate the portal for release branches of each source in the configuration file .saref-repositories.yml modes=2. Select the execution mode ignoreSite=do not generate the website ignoreSite_tooltip=Only generates the report, not the HTML documentation diff --git a/src/main/resources/messages/SiteManager.properties b/src/main/resources/messages/SiteManager.properties index 1f006d97dec54e43d0c148f9e0601ba3e5fd2a09..2cac0d9a3763f638c864c0640e63c2df1b95b1a8 100644 --- a/src/main/resources/messages/SiteManager.properties +++ b/src/main/resources/messages/SiteManager.properties @@ -1 +1,2 @@ -prepare_error=Failed to clone or pull site repository %s \ No newline at end of file +prepare_target_error=Failed to clone or pull site repository %s +prepare_portal_error=When run in `prerelease-portal` or `release-portal` mode, the pipeline must be run in a directory that contains a directory named `portal` \ No newline at end of file diff --git a/src/main/resources/themis/body.html b/src/main/resources/themis/body.html index 4b203adf2a855d52c37d90b534f67b08f88fb2e2..9d2e2f6e1ea2e6527d7843d11c7e4b9299da204c 100644 --- a/src/main/resources/themis/body.html +++ b/src/main/resources/themis/body.html @@ -1,86 +1,108 @@ <body class="gantry g-helium-style site com_content view-article no-layout no-task dir-ltr itemid-217 outline-19 g-offcanvas-left g-default g-style-preset1"> -<div id="g-offcanvas" data-g-offcanvas-swipe="1" data-g-offcanvas-css3="1"> + <div id="g-offcanvas" data-g-offcanvas-swipe="1" data-g-offcanvas-css3="1"> <div class="g-grid"> - <div class="g-block size-100"> - <div class="g-content g-particle"> - <div id="g-mobilemenu-container" data-g-menu-breakpoint="48rem"></div> - </div> + <div class="g-block size-100"> + <div class="g-content g-particle"> + <div id="g-mobilemenu-container" data-g-menu-breakpoint="48rem"></div> </div> + </div> </div> -</div> -<div id="g-page-surround"> - <div class="g-offcanvas-hide g-offcanvas-toggle" data-offcanvas-toggle-aria-controls="g-offcanvas" aria-expanded="false"><i class="fa fa-fw fa-bars"></i></div> + </div> + <div id="g-page-surround"> + <div class="g-offcanvas-hide g-offcanvas-toggle" data-offcanvas-toggle aria-controls="g-offcanvas" aria-expanded="false"><i class="fa fa-fw fa-bars"></i></div> <section id="g-navigation"> - <div class="g-container"> - <div class="g-grid"> - <div class="g-block size-17"> - <div class="g-content g-particle"> - <a href="" title="" rel="home" class="g-logo g-logo-helium"> - <img src="../../static/images/logo-l.png" alt="" /> - </a> - </div> - </div> - <div class="g-block size-50"> - <div class="g-content g-particle"> - <nav class="g-main-nav" role="navigation" data-g-hover-expand="true"> - <ul class="g-toplevel"> - <li class="g-menu-item g-menu-item-type-component g-menu-item-217 active g-standard"> - <a class="g-menu-item-container" href="index.html"><span class="g-menu-item-content"><span class="g-menu-item-title">Home</span></span></a> - </li> - <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard"> - <a class="g-menu-item-container" href="core/"><span class="g-menu-item-content"><span class="g-menu-item-title">SAREF core</span></span></a> - </li> - <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard"> - <a class="g-menu-item-container" href="resources.html"><span class="g-menu-item-content"><span class="g-menu-item-title">Resources</span></span></a> - </li> - <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard"> - <a class="g-menu-item-container" href="https://forge.etsi.org/gitlab/SAREF/"><span class="g-menu-item-content"><span class="g-menu-item-title">Participate</span></span></a> - </li> - <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard"> - <a class="g-menu-item-container" href=""><span class="g-menu-item-content"><span class="g-menu-item-title">About us</span></span></a> - </li> - <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard"> - <a class="g-menu-item-container" href="https://www.etsi.org/committee/smartm2m"><span class="g-menu-item-content"><span class="g-menu-item-title">SmartM2M</span></span></a> - </li> - </ul> - </nav> - </div> - </div> - <div class="g-block g-social-header size-33"> - <div class="g-content g-particle"> - <div class="g-social"> - <a target="_blank" href="https://twitter.com/ETSI_STANDARDS" title="" aria-label=""> - <span class="fa fa-twitter fa-fw"></span> - <span class="g-social-text"></span> - </a> - <a target="_blank" href="https://www.facebook.com/etsi.standards" title="" aria-label=""> - <span class="fa fa-facebook-official"></span> - <span class="g-social-text"></span> - </a> - <a target="_blank" href="https://www.linkedin.com/company/etsi?trk=biz-companies-cym" title="" aria-label=""> - <span class="fa fa-linkedin-square"></span> - <span class="g-social-text"></span> - </a> - <a target="_blank" href="https://www.youtube.com/user/ETSIstandards" title="" aria-label=""> - <span class="fa fa-youtube-play"></span> - <span class="g-social-text"></span> - </a> - </div> - </div> - </div> + <div class="g-container"> + <div class="g-grid"> + <div class="g-block size-17"> + <div class="g-content g-particle"> + <a href="https://www.etsi.org/" title="" rel="home" class="g-logo g-logo-helium"> + <img src="../../static/images/logo-l.png" alt="" /> + </a> </div> + </div> + <div class="g-block size-65"> + <div class="g-content g-particle"> + <nav class="g-main-nav" role="navigation" data-g-hover-expand="true"> + <ul class="g-toplevel"> + + + <li class="g-menu-item g-menu-item-type-component g-menu-item-217 active g-standard "> + <a class="g-menu-item-container" href="/index.html"> + <span class="g-menu-item-content"> + <span class="g-menu-item-title">Home</span> + </span> + </a> + </li> + + + <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard "> + <a class="g-menu-item-container" href="/core/"> + <span class="g-menu-item-content"> + <span class="g-menu-item-title">SAREF core</span> + </span> + </a> + </li> + <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard "> + <a class="g-menu-item-container" href="/extensions.html"> + <span class="g-menu-item-content"> + <span class="g-menu-item-title">Extensions</span> + </span> + </a> + </li> + + <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard "> + <a class="g-menu-item-container" href="/sources/"> + <span class="g-menu-item-content"> + <span class="g-menu-item-title">Participate</span> + </span> + </a> + </li> + + <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard "> + <a class="g-menu-item-container" href="https://www.etsi.org/committee/smartm2m"> + <span class="g-menu-item-content"> + <span class="g-menu-item-title">SmartM2M</span> + </span> + </a> + </li> + + <li class="g-menu-item g-menu-item-type-component g-menu-item-242 g-standard"> + <form method="GET" action="search.html"> + <input class="form-control" id="q" name="q" placeholder="🔎 ex., device"/> + </form> + </li> + + </ul> + </nav> + </div> + </div> + <div class="g-block g-social-header size-17"> + <div class="g-content g-particle"> + <div class="g-social "> + <a target="_blank" href="https://twitter.com/ETSI_STANDARDS" title="" aria-label=""> + <span class="fa fa-twitter fa-fw"></span> <span class="g-social-text"></span> </a> + <a target="_blank" href="https://www.facebook.com/etsi.standards" title="" aria-label=""> + <span class="fa fa-facebook-official"></span> <span class="g-social-text"></span> </a> + <a target="_blank" href="https://www.linkedin.com/company/etsi?trk=biz-companies-cym" title="" aria-label=""> + <span class="fa fa-linkedin-square"></span> <span class="g-social-text"></span> </a> + <a target="_blank" href="https://www.youtube.com/user/ETSIstandards" title="" aria-label=""> + <span class="fa fa-youtube-play"></span> <span class="g-social-text"></span> </a> + </div> + </div> + </div> </div> - </section> + </div> + </section> + <header id="g-header"> - <div class="g-container"> - <div class="g-block size-100"> - <div class="g-content g-particle"> - <h1><a id="user-content-smart-applications-reference-ontology-and-extensions" class="anchor" href="#smart-applications-reference-ontology-and-extensions" aria-hidden="true"> - <span aria-hidden="true" class="octicon octicon-link"></span> - </a>SAREF Pipeline @docType</h1> - </div> - </div> + <div class="g-container"> + <div class="g-block size-100"> + <div class="g-content g-particle"> + <h1 align="center">@docType for @ontologyName</h1> + </div> </div> + </div> </header> - <h1 align="center">@ontologyName</h1> \ No newline at end of file + <section class="g-wrapper"> + <div class="g-container"> diff --git a/src/main/resources/themis/footer.html b/src/main/resources/themis/footer.html index f8cf47d768014b7e3c04eb2b4ad90eb537c1a49e..191c89a7979f821eb040d840d12ed18c1a5b9fd3 100644 --- a/src/main/resources/themis/footer.html +++ b/src/main/resources/themis/footer.html @@ -1,50 +1,51 @@ -</div> -<footer id="g-footer"> - <div class="g-container"> + </div> + </section> + <footer id="g-footer"> + <div class="g-container"> <div class="g-grid"> - <div class="g-block size-15"> - <div class="g-content g-particle"> - <a href="https://www.etsi.org/" title="" class="g-logo g-logo-helium"> - <img src="https://forge.etsi.org/files/ETSI-Logo_BW_S_Office1.png" alt="" /> - </a> - </div> - </div> - <div class="g-block size-20"> - <div class="g-content g-particle">© ETSI 2020<br /><a style="font-size:10pt; color:white" href="https://www.etsi.org/">Visit ETSI website for more information on Terms & Conditions.</a></div> + <div class="g-block size-15"> + <div class="g-content g-particle"> + <a href="https://www.etsi.org/" title="" class="g-logo g-logo-helium"> + <img src="https://forge.etsi.org/files/ETSI-Logo_BW_S_Office1.png" alt="" /> + </a> </div> - <div class="g-block g-horizontalmenu size-40"> - <div class="g-content g-particle"> - <nav class="g-main-nav" role="navigation" data-g-hover-expand="true"> - <ul class="g-toplevel"> - <li class="g-menu-item g-menu-item-type-component g-menu-item-245 g-standard "> - <a class="g-menu-item-container" href="index.php/legal-matters"> - <span class="g-menu-item-content"> - <span class="g-menu-item-title">Legal matters</span> - </span> - </a> - </li> - <li class="g-menu-item g-menu-item-type-url g-menu-item-247 g-standard "> - <a class="g-menu-item-container" href="mailto:cti_support@etsi.org?subject=[SAREF]"> - <span class="g-menu-item-content"> - <span class="g-menu-item-title">Contact & Support</span> - </span> - </a> - </li> - </ul> - </nav> - </div> + </div> + <div class="g-block size-20"> + <div class="g-content g-particle">© ETSI 2020<br /><a style="font-size:10pt; color:white" href="https://www.etsi.org/">Visit ETSI website for more information on Terms & Conditions.</a></div> + </div> + <div class="g-block g-horizontalmenu size-40"> + <div class="g-content g-particle"> + <nav class="g-main-nav" role="navigation" data-g-hover-expand="true"> + <ul class="g-toplevel"> + <li class="g-menu-item g-menu-item-type-component g-menu-item-245 g-standard "> + <a class="g-menu-item-container" href="https://forge.etsi.org/index.php/legal-matters"> + <span class="g-menu-item-content"> + <span class="g-menu-item-title">Legal matters</span> + </span> + </a> + </li> + <li class="g-menu-item g-menu-item-type-url g-menu-item-247 g-standard "> + <a class="g-menu-item-container" href="mailto:cti_support@etsi.org?subject=[SAREF]"> + <span class="g-menu-item-content"> + <span class="g-menu-item-title">Contact & Support</span> + </span> + </a> + </li> + </ul> + </nav> </div> - <div class="g-block size-25"> - <div class="g-content g-particle"> - <div class=""> - <div class="g-totop"> - <a href="#" id="g-totop" rel="nofollow">Back to top <i class="fa fa-chevron-up fa-fw"></i></a> - </div> - </div> + </div> + <div class="g-block size-25"> + <div class="g-content g-particle"> + <div class=""> + <div class="g-totop"> + <a href="#" id="g-totop" rel="nofollow">Back to top <i class="fa fa-chevron-up fa-fw"></i></a> </div> + </div> </div> + </div> </div> - </div> -</footer> -</body> + </div> + </footer> + </body> </html> \ No newline at end of file diff --git a/src/main/resources/themis/header.html b/src/main/resources/themis/header.html index 78312de21b28153caac9c18d1229be6f662280a6..1c18fdfab3da3ca08d0250cbb1e6ab264e9e67bc 100644 --- a/src/main/resources/themis/header.html +++ b/src/main/resources/themis/header.html @@ -1,33 +1,39 @@ <!DOCTYPE html> <html lang="en"> <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0"/> - <meta http-equiv="X-UA-Compatible" content="IE=edge" /> - <meta charset="utf-8" /> - <meta name="generator" content="SPARQL-Generate" /> - <title>SAREF pipeline report</title> - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"/> - <link href="../../static/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" /> - <link href="../../static/media/gantry5/assets/css/font-awesome.min.css" rel="stylesheet" /> - <link href="../../static/media/gantry5/engines/nucleus/css-compiled/nucleus.css" rel="stylesheet" /> - <link href="../../static/templates/g5_helium/custom/css-compiled/helium_19.css" rel="stylesheet" /> - <link href="../../static/media/gantry5/assets/css/bootstrap-gantry.css" rel="stylesheet" /> - <link href="../../static/media/gantry5/engines/nucleus/css-compiled/joomla.css" rel="stylesheet" /> - <link href="../../static/media/jui/css/icomoon.css" rel="stylesheet" /> - <link href="../../static/templates/g5_helium/custom/css-compiled/helium-joomla_19.css" rel="stylesheet" /> - <link href="../../static/templates/g5_helium/custom/css-compiled/custom_19.css" rel="stylesheet" /> - <link href="../../static/jqtree/jqtree.css" rel="stylesheet"/> - <script src="../../static/templates/g5_helium/js/jui/jquery.min.js?06eedc97766b70aa1fa0e80231495faa"></script> - <script src="../../static/media/jui/js/jquery-noconflict.js?06eedc97766b70aa1fa0e80231495faa"></script> - <script src="../../static/media/jui/js/jquery-migrate.min.js?06eedc97766b70aa1fa0e80231495faa"></script> - <script src="../../static/media/system/js/caption.js?06eedc97766b70aa1fa0e80231495faa"></script> - <script src="../../static/media/jui/js/bootstrap.min.js?06eedc97766b70aa1fa0e80231495faa"></script> - <script src="../../static/templates/g5_helium/js/juitabs.js"></script> - <script> - jQuery(window).on('load', function() { - new JCaption('img.caption'); - }); - </script> - <title>@ontologyName</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta http-equiv="X-UA-Compatible" content="IE=edge" /> + <meta charset="utf-8" /> + <title>@ontologyName</title> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> + <link href="../../static/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" /> + <link href="../../static/media/gantry5/assets/css/font-awesome.min.css" rel="stylesheet" /> + <link href="../../static/media/gantry5/engines/nucleus/css-compiled/nucleus.css" rel="stylesheet" /> + <link href="../../static/templates/g5_helium/custom/css-compiled/helium_19.css" rel="stylesheet" /> + <link href="../../static/media/gantry5/assets/css/bootstrap-gantry.css" rel="stylesheet" /> + <link href="../../static/media/gantry5/engines/nucleus/css-compiled/joomla.css" rel="stylesheet" /> + <link href="../../static/media/jui/css/icomoon.css" rel="stylesheet" /> + <link href="../../static/templates/g5_helium/custom/css-compiled/helium-joomla_19.css" rel="stylesheet" /> + <link href="../../static/templates/g5_helium/custom/css-compiled/custom_19.css" rel="stylesheet" /> + + <link href="../../static/jqtree/jqtree.css" rel="stylesheet"> + <script src="../../static/templates/g5_helium/js/jui/jquery.min.js?06eedc97766b70aa1fa0e80231495faa"></script> + <script src="../../static/media/jui/js/jquery-noconflict.js?06eedc97766b70aa1fa0e80231495faa"></script> + <script src="../../static/media/jui/js/jquery-migrate.min.js?06eedc97766b70aa1fa0e80231495faa"></script> + <script src="../../static/media/system/js/caption.js?06eedc97766b70aa1fa0e80231495faa"></script> + <script src="../../static/media/jui/js/bootstrap.min.js?06eedc97766b70aa1fa0e80231495faa"></script> + <script src="../../static/templates/g5_helium/js/juitabs.js"></script> + + <script> + jQuery(window).on('load', function() { + new JCaption('img.caption'); + }); + </script> + <!--[if (gte IE 8)&(lte IE 9)]> + <script type="text/javascript" src="../../static/media/gantry5/assets/js/html5shiv-printshiv.min.js"></script> + <link rel="stylesheet" href="../../static/media/gantry5/engines/nucleus/css/nucleus-ie9.css" type="text/css"/> + <script type="text/javascript" src="../../static/media/gantry5/assets/js/matchmedia.polyfill.js"></script> + <![endif]--> + <base href="@href" /> </head> \ No newline at end of file