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

added htaccess and dataset

parent 0838355f
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -200,6 +200,11 @@
			<version>4.1</version>
			<version>4.1</version>
		</dependency>
		</dependency>


		<dependency>
		  <groupId>org.apache.jena</groupId>
		  <artifactId>jena-text</artifactId>
		  <version>3.13.0</version>
		</dependency>
	</dependencies>
	</dependencies>


	<build>
	<build>
+16 −5
Original line number Original line Diff line number Diff line
@@ -36,11 +36,22 @@ import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Marshaller;


import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FileUtils;
import org.apache.jena.query.Dataset;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.ReadWrite;
import org.apache.jena.query.text.TextDatasetFactory;
import org.apache.jena.query.text.TextIndexConfig;
import org.apache.jena.query.text.TextIndexDB;
import org.apache.jena.query.text.TextIndexLucene;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.sparql.expr.nodevalue.NodeValueString;
import org.apache.log4j.Layout;
import org.apache.log4j.Layout;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.PatternLayout;
import org.slf4j.Logger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.LoggerFactory;


import com.sun.javafx.geom.AreaOp.NZWindOp;

import fr.emse.gitlab.saref.managers.DatasetManager;
import fr.emse.gitlab.saref.managers.DatasetManager;
import fr.emse.gitlab.saref.managers.OntologyManager;
import fr.emse.gitlab.saref.managers.OntologyManager;
import fr.emse.gitlab.saref.managers.SiteManager;
import fr.emse.gitlab.saref.managers.SiteManager;
@@ -52,7 +63,7 @@ public class SAREFPipeline {


	private static final Logger LOG = LoggerFactory.getLogger(SAREFPipeline.class);
	private static final Logger LOG = LoggerFactory.getLogger(SAREFPipeline.class);


	private static final String NAME_TARGET = "target";
	public static final String NAME_TARGET = "target";
	private static final String NAME_LOG_FILE = "output.log";
	private static final String NAME_LOG_FILE = "output.log";


	public static enum Mode {
	public static enum Mode {
@@ -120,9 +131,6 @@ public class SAREFPipeline {


			ontologyManager = new OntologyManager(this, logger);
			ontologyManager = new OntologyManager(this, logger);


//			datasetManager = new DatasetManager(this, logger);
//			datasetManager.emptyDataset();

			siteManager = new SiteManager(this, logger);
			siteManager = new SiteManager(this, logger);
			siteManager.prepareSite();
			siteManager.prepareSite();
			
			
@@ -134,7 +142,10 @@ public class SAREFPipeline {
			sourcesManager.checkTerms();
			sourcesManager.checkTerms();
			sourcesManager.generateSite();
			sourcesManager.generateSite();
			sourcesManager.resetCheckout();
			sourcesManager.resetCheckout();

			if(mode == Mode.PORTAL) {
				datasetManager = new DatasetManager(this, logger);
				datasetManager.createDataset();
			}
		} catch (IOException ex) {
		} catch (IOException ex) {
			LOG.warn("IOException:", ex);
			LOG.warn("IOException:", ex);
		} catch (SAREFPipelineException ex) {
		} catch (SAREFPipelineException ex) {
+115 −129
Original line number Original line Diff line number Diff line
@@ -26,27 +26,53 @@
package fr.emse.gitlab.saref.managers;
package fr.emse.gitlab.saref.managers;


import java.io.File;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;


import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FileUtils;
import org.apache.jena.graph.Node;
import org.apache.jena.query.Dataset;
import org.apache.jena.query.Dataset;
import org.apache.jena.query.ReadWrite;
import org.apache.jena.query.ReadWrite;
import org.apache.jena.query.text.EntityDefinition;
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.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.tdb.TDBFactory;
import org.apache.jena.vocabulary.DCTerms;
import org.apache.jena.vocabulary.OWL;
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;
import org.slf4j.Logger;


import fr.emse.gitlab.saref.SAREF;
import fr.emse.gitlab.saref.SAREF;
import fr.emse.gitlab.saref.SAREFErrorLogger;
import fr.emse.gitlab.saref.SAREFErrorLogger;
import fr.emse.gitlab.saref.SAREFPipeline;
import fr.emse.gitlab.saref.SAREFPipeline;
import fr.emse.gitlab.saref.SAREFPipelineException;
import fr.emse.gitlab.saref.entities.SAREFProject;
import fr.emse.gitlab.saref.entities.SAREFRepository;
import fr.emse.gitlab.saref.entities.SAREFTerm;
import fr.emse.gitlab.saref.entities.SAREFVersion;
import fr.emse.gitlab.saref.vocabs.EX;
import fr.emse.gitlab.saref.vocabs.VANN;


public class DatasetManager extends SAREFErrorLogger {
public class DatasetManager extends SAREFErrorLogger {


	private static final String NAME_DATASET = "tdb";
	private static final String NAME_DATASET = "dataset";
	private static final String CONFIG = SAREF.BASE + "config";
	private static final String CONFIG = SAREF.BASE + "config";
	private static final String NAME_TDB = "tdb";
	private static final String NAME_LUCENE = "lucene";
	private static final String NAME_ASSEMBLER_FILE = "assembler.ttl";


	private final File datasetDir;
	private final File datasetDir;
	private final Dataset dataset;
	private final Dataset dataset;
@@ -61,138 +87,98 @@ public class DatasetManager extends SAREFErrorLogger {
	public DatasetManager(SAREFPipeline pipeline, Logger errorLogger) throws IOException {
	public DatasetManager(SAREFPipeline pipeline, Logger errorLogger) throws IOException {
		super(pipeline, errorLogger);
		super(pipeline, errorLogger);
		datasetDir = new File(pipeline.targetDir, NAME_DATASET);
		datasetDir = new File(pipeline.targetDir, NAME_DATASET);
		FileUtils.forceMkdir(datasetDir);
		File tdbFile = new File(datasetDir, NAME_TDB);
		dataset = TDBFactory.createDataset(datasetDir.getAbsolutePath());
		File luceneFile = new File(datasetDir, NAME_LUCENE);
		FileUtils.forceMkdir(tdbFile);
		Dataset base = TDBFactory.createDataset(tdbFile.getAbsolutePath());
		EntityDefinition entDef = new EntityDefinition("uri", "text", "graph");
        entDef.setPrimaryPredicate(RDFS.label.asNode());
        entDef.setUidField("uid");
        entDef.setLangField("lang");
        Collection<Node> textPredicates = entDef.getPredicates("text");
        textPredicates.add(RDFS.comment.asNode());
        textPredicates.add(RDFS.comment.asNode());
        TextIndexConfig config = new TextIndexConfig(entDef);
        config.setAnalyzer(new EnglishAnalyzer());
        config.setValueStored(true);
        Directory dir =  new SimpleFSDirectory(luceneFile.toPath());
        TextIndex textIndex = TextDatasetFactory.createLuceneIndex(dir, config);
        dataset = TextDatasetFactory.create(base, textIndex) ;
        
	}
	}


	/**
	public Dataset getDataset() {
	 * Empty the Apache Jena TDB RDF dataset
		return dataset;
	 */
	}
	public void emptyDataset() {

	public void createDataset() {
		dataset.begin(ReadWrite.WRITE);
		dataset.begin(ReadWrite.WRITE);
		dataset.getDefaultModel().removeAll();
		Model model = dataset.getDefaultModel();
		List<String> toRemove = new ArrayList<>();

		Iterator<String> it = dataset.listNames();
		for (RepositoryManager repositoryManager : sourcesManager.getSourceRepositoryManagers()) {
		while (it.hasNext()) {
			SAREFRepository repository = repositoryManager.getRepository();
			toRemove.add(it.next());
			SAREFProject project = repository.getProject();
			SAREFVersion priorVersion = null;
			for (SAREFVersion version : repositoryManager.getRepository().getVersions().values()) {
				model.add(version.getResource(), RDF.type, OWL2.Ontology);
				if (priorVersion != null) {
					model.add(version.getResource(), OWL.priorVersion, priorVersion.getResource());
				}
				}
		for (String name : toRemove) {
				version.getModel().listObjectsOfProperty(project.getResource(), DCTerms.title)
			dataset.removeNamedModel(name);
						.forEachRemaining(node -> {
							model.add(version.getResource(), RDFS.label, node);
						});
				version.getModel().listObjectsOfProperty(project.getResource(), DCTerms.description)
						.forEachRemaining(node -> {
							model.add(version.getResource(), RDFS.comment, node);
						});
				version.getModel().listObjectsOfProperty(project.getResource(), OWL2.versionInfo)
						.forEachRemaining(node -> {
							model.add(version.getResource(), OWL2.versionInfo, node);
						});
				version.getModel().listObjectsOfProperty(project.getResource(), OWL2.versionInfo)
						.forEachRemaining(node -> {
							model.add(version.getResource(), OWL2.versionInfo, node);
						});
				priorVersion = version;
			}
			}
		dataset.addNamedModel(CONFIG, ModelFactory.createDefaultModel());
			for (SAREFTerm term : repository.getTerms().values()) {
		dataset.commit();
				term.getIsDefinedBy().forEach(version -> {
					model.add(term.getResource(), RDFS.isDefinedBy, version.getResource());
				});
				term.getIsExemplifiedBy().forEach(example -> {
					model.add(term.getResource(), VANN.example, example.getResource());
				});
				term.getIsUsedBy().forEach(version -> {
					model.add(term.getResource(), EX.isUsedBy, version.getResource());
				});
				SAREFVersion version = getLastVersion(term);
				if(version != null) {
					version.getModel().listObjectsOfProperty(term.getResource(), RDFS.label).forEachRemaining(node -> {
						model.add(term.getResource(), RDFS.label, node);
					});
					version.getModel().listObjectsOfProperty(term.getResource(), RDFS.comment).forEachRemaining(node -> {
						model.add(term.getResource(), RDFS.comment, node);
					});
				}
				}

//	public void consumeDataset(Consumer<Dataset> consumer, ReadWrite readWrite) throws SAREFPipelineException {
//		boolean own = startTransaction(readWrite);
//		consumer.accept(dataset);
//		endTransaction(own);
//	}
//
//	public void consumeDataset(Consumer<Dataset> consumer) throws SAREFPipelineException {
//		consumeDataset(consumer, ReadWrite.READ);
//	}
//
//	public void consumeConfig(Consumer<Model> consumer, ReadWrite readWrite) throws SAREFPipelineException {
//		boolean own = startTransaction(readWrite);
//		final Model config = dataset.getNamedModel(CONFIG);
//		consumer.accept(config);
//		endTransaction(own);
//	}
//	
//	public Model getConfig(Dataset dataset) {
//		return dataset.getNamedModel(CONFIG);
//	}
//
//	public void consumeConfig(Consumer<Model> consumer) throws SAREFPipelineException {
//		consumeConfig(consumer, ReadWrite.READ);
//	}
//
//	public void setModel(SAREFVersion version, Model model) throws SAREFPipelineException {
//		boolean own = startTransaction(ReadWrite.WRITE);
//		dataset.addNamedModel(version.getVersionIRI(), model);
//		endTransaction(own);
//	}
//
//	public void setModel(SAREFExample example, Model model) throws SAREFPipelineException {
//		boolean own = startTransaction(ReadWrite.WRITE);
//		dataset.addNamedModel(example.getIRI(), model);
//		endTransaction(own);
//	}
//
//	public Model getModel(Dataset dataset, SAREFVersion version) {
//		return dataset.getNamedModel(version.getVersionIRI());
//	}
//
//	
//	public void consumeModel(SAREFVersion version, Consumer<Model> consumer, ReadWrite readWrite) throws SAREFPipelineException {
//		boolean own = startTransaction(readWrite);
//		Model model = dataset.getNamedModel(version.getVersionIRI());
//		consumer.accept(model);
//		endTransaction(own);		
//	}
//	
//	public void consumeModel(SAREFVersion version, Consumer<Model> consumer) throws SAREFPipelineException {
//		consumeModel(version, consumer, ReadWrite.READ);
//	}
//
//	public Model getModel(Dataset dataset, SAREFExample example) {
//		return dataset.getNamedModel(example.getIRI());
//	}
//	
//	public void consumeModel(SAREFExample example, Consumer<Model> consumer, ReadWrite readWrite) throws SAREFPipelineException {
//		boolean own = startTransaction(readWrite);
//		Model model = dataset.getNamedModel(example.getIRI());
//		consumer.accept(model);
//		endTransaction(own);	
//	}
//	
//	public void consumeModel(SAREFExample example, Consumer<Model> consumer) throws SAREFPipelineException {
//		consumeModel(example, consumer, ReadWrite.READ);
//	}
//
//	
//	public void consumeModel(SAREFTerm term, Consumer<Model> consumer, ReadWrite readWrite) throws SAREFPipelineException {
//		boolean own = startTransaction(readWrite);
//		Model model = dataset.getNamedModel(term.getIRI());
//		consumer.accept(model);
//		endTransaction(own);	
//	}
//	
//	public void consumeModel(SAREFTerm term, Consumer<Model> consumer) throws SAREFPipelineException {
//		consumeModel(term, consumer, ReadWrite.READ);
//	}
//	
//	public void writeConfig() {
//		File configFile = new File(pipeline.targetDir, "config.ttl");
//		try (FileOutputStream fos = new FileOutputStream(configFile)) {
//			boolean own = startTransaction(ReadWrite.READ);
//			consumeConfig(config -> config.write(fos, Lang.TURTLE.getLabel()));
//			endTransaction(own);
//		} catch (SAREFPipelineException | IOException ex) {
//			errorLogger.error("Unexpected exception while writing configuration file", ex);
//		}
//	}

	private boolean startTransaction(ReadWrite readWrite) throws SAREFPipelineException {
		if (dataset.transactionMode() == null) {
			dataset.begin(readWrite);
			return true;
		} else if(dataset.transactionMode() != readWrite) {
			throw new SAREFPipelineException(getMessage(MESSAGE.bad_transaction, readWrite));
			}
			}
		return false;
		}
		}

	private void endTransaction(boolean own) throws SAREFPipelineException {
		if (dataset.transactionMode() == null) {
			throw new SAREFPipelineException(getMessage(MESSAGE.no_transaction));
		} else if(dataset.transactionMode() == ReadWrite.WRITE) {
		dataset.commit();
		dataset.commit();
		} 
		if(own) {
		dataset.end();
		dataset.end();
	}
	}

	private SAREFVersion getLastVersion(SAREFTerm term) {
		SAREFVersion lastVersion = null;
		for (SAREFVersion v : term.getIsDefinedBy()) {
			if (lastVersion == null) {
				lastVersion = v;
				continue;
			}
			if (v.getVersionName().compareTo(lastVersion.getVersionName()) > 0) {
				lastVersion = v;
			}
		}
		return lastVersion;
	}
	}


}
}
+91 −14
Original line number Original line Diff line number Diff line
@@ -27,11 +27,14 @@ package fr.emse.gitlab.saref.managers;


import java.io.File;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.IOException;
import java.io.StringWriter;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.List;
import java.util.stream.Collectors;


import org.apache.commons.io.IOUtils;
import org.apache.commons.io.IOUtils;
import org.apache.jena.atlas.io.IndentedWriter;
import org.apache.jena.atlas.io.IndentedWriter;
@@ -58,6 +61,8 @@ import fr.emse.gitlab.saref.SAREFPipeline;
import fr.emse.gitlab.saref.SAREFPipeline.Mode;
import fr.emse.gitlab.saref.SAREFPipeline.Mode;
import fr.emse.gitlab.saref.SAREFPipelineException;
import fr.emse.gitlab.saref.SAREFPipelineException;
import fr.emse.gitlab.saref.entities.SAREFExample;
import fr.emse.gitlab.saref.entities.SAREFExample;
import fr.emse.gitlab.saref.entities.SAREFProject;
import fr.emse.gitlab.saref.entities.SAREFRepository;
import fr.emse.gitlab.saref.entities.SAREFTerm;
import fr.emse.gitlab.saref.entities.SAREFTerm;
import fr.emse.gitlab.saref.entities.SAREFVersion;
import fr.emse.gitlab.saref.entities.SAREFVersion;
import fr.emse.gitlab.saref.utils.StreamManagerFactory;
import fr.emse.gitlab.saref.utils.StreamManagerFactory;
@@ -75,6 +80,13 @@ public class SiteManager extends SAREFErrorLogger {
	private static final String NAME_STATIC = "static";
	private static final String NAME_STATIC = "static";
	private static final String NAME_REPORT_HTML = "report.html";
	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 SPARQLExtStreamManager STREAM_MANAGER_BASE = StreamManagerFactory.get();
	private static final SPARQLExtStreamManager STREAM_MANAGER_BASE = StreamManagerFactory.get();
	public final File siteDir;
	public final File siteDir;
	private final File reportFileHTML;
	private final File reportFileHTML;
@@ -108,9 +120,6 @@ public class SiteManager extends SAREFErrorLogger {
	 * Prepare the site folder and clone the saref-portal-static project repository.
	 * Prepare the site folder and clone the saref-portal-static project repository.
	 */
	 */
	public void prepareSite() throws SAREFPipelineException {
	public void prepareSite() throws SAREFPipelineException {
//		if (pipeline.ignoreSite) {
//			return;
//		}
		try (Git git = Git.cloneRepository().setURI(SAREF.SAREF_PORTAL_STATIC_GIT).setDirectory(siteDir).call()) {
		try (Git git = Git.cloneRepository().setURI(SAREF.SAREF_PORTAL_STATIC_GIT).setDirectory(siteDir).call()) {
		} catch (Exception ex) {
		} catch (Exception ex) {
			try (Git git = Git.open(siteDir)) {
			try (Git git = Git.open(siteDir)) {
@@ -124,9 +133,6 @@ public class SiteManager extends SAREFErrorLogger {
	}
	}


	public void writeReport(StringWriter sw) throws IOException {
	public void writeReport(StringWriter sw) throws IOException {
//		if (pipeline.ignoreSite) {
//			return;
//		}
		try (IndentedWriter writer = new IndentedWriter(new FileOutputStream(reportFileHTML));) {
		try (IndentedWriter writer = new IndentedWriter(new FileOutputStream(reportFileHTML));) {
			boolean debugTemplate = pipeline.mode == Mode.DEVELOP;
			boolean debugTemplate = pipeline.mode == Mode.DEVELOP;
			Context context = ContextUtils.build(writer).setBase(SAREF.BASE).setDebugTemplate(debugTemplate)
			Context context = ContextUtils.build(writer).setBase(SAREF.BASE).setDebugTemplate(debugTemplate)
@@ -146,12 +152,14 @@ public class SiteManager extends SAREFErrorLogger {
		}
		}
	}
	}


	public void generateOntologyDocumentation(SAREFVersion version, IndentedWriter writer, SPARQLExtStreamManager streamManager, Dataset dataset) {
	public void generateOntologyDocumentation(SAREFVersion version, IndentedWriter writer,
			SPARQLExtStreamManager streamManager, Dataset dataset) {
		Resource resource = version.getResource();
		Resource resource = version.getResource();
		generateHTML(planForOntologyVersion, VAR_VERSION_IRI, resource, writer, streamManager, dataset);
		generateHTML(planForOntologyVersion, VAR_VERSION_IRI, resource, writer, streamManager, dataset);
	}
	}


	public void generateExampleDocumentation(SAREFExample example, IndentedWriter writer, SPARQLExtStreamManager streamManager, Dataset dataset) {
	public void generateExampleDocumentation(SAREFExample example, IndentedWriter writer,
			SPARQLExtStreamManager streamManager, Dataset dataset) {
		Resource resource = example.getResource();
		Resource resource = example.getResource();
		generateHTML(planForExample, VAR_EXAMPLE, resource, writer, streamManager, dataset);
		generateHTML(planForExample, VAR_EXAMPLE, resource, writer, streamManager, dataset);
	}
	}
@@ -161,10 +169,10 @@ public class SiteManager extends SAREFErrorLogger {
		generateHTML(planForTerm, VAR_TERM, resource, writer, STREAM_MANAGER_BASE, dataset);
		generateHTML(planForTerm, VAR_TERM, resource, writer, STREAM_MANAGER_BASE, dataset);
	}
	}


	private void generateHTML(RootPlan plan, Var var, Resource resource, IndentedWriter writer, SPARQLExtStreamManager streamManager, Dataset dataset) {
	private void generateHTML(RootPlan plan, Var var, Resource resource, IndentedWriter writer,
		Context context = ContextUtils.build(writer).setBase(SAREF.BASE)
			SPARQLExtStreamManager streamManager, Dataset dataset) {
				.setDebugTemplate(pipeline.mode == Mode.DEVELOP).setInputDataset(dataset)
		Context context = ContextUtils.build(writer).setBase(SAREF.BASE).setDebugTemplate(pipeline.mode == Mode.DEVELOP)
				.setStreamManager(streamManager).build();
				.setInputDataset(dataset).setStreamManager(streamManager).build();


		BindingHashMap binding = new BindingHashMap();
		BindingHashMap binding = new BindingHashMap();
		binding.add(var, resource.asNode());
		binding.add(var, resource.asNode());
@@ -177,4 +185,73 @@ public class SiteManager extends SAREFErrorLogger {
		return STREAM_MANAGER_BASE;
		return STREAM_MANAGER_BASE;
	}
	}


	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(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();

				// redirects core to core/v3.1.1
				// redirects core/ to core/v3.1.1
				writer.write(String.format("RewriteRule ^%s/?$ /%s\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()));

				// redirects core.ttl to core/v1.1.1.ttl 
				writer.write(String.format("RewriteRule ^%s\\.([^\\./]+)$ /%s.$1\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\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");
				}
			}
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}
}
+1 −0
Original line number Original line Diff line number Diff line
@@ -340,6 +340,7 @@ public class SourcesManager extends SAREFErrorLogger {
					new TermSiteManager(pipeline, repository).generateSite();
					new TermSiteManager(pipeline, repository).generateSite();
				}
				}
			}
			}
			siteManager.generateHtaccess();
		}
		}
	}
	}


Loading