You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by ss...@apache.org on 2013/02/22 16:21:36 UTC
[20/37] MARMOTTA-105: renamed packages in marmotta-core
http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/content/ContentServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/content/ContentServiceImpl.java b/platform/marmotta-core/src/main/java/kiwi/core/services/content/ContentServiceImpl.java
deleted file mode 100644
index 4c4b4da..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/content/ContentServiceImpl.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.content;
-
-import kiwi.core.api.config.ConfigurationService;
-import kiwi.core.api.content.ContentReader;
-import kiwi.core.api.content.ContentService;
-import kiwi.core.api.content.ContentWriter;
-import kiwi.core.events.ConfigurationChangedEvent;
-import kiwi.core.exception.LMFException;
-import kiwi.core.exception.WritingNotSupportedException;
-import org.openrdf.model.Resource;
-import org.slf4j.Logger;
-
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Instance;
-import javax.inject.Inject;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-/**
- * Service that provides access to the content associated with a resource. It makes use of the ContentReader and
- * ContentWriter implementations registered in the system.
- *
- * User: Thomas Kurz, Sebastian Schaffert
- * Date: 07.02.11
- * Time: 12:37
- */
-@ApplicationScoped
-public class ContentServiceImpl implements ContentService {
-
- @Inject
- private Logger log;
-
- @Inject
- private ConfigurationService configurationService;
-
- @Inject
- private Instance<ContentReader> readers;
-
- @Inject
- private Instance<ContentWriter> writers;
-
- private Map<Pattern,ContentReader> readerMap;
- private Map<Pattern,ContentWriter> writerMap;
-
- @Override
- @PostConstruct
- public void initialise() {
- log.info("Content Service starting up ...");
-
- initialiseReadersWriters();
- }
-
- private void initialiseReadersWriters() {
- readerMap = new HashMap<Pattern, ContentReader>();
- writerMap = new HashMap<Pattern, ContentWriter>();
-
- // first read from the config file all content.* keys and store the name of the reader/writer in this set
- // will e.g. store "triplestore" and "filesystem" if it finds keys of the form "content.triplestore.reader"
- // and "content.filesystem.writer"
- Set<String> configNames = new HashSet<String>();
- for(String key : configurationService.listConfigurationKeys("content")) {
- String[] components = key.split("\\.");
- if(components.length > 1) {
- configNames.add(components[1]);
- }
- }
-
- // then read the configuration for each reader/writer specification in the config file and look whether
- // the appropriate reader and/or writer is available
- for(String configName : configNames) {
- String readerClass = configurationService.getStringConfiguration("content."+configName+".reader");
- String writerClass = configurationService.getStringConfiguration("content."+configName+".writer");
- String patternStr = configurationService.getStringConfiguration("content."+configName+".pattern");
- String enabledStr = configurationService.getStringConfiguration("content."+configName+".enabled");
-
- if(Boolean.parseBoolean(enabledStr)) {
- ContentReader reader = null;
- ContentWriter writer = null;
- Pattern pattern = null;
- if(readerClass != null) {
- for(ContentReader r : readers) {
- if(r.getClass().getCanonicalName().startsWith(readerClass)) {
- reader = r;
- break;
- }
- }
- }
-
- if(writerClass != null) {
- for(ContentWriter w : writers) {
- if(w.getClass().getCanonicalName().startsWith(writerClass)) {
- writer = w;
- break;
- }
- }
- }
-
- try {
- pattern = Pattern.compile(patternStr);
- } catch(Exception ex) {
- log.warn("pattern {} is not a valid regular expression; disabling reader/writer {} (message was {})", patternStr,configName,ex.getMessage());
- continue;
- }
-
- if(pattern != null && reader != null) {
- readerMap.put(pattern,reader);
- log.info("enabled content reader '{}' for pattern {}",reader.getName(),pattern);
- }
- if(pattern != null && writer != null) {
- writerMap.put(pattern,writer);
- log.info("enabled content writer '{}' for pattern {}", writer.getName(), pattern);
- }
-
-
- } else {
- log.info("content reader/writer {} disabled",configName);
- }
- }
- }
-
-
- public void configurationChangedEvent(@Observes ConfigurationChangedEvent event) {
- for (String key : event.getKeys())
- if (key.startsWith("content.")) {
- log.info("Content Service reinitialising ...");
- initialiseReadersWriters();
- break;
- }
- }
-
-
-
-
- @Override
- public void setContentData(Resource resource, byte[] data, String mimetype) throws WritingNotSupportedException {
- // iterate over all possible writers; if the pattern matches, try to store the content and return
- for(Pattern p : writerMap.keySet()) {
- if(p.matcher(resource.toString()).matches()) {
- ContentWriter writer = writerMap.get(p);
- log.debug("setting content for resource {} using writer {}",resource,writer.getName());
- try {
- writer.setContentData(resource, data, mimetype);
- return;
- } catch(IOException ex) {
- log.error("could not write content, writer threw an IO Exception",ex);
- throw new WritingNotSupportedException(ex.getMessage(),ex);
- }
- }
- }
- throw new WritingNotSupportedException("no writer found for resource "+resource);
- }
-
-
- /**
- * Store the content of the specified mime type for the specified resource. Accepts an input stream containing
- * the byte data of the content that is read and written to the destination configured for this writer.
- * <p/>
- * This method is preferrable for resources with large amounts of data.
- *
- * @param resource the resource for which to return the content
- * @param mimeType the mime type to retrieve of the content
- * @param in a InputStream containing the content of the resource
- */
- @Override
- public void setContentStream(Resource resource, InputStream in, String mimeType) throws WritingNotSupportedException {
- // iterate over all possible writers; if the pattern matches, try to store the content and return
- for(Pattern p : writerMap.keySet()) {
- if(p.matcher(resource.toString()).matches()) {
- ContentWriter writer = writerMap.get(p);
- log.debug("setting content for resource {} using writer {}",resource,writer.getName());
- try {
- writer.setContentStream(resource,in,mimeType);
- return;
- } catch(IOException ex) {
- log.error("could not write content, writer threw an IO Exception",ex);
- throw new WritingNotSupportedException(ex.getMessage(),ex);
- }
- }
- }
- throw new WritingNotSupportedException("no writer found for resource "+resource);
- }
-
- /**
- * Retrieve the content of the specified mime type for the specified resource. Returns a byte array containing
- * the byte data of the content, or null, indicating that a content of the specified mime type does not exist
- * for the resource.
- * <p/>
- * Specialised content readers could even transform the resource content from its original form to the new
- * mimetype, e.g. converting an image from JPEG to PNG.
- *
- * @param resource the resource for which to return the content
- * @param mimetype the mime type to retrieve of the content
- * @return a byte array containing the content of the resource, or null if no content exists
- */
- @Override
- public byte[] getContentData(Resource resource, String mimetype) {
- // iterate over all possible writers; if the pattern matches, try to store the content and return
- for(Pattern p : readerMap.keySet()) {
- if(p.matcher(resource.toString()).matches()) {
- ContentReader reader = readerMap.get(p);
- log.debug("reading content for resource {} using reader {}",resource,reader.getName());
- try {
- return reader.getContentData(resource, mimetype);
- } catch(IOException ex) {
- log.error("could not read content, reader threw an IO Exception",ex);
- return null;
- }
- }
- }
- return null;
- }
-
- /**
- * Retrieve the content of the specified mime type for the specified resource. Returns a input stream containing
- * the byte data of the content, or null, indicating that a content of the specified mime type does not exist
- * for the resource.
- * <p/>
- * Specialised content readers could even transform the resource content from its original form to the new
- * mimetype, e.g. converting an image from JPEG to PNG.
- * <p/>
- * This method is preferrable for resources with large amounts of data.
- *
- * @param resource the resource for which to return the content
- * @param mimetype the mime type to retrieve of the content
- * @return a InputStream containing the content of the resource, or null if no content exists
- */
- @Override
- public InputStream getContentStream(Resource resource, String mimetype) throws IOException {
- // iterate over all possible writers; if the pattern matches, try to store the content and return
- for(Pattern p : readerMap.keySet()) {
- if(p.matcher(resource.toString()).matches()) {
- ContentReader reader = readerMap.get(p);
- log.debug("reading content for resource {} using reader {}",resource,reader.getName());
- try {
- return reader.getContentStream(resource, mimetype);
- } catch(IOException ex) {
- log.error("could not read content for resource {}, reader threw an IO Exception (message: {})",resource,ex.getMessage());
- return null;
- }
- }
- }
- return null;
- }
-
- @Override
- public boolean hasContent(Resource resource, String mimetype) {
- // iterate over all possible writers; if the pattern matches, try to store the content and return
- for(Pattern p : readerMap.keySet()) {
- if(p.matcher(resource.toString()).matches()) {
- ContentReader reader = readerMap.get(p);
- return reader.hasContent(resource, mimetype);
- }
- }
- return false;
- }
-
- @Override
- public String getContentType(Resource resource) {
- // iterate over all possible writers; if the pattern matches, try to store the content and return
- for(Pattern p : readerMap.keySet()) {
- if(p.matcher(resource.stringValue()).matches()) {
- ContentReader reader = readerMap.get(p);
- return reader.getContentType(resource);
- }
- }
- return null;
- }
-
-
- /**
- * Return the number of bytes the content of this resource contains.
- *
- * @param resource resource for which to return the content length
- * @return byte count for the resource content
- */
- @Override
- public long getContentLength(Resource resource, String mimetype) {
- // iterate over all possible writers; if the pattern matches, try to store the content and return
- for(Pattern p : readerMap.keySet()) {
- if(p.matcher(resource.toString()).matches()) {
- ContentReader reader = readerMap.get(p);
- return reader.getContentLength(resource,mimetype);
- }
- }
- return 0;
- }
-
- @Override
- public boolean deleteContent(Resource resource) throws LMFException {
- // iterate over all possible writers; if the pattern matches, try to store the content and return
- for(Pattern p : writerMap.keySet()) {
- if(p.matcher(resource.toString()).matches()) {
- ContentWriter writer = writerMap.get(p);
- try {
- writer.deleteContent(resource,"");
- return true;
- } catch(IOException ex) {
- log.error("could not write content, writer threw an IO Exception",ex);
- throw new WritingNotSupportedException(ex.getMessage(),ex);
- }
- }
- }
- return false;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/content/FileSystemContentReader.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/content/FileSystemContentReader.java b/platform/marmotta-core/src/main/java/kiwi/core/services/content/FileSystemContentReader.java
deleted file mode 100644
index c3fb449..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/content/FileSystemContentReader.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.content;
-
-import static org.apache.marmotta.commons.sesame.repository.ExceptionUtils.handleRepositoryException;
-
-import com.google.common.io.ByteStreams;
-import com.google.common.io.Files;
-import kiwi.core.api.config.ConfigurationService;
-import kiwi.core.api.content.ContentReader;
-import kiwi.core.api.triplestore.SesameService;
-import kiwi.core.model.content.MediaContentItem;
-
-import org.apache.marmotta.commons.sesame.facading.FacadingFactory;
-import org.apache.marmotta.kiwi.model.rdf.KiWiUriResource;
-import org.apache.tika.detect.DefaultDetector;
-import org.apache.tika.metadata.Metadata;
-import org.openrdf.model.Resource;
-import org.openrdf.repository.RepositoryConnection;
-import org.openrdf.repository.RepositoryException;
-import org.slf4j.Logger;
-
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-
-/**
- * A content reader that reads the content of a resource from the file system.
- * It uses the kiwi:hasContentPath property to determine the path of the content to access.
- * <p/>
- * Author: Sebastian Schaffert
- */
-@ApplicationScoped
-public class FileSystemContentReader implements ContentReader {
-
- @Inject
- private Logger log;
-
-
- @Inject
- private ConfigurationService configurationService;
-
- @Inject
- private SesameService sesameService;
-
- /** TIKA mime type detector */
- private DefaultDetector detector;
-
-
- private String defaultDir;
-
- public FileSystemContentReader() {
- }
-
- @PostConstruct
- public void initialise() {
- detector = new DefaultDetector();
- defaultDir = configurationService.getWorkDir()+File.separator+"resources";
-
- log.debug("FileSystem Content Reader started (default directory: {})",defaultDir);
-
- }
-
- /**
- * Retrieve the content of the specified mime type for the specified resource. Returns a byte array containing
- * the byte data of the content, or null, indicating that a content of the specified mime type does not exist
- * for the resource.
- * <p/>
- * Specialised content readers could even transform the resource content from its original form to the new
- * mimetype, e.g. converting an image from JPEG to PNG.
- *
- * @param resource the resource for which to return the content
- * @param mimetype the mime type to retrieve of the content
- * @return a byte array containing the content of the resource, or null if no content exists
- */
- @Override
- public byte[] getContentData(Resource resource, String mimetype) throws IOException {
- InputStream in = getContentStream(resource,mimetype);
- try {
- return ByteStreams.toByteArray(in);
- } finally {
- in.close();
- }
- }
-
- /**
- * Return the name of the content reader. Used to identify and display the content reader to admin users.
- *
- * @return
- */
- @Override
- public String getName() {
- return "FileSystem Content Reader";
- }
-
- /**
- * Retrieve the content of the specified mime type for the specified resource. Returns a input stream containing
- * the byte data of the content, or null, indicating that a content of the specified mime type does not exist
- * for the resource.
- * <p/>
- * Specialised content readers could even transform the resource content from its original form to the new
- * mimetype, e.g. converting an image from JPEG to PNG.
- * <p/>
- * This method is preferrable for resources with large amounts of data.
- *
- * @param resource the resource for which to return the content
- * @param mimetype the mime type to retrieve of the content
- * @return a InputStream containing the content of the resource, or null if no content exists
- */
- @Override
- public InputStream getContentStream(Resource resource, String mimetype) throws IOException {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- MediaContentItem mci = FacadingFactory.createFacading(conn).createFacade(resource, MediaContentItem.class);
-
- String path = mci.getContentPath();
- if(path == null && resource instanceof KiWiUriResource && ((KiWiUriResource)resource).stringValue().startsWith("file:")) {
- try {
- URI uri = new URI(((KiWiUriResource)resource).stringValue());
- path = uri.getPath();
- } catch(Exception ex) {}
- }
-
- if(path != null) {
- if(!path.startsWith(defaultDir)) {
- if(!configurationService.getBooleanConfiguration("content.filesystem.secure")) {
- log.warn("accessing file {}, which is outside the default directory; this is a potential security risk; " +
- "enable the option content.filesystem.secure in the configuration",path);
- } else {
- throw new FileNotFoundException("the file "+path+" is outside the LMF default directory location; access denied");
- }
- }
-
- File file = new File(path);
- if(file.exists() && file.canRead()) {
- log.debug("reading file content from file {} for resource {} ...", file, resource);
- return Files.newInputStreamSupplier(file).getInput();
- } else {
- throw new FileNotFoundException("the file "+path+" does not exist or is not readable");
- }
- } else {
- return null;
- }
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException ex) {
- handleRepositoryException(ex,FileSystemContentReader.class);
- return null;
- }
- }
-
- /**
- * Check whether the specified resource has content of the specified mimetype for this reader. Returns true
- * in this case, false otherwise.
- *
- * @param resource the resource to check
- * @param mimetype the mimetype to look for
- * @return true if content of this mimetype is associated with the resource, false otherwise
- */
- @Override
- public boolean hasContent(Resource resource, String mimetype) {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- MediaContentItem mci = FacadingFactory.createFacading(conn).createFacade(resource, MediaContentItem.class);
-
- String path = mci.getContentPath();
- if(path == null && resource instanceof KiWiUriResource && ((KiWiUriResource)resource).stringValue().startsWith("file:")) {
- try {
- URI uri = new URI(((KiWiUriResource)resource).stringValue());
- path = uri.getPath();
- } catch(Exception ex) {}
- }
-
- if(path != null) {
- File file = new File(path);
- if(file.exists() && file.canRead()) {
- log.debug("found file content from file {} for resource {} ...", file, resource);
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException ex) {
- handleRepositoryException(ex,FileSystemContentReader.class);
- return false;
- }
- }
-
- /**
- * Return the MIME content type of the resource passed as argument.
- *
- * @param resource resource for which to return the content type
- * @return the MIME content type of the resource
- */
- @Override
- public String getContentType(Resource resource) {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- MediaContentItem mci = FacadingFactory.createFacading(conn).createFacade(resource, MediaContentItem.class);
-
- String path = mci.getContentPath();
- if(path == null && resource instanceof KiWiUriResource && ((KiWiUriResource)resource).stringValue().startsWith("file:")) {
- try {
- URI uri = new URI(((KiWiUriResource)resource).stringValue());
- path = uri.getPath();
- } catch(Exception ex) {}
- }
-
- if(path != null) {
- File file = new File(path);
- if(file.exists() && file.canRead()) {
-
- String mimeType = null;
-
- Metadata metadata = new Metadata();
- metadata.set(Metadata.RESOURCE_NAME_KEY, file.getAbsolutePath());
- try {
- InputStream in = new BufferedInputStream(Files.newInputStreamSupplier(file).getInput());
- mimeType = detector.detect(in,metadata).toString();
- in.close();
- } catch (IOException e) {
- log.error("I/O error while detecting file type for file {}",file,e);
- }
- log.debug("detected mime type {} of file {} for resource {} ...", mimeType, file, resource);
-
- return mimeType;
- } else {
- return null;
- }
- } else {
- return null;
- }
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException ex) {
- handleRepositoryException(ex,FileSystemContentReader.class);
- return null;
- }
- }
-
-
- /**
- * Return the number of bytes the content of this resource contains.
- *
- * @param resource resource for which to return the content length
- * @return byte count for the resource content
- */
- @Override
- public long getContentLength(Resource resource, String mimetype) {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- MediaContentItem mci = FacadingFactory.createFacading(conn).createFacade(resource, MediaContentItem.class);
-
- String path = mci.getContentPath();
- if(path == null && resource instanceof KiWiUriResource && ((KiWiUriResource)resource).stringValue().startsWith("file:")) {
- try {
- URI uri = new URI(((KiWiUriResource)resource).stringValue());
- path = uri.getPath();
- } catch(Exception ex) {}
- }
-
- if(path != null) {
- File file = new File(path);
- if(file.exists() && file.canRead()) {
- return file.length();
- }
- }
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException ex) {
- handleRepositoryException(ex,FileSystemContentReader.class);
- }
- return 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/content/FileSystemContentWriter.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/content/FileSystemContentWriter.java b/platform/marmotta-core/src/main/java/kiwi/core/services/content/FileSystemContentWriter.java
deleted file mode 100644
index 358d7a4..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/content/FileSystemContentWriter.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.content;
-
-import static org.apache.marmotta.commons.sesame.repository.ExceptionUtils.handleRepositoryException;
-
-import com.google.common.io.ByteStreams;
-import com.google.common.io.Files;
-import kiwi.core.api.config.ConfigurationService;
-import kiwi.core.api.content.ContentWriter;
-import kiwi.core.api.triplestore.SesameService;
-import kiwi.core.model.content.MediaContentItem;
-
-import org.apache.marmotta.commons.sesame.facading.FacadingFactory;
-import org.apache.marmotta.kiwi.model.rdf.KiWiUriResource;
-import org.openrdf.model.Resource;
-import org.openrdf.repository.RepositoryConnection;
-import org.openrdf.repository.RepositoryException;
-import org.slf4j.Logger;
-import sun.net.www.MimeEntry;
-import sun.net.www.MimeTable;
-
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.UUID;
-
-/**
- * A content writer that writes the content of a resource to the file system.
- * It uses the kiwi:hasContentPath property to determine the destination path of the content to write to.
- * <p/>
- * Author: Sebastian Schaffert
- */
-@ApplicationScoped
-public class FileSystemContentWriter implements ContentWriter {
-
- @Inject
- private Logger log;
-
-
- @Inject
- private ConfigurationService configurationService;
-
- @Inject
- private SesameService sesameService;
-
- private String defaultDir;
-
- public FileSystemContentWriter() {
- }
-
- @PostConstruct
- public void initialise() {
- defaultDir = configurationService.getWorkDir()+File.separator+"resources";
-
- log.debug("FileSystem Content Writer started (default file location: {})",defaultDir);
-
- File dir = new File(defaultDir);
- if(!dir.exists() && !dir.mkdirs()) {
- log.warn("could not create default directory for file system storage of content (directory: {})",defaultDir);
- }
- }
-
- /**
- * Delete the content of the speficied mime type for the specified resource.
- *
- * @param resource the resource for which to delete the content
- * @param mimetype the mime type of the content to delete (optional)
- */
- @Override
- public void deleteContent(Resource resource, String mimetype) throws IOException {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- MediaContentItem mci = FacadingFactory.createFacading(conn).createFacade(resource, MediaContentItem.class);
-
- String path = mci.getContentPath();
- if(path != null) {
- if(!path.startsWith(defaultDir)) {
- if(!configurationService.getBooleanConfiguration("content.filesystem.secure")) {
- log.warn("accessing file {}, which is outside the default directory; this is a potential security risk; " +
- "enable the option content.filesystem.secure in the configuration",path);
- } else {
- throw new FileNotFoundException("the file "+path+" is outside the LMF default directory location; access denied");
- }
- }
-
- File file = new File(path);
- if(file.exists() && file.canWrite()) {
- log.info("deleting file {} for resource {} ...", file.getPath(), resource);
- file.delete();
- } else {
- throw new FileNotFoundException("could not delete file "+path+"; it does not exist or is not writable");
- }
- } else {
- throw new FileNotFoundException("could not delete file content for resource "+resource+"; no content path has been specified for the resource");
- }
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException ex) {
- handleRepositoryException(ex,FileSystemContentReader.class);
- }
- }
-
- /**
- * Return the name of the content reader. Used to identify and display the content reader to admin users.
- *
- * @return
- */
- @Override
- public String getName() {
- return "FileSystem Content Writer";
- }
-
- /**
- * Store the content of the specified mime type for the specified resource. Accepts a byte array containing
- * the byte data of the content that is then written to the destination configured for this writer.
- * <p/>
- *
- * @param resource the resource for which to store the content
- * @param mimetype the mime type of the content
- * @param data a byte array containing the content of the resource
- */
- @Override
- public void setContentData(Resource resource, byte[] data, String mimetype) throws IOException {
- setContentStream(resource, new ByteArrayInputStream(data),mimetype);
- }
-
- /**
- * Store the content of the specified mime type for the specified resource. Accepts an input stream containing
- * the byte data of the content that is read and written to the destination configured for this writer.
- * <p/>
- * This method is preferrable for resources with large amounts of data.
- *
- * @param resource the resource for which to return the content
- * @param mimetype the mime type to retrieve of the content
- * @param in a InputStream containing the content of the resource
- */
- @Override
- public void setContentStream(Resource resource, InputStream in, String mimetype) throws IOException {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- MediaContentItem mci = FacadingFactory.createFacading(conn).createFacade(resource, MediaContentItem.class);
-
- String path = mci.getContentPath();
-
- if(path == null) {
- if(resource instanceof KiWiUriResource && ((KiWiUriResource)resource).stringValue().startsWith("file:")) {
- try {
- URI uri = new URI(((KiWiUriResource)resource).stringValue());
- path = uri.getPath();
- } catch(Exception ex) {}
- } else {
- // we store all other resources in the default directory; create a random file name and store it in the hasContentLocation
- // property
- String extension = null;
- MimeEntry entry = MimeTable.getDefaultTable().find(mimetype);
- if(entry != null && entry.getExtensions().length > 0) {
- extension = entry.getExtensions()[0];
- }
-
- String fileName = UUID.randomUUID().toString();
- path = defaultDir + File.separator +
- fileName.substring(0,2) + File.separator +
- fileName.substring(2,4) + File.separator +
- fileName.substring(4,6) + File.separator +
- fileName + (extension != null ? extension : "");
- mci.setContentPath(path);
- }
- }
-
- if(path != null) {
- if(!path.startsWith(defaultDir)) {
- if(!configurationService.getBooleanConfiguration("content.filesystem.secure")) {
- log.warn("accessing file {}, which is outside the default directory; this is a potential security risk; " +
- "enable the option content.filesystem.secure in the configuration",path);
- } else {
- throw new FileNotFoundException("the file "+path+" is outside the LMF default directory location; access denied");
- }
- }
-
- File file = new File(path);
- if(!file.exists()) {
- try {
- file.getParentFile().mkdirs();
- file.createNewFile();
- } catch(IOException ex) {
- throw new FileNotFoundException("could not create file "+path+"; it is not writable");
- }
- }
- if(file.exists() && file.canWrite()) {
- log.debug("writing file content to file {} for resource {} ...", file, resource);
- ByteStreams.copy(in, Files.newOutputStreamSupplier(file));
- } else {
- throw new FileNotFoundException("could not write to file "+path+"; it does not exist or is not writable");
- }
-
-
-
- } else {
- throw new FileNotFoundException("could not write file content for resource "+resource+"; no content path has been specified for the resource");
- }
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException ex) {
- handleRepositoryException(ex,FileSystemContentReader.class);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/content/HTTPContentReader.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/content/HTTPContentReader.java b/platform/marmotta-core/src/main/java/kiwi/core/services/content/HTTPContentReader.java
deleted file mode 100644
index e0acfc4..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/content/HTTPContentReader.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.content;
-
-import static org.apache.marmotta.commons.sesame.repository.ExceptionUtils.handleRepositoryException;
-
-import com.google.common.io.ByteStreams;
-import kiwi.core.api.config.ConfigurationService;
-import kiwi.core.api.content.ContentReader;
-import kiwi.core.api.http.HttpClientService;
-import kiwi.core.api.triplestore.SesameService;
-import kiwi.core.model.content.MediaContentItem;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpHead;
-import org.apache.marmotta.commons.sesame.facading.FacadingFactory;
-import org.apache.marmotta.kiwi.model.rdf.KiWiUriResource;
-import org.openrdf.model.Resource;
-import org.openrdf.repository.RepositoryConnection;
-import org.openrdf.repository.RepositoryException;
-import org.slf4j.Logger;
-
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Add file description here!
- * <p/>
- * Author: Sebastian Schaffert
- */
-@ApplicationScoped
-public class HTTPContentReader implements ContentReader {
-
- @Inject
- private Logger log;
-
-
- @Inject
- private SesameService sesameService;
-
- @Inject
- private ConfigurationService configurationService;
-
- @Inject
- private HttpClientService httpClientService;
-
- public HTTPContentReader() {
- }
-
- @PostConstruct
- public void initialise() {
- log.debug("HTTP Content Reader started");
-
- }
-
-
- /**
- * Retrieve the content of the specified mime type for the specified resource. Returns a byte array containing
- * the byte data of the content, or null, indicating that a content of the specified mime type does not exist
- * for the resource.
- * <p/>
- * Uses the property kiwi:hasContentLocation to access the URL for the resource content. If this property is not
- * given and the resource is itself a HTTP URI resource, it will try to access the URI itself.
- *
- * @param resource the resource for which to return the content
- * @param mimetype the mime type to retrieve of the content
- * @return a byte array containing the content of the resource, or null if no content exists
- */
- @Override
- public byte[] getContentData(Resource resource, String mimetype) throws IOException {
- return ByteStreams.toByteArray(getContentStream(resource, mimetype));
- }
-
- /**
- * Return the name of the content reader. Used to identify and display the content reader to admin users.
- *
- * @return
- */
- @Override
- public String getName() {
- return "HTTP Content Reader";
- }
-
- /**
- * Retrieve the content of the specified mime type for the specified resource. Returns a input stream containing
- * the byte data of the content, or null, indicating that a content of the specified mime type does not exist
- * for the resource.
- * <p/>
- * Uses the property kiwi:hasContentLocation to access the URL for the resource content. If this property is not
- * given and the resource is itself a HTTP URI resource, it will try to access the URI itself.
- * <p/>
- * This method is preferrable for resources with large amounts of data.
- *
- * @param resource the resource for which to return the content
- * @param mimetype the mime type to retrieve of the content
- * @return a InputStream containing the content of the resource, or null if no content exists
- */
- @Override
- public InputStream getContentStream(final Resource resource, String mimetype) throws IOException {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- MediaContentItem mci = FacadingFactory.createFacading(conn).createFacade(resource, MediaContentItem.class);
-
- String location = mci.getContentLocation();
-
- // if no location is explicitly specified, use the resource URI itself
- if(location == null && resource instanceof KiWiUriResource && ((KiWiUriResource)resource).stringValue().startsWith("http://")) {
- location = ((KiWiUriResource)resource).stringValue();
- }
-
- if(location != null) {
- log.info("reading remote resource {}",location);
- HttpGet get = new HttpGet(location);
- get.setHeader("Accept",mimetype);
-
- HttpResponse response = httpClientService.execute(get);
- if(response.getStatusLine().getStatusCode() == 200)
- return response.getEntity().getContent();
- else {
- log.info("invalid status code while retrieving HTTP remote content for resource {}: {}",resource,response.getStatusLine());
- return null;
- }
- } else
- return null;
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException ex) {
- handleRepositoryException(ex,FileSystemContentReader.class);
- return null;
- }
- }
-
- /**
- * Check whether the specified resource has content of the specified mimetype for this reader. Returns true
- * in this case, false otherwise.
- *
- * @param resource the resource to check
- * @param mimetype the mimetype to look for
- * @return true if content of this mimetype is associated with the resource, false otherwise
- */
- @Override
- public boolean hasContent(Resource resource, String mimetype) {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- MediaContentItem mci = FacadingFactory.createFacading(conn).createFacade(resource, MediaContentItem.class);
-
- String location = mci.getContentLocation();
-
- // if no location is explicitly specified, use the resource URI itself
- if(location == null && resource instanceof KiWiUriResource && ((KiWiUriResource)resource).stringValue().startsWith("http://")) {
- location = ((KiWiUriResource)resource).stringValue();
- }
-
- try {
- if(location != null) {
- log.info("reading remote resource {}",location);
- HttpHead head = new HttpHead(location);
- head.setHeader("Accept",mimetype);
-
- return httpClientService.execute(head, new ResponseHandler<Boolean>() {
- @Override
- public Boolean handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
- return response.getStatusLine().getStatusCode() == 200;
- }
- });
-
- } else
- return false;
- } catch(IOException ex) {
- return false;
- }
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException ex) {
- handleRepositoryException(ex,FileSystemContentReader.class);
- return false;
- }
- }
-
- /**
- * Return the MIME content type of the resource passed as argument.
- *
- * @param resource resource for which to return the content type
- * @return the MIME content type of the resource
- */
- @Override
- public String getContentType(Resource resource) {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- MediaContentItem mci = FacadingFactory.createFacading(conn).createFacade(resource, MediaContentItem.class);
-
- String location = mci.getContentLocation();
-
- // if no location is explicitly specified, use the resource URI itself
- if(location == null && resource instanceof KiWiUriResource && ((KiWiUriResource)resource).stringValue().startsWith("http://")) {
- location = ((KiWiUriResource)resource).stringValue();
- }
-
- try {
- if(location != null) {
- log.info("reading remote resource {}",location);
- HttpHead head = new HttpHead(location);
-
- return httpClientService.execute(head, new ResponseHandler<String>() {
- @Override
- public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
- if (response.getStatusLine().getStatusCode() == 200)
- return response.getFirstHeader("Content-Type").getValue().split(";")[0];
- else
- return null;
- }
- });
- } else
- return null;
- } catch(IOException ex) {
- return null;
- }
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException ex) {
- handleRepositoryException(ex,FileSystemContentReader.class);
- return null;
- }
- }
-
- /**
- * Return the number of bytes the content of this resource contains.
- *
- * @param resource resource for which to return the content length
- * @return byte count for the resource content
- */
- @Override
- public long getContentLength(Resource resource, String mimetype) {
- try {
- RepositoryConnection conn = sesameService.getConnection();
- try {
- MediaContentItem mci = FacadingFactory.createFacading(conn).createFacade(resource, MediaContentItem.class);
-
- String location = mci.getContentLocation();
-
- // if no location is explicitly specified, use the resource URI itself
- if(location == null && resource instanceof KiWiUriResource && ((KiWiUriResource)resource).stringValue().startsWith("http://")) {
- location = ((KiWiUriResource)resource).stringValue();
- }
-
- try {
- if(location != null) {
- log.info("reading remote resource {}",location);
- HttpHead head = new HttpHead(location);
-
- return httpClientService.execute(head, new ResponseHandler<Long>() {
-
- @Override
- public Long handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
- if (response.getStatusLine().getStatusCode() == 200)
- return Long.parseLong(response.getFirstHeader("Content-Length").getValue());
- else
- return 0l;
- }
- });
- } else
- return 0;
- } catch(Exception ex) {
- return 0;
- }
- } finally {
- conn.commit();
- conn.close();
- }
- } catch (RepositoryException ex) {
- handleRepositoryException(ex,FileSystemContentReader.class);
- return 0;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/exporter/ExporterServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/exporter/ExporterServiceImpl.java b/platform/marmotta-core/src/main/java/kiwi/core/services/exporter/ExporterServiceImpl.java
deleted file mode 100644
index 2d4efe5..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/exporter/ExporterServiceImpl.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.exporter;
-
-import com.google.common.collect.ImmutableSet;
-import kiwi.core.api.exporter.ExportService;
-import kiwi.core.api.io.LMFIOService;
-import kiwi.core.api.triplestore.SesameService;
-import kiwi.core.exception.io.UnsupportedExporterException;
-import org.openrdf.model.URI;
-import org.openrdf.repository.RepositoryConnection;
-import org.openrdf.repository.RepositoryException;
-import org.openrdf.rio.RDFFormat;
-import org.openrdf.rio.RDFHandlerException;
-import org.openrdf.rio.RDFWriter;
-import org.openrdf.rio.Rio;
-import org.slf4j.Logger;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.Set;
-
-/**
- * Methods for writing triple data into different targets using different exporters.
- *
- * @author Sebastian Schaffert
- *
- */
-@ApplicationScoped
-public class ExporterServiceImpl implements ExportService {
-
- @Inject
- private Logger log;
-
- @Inject
- private LMFIOService ioService;
-
-
- @Inject
- private SesameService sesameService;
-
-
-
- /**
- * Get a collection of all mime types accepted by this exporter. Used for automatically
- * selecting the appropriate exporter in ExportService.
- *
- * @return a set of strings representing the mime types accepted by this exporter
- */
- @Override
- public Set<String> getProducedTypes() {
- return ImmutableSet.copyOf(ioService.getProducedTypes());
- }
-
- /**
- * Export the triple data contained in the named graph passed as argument "context" and return
- * it as a Java string using the serialisation format specified by "mimeType".
- * <p/>
- * The context parameter limits the exported triples to the named graph represented by this
- * resource. If it is set to null, all named graphs will be exported.
- * <p/>
- * The mime type must be supported by at least one of the registered exporters, otherwise an
- * UnsupportedExporterException. Available mime types can be retrieved using the getProducedTypes()
- * method.
- *
- *
- * @param context the named graph to export; if null, all named graphs will be exported
- * @param mimeType a mime type registered by an exporter
- * @throws kiwi.core.exception.io.UnsupportedExporterException
- * in case there is no matching exporter for the given mime type
- */
- @Override
- public String exportData(URI context, String mimeType) throws UnsupportedExporterException {
- RDFFormat serializer = ioService.getSerializer(mimeType);
- if(serializer == null) {
- log.warn("could not find serializer for MIME type {}",mimeType);
- throw new UnsupportedExporterException("No serializer for mime type "+mimeType);
- }
- try {
- StringWriter writer = new StringWriter();
- exportData(writer,context,mimeType);
- return writer.toString();
- } catch (IOException e) {
- log.error("impossible I/O error while writing to string buffer",e);
- return null;
- }
- }
-
- /**
- * Export the triple data contained in the named graph passed as argument "context" and write it
- * to the writer given as first argument using the serialisation format specified by "mimeType".
- * <p/>
- * The context parameter limits the exported triples to the named graph represented by this
- * resource. If it is set to null, all named graphs will be exported.
- * <p/>
- * The mime type must be supported by at least one of the registered exporters, otherwise an
- * UnsupportedExporterException. Available mime types can be retrieved using the getProducedTypes()
- * method.
- *
- *
- * @param writer the writer to write the triples to; will be closed when the triples are written
- * @param context the named graph to export; if null, all named graphs will be exported
- * @param mimeType a mime type registered by an exporter
- * @throws kiwi.core.exception.io.UnsupportedExporterException
- * in case there is no matching exporter for the given mime type
- * @throws java.io.IOException in case there is an error writing to the output
- */
- @Override
- public void exportData(Writer writer, URI context, String mimeType) throws UnsupportedExporterException, IOException {
- RDFFormat serializer = ioService.getSerializer(mimeType);
- if(serializer == null) {
- log.warn("could not find serializer for MIME type {}",mimeType);
- throw new UnsupportedExporterException("No serializer for mime type "+mimeType);
- }
-
- // HINT: This method might be executed outside a transaction!
- RDFWriter handler = Rio.createWriter(serializer,writer);
- try {
- RepositoryConnection connection = sesameService.getConnection();
- connection.begin();
- try {
- if(context == null) {
- connection.exportStatements(null,null,null,true,handler);
- } else {
- connection.exportStatements(null,null,null,true,handler,context);
- }
- } finally {
- connection.commit();
- connection.close();
- }
- } catch (RepositoryException e) {
- throw new IOException("error while getting repository connection");
- } catch (RDFHandlerException e) {
- throw new IOException("error while writing RDF data to stream");
- }
- }
-
- /**
- * Export the triple data contained in the named graph passed as argument "context" and write it
- * to the output stream given as first argument using the serialisation format specified by "mimeType".
- * <p/>
- * The context parameter limits the exported triples to the named graph represented by this
- * resource. If it is set to null, all named graphs will be exported.
- * <p/>
- * The mime type must be supported by at least one of the registered exporters, otherwise an
- * UnsupportedExporterException. Available mime types can be retrieved using the getProducedTypes()
- * method.
- *
- *
- * @param outputStream the OutputStream to write the triples to; data will be written using UTF-8 encoding;
- * will be closed when the triples are written
- * @param context the named graph to export; if null, all named graphs will be exported
- * @param mimeType a mime type registered by an exporter
- * @throws kiwi.core.exception.io.UnsupportedExporterException
- * in case there is no matching exporter for the given mime type
- * @throws java.io.IOException in case there is an error writing to the output
- */
- @Override
- public void exportData(OutputStream outputStream, URI context, String mimeType) throws UnsupportedExporterException, IOException {
- RDFFormat serializer = ioService.getSerializer(mimeType);
- if(serializer == null) {
- log.warn("could not find serializer for MIME type {}",mimeType);
- throw new UnsupportedExporterException("No serializer for mime type "+mimeType);
- }
- // HINT: This method might be executed outside a transaction!
- RDFWriter handler = Rio.createWriter(serializer,outputStream);
- try {
- RepositoryConnection connection = sesameService.getConnection();
- try {
- if(context == null) {
- connection.exportStatements(null,null,null,true,handler);
- } else {
- connection.exportStatements(null,null,null,true,handler,context);
- }
- } finally {
- connection.commit();
- connection.close();
- }
- } catch (RepositoryException e) {
- throw new IOException("error while getting repository connection");
- } catch (RDFHandlerException e) {
- throw new IOException("error while writing RDF data to stream");
- }
- }
-
-
- /**
- * Export the triple data for the given resource contained in the named graph passed as argument "context" and return
- * it as a Java string using the serialisation format specified by "mimeType".
- * <p/>
- * The context parameter limits the exported triples to the named graph represented by this
- * resource. If it is set to null, all named graphs will be exported.
- * <p/>
- * The mime type must be supported by at least one of the registered exporters, otherwise an
- * UnsupportedExporterException. Available mime types can be retrieved using the getProducedTypes()
- * method.
- *
- * @param context the named graph to export; if null, all named graphs will be exported
- * @param mimeType a mime type registered by an exporter
- * @throws kiwi.core.exception.io.UnsupportedExporterException
- * in case there is no matching exporter for the given mime type
- */
- @Override
- public String exportData(URI resource, URI context, String mimeType) throws UnsupportedExporterException {
- RDFFormat serializer = ioService.getSerializer(mimeType);
- if(serializer == null) {
- log.warn("could not find serializer for MIME type {}",mimeType);
- throw new UnsupportedExporterException("No serializer for mime type "+mimeType);
- }
- try {
- StringWriter writer = new StringWriter();
- exportData(writer,resource,context,mimeType);
- return writer.toString();
- } catch (IOException e) {
- log.error("impossible I/O error while writing to string buffer",e);
- return null;
- }
- }
-
- /**
- * Export the triple data for the given resource contained in the named graph passed as argument "context" and write it
- * to the writer given as first argument using the serialisation format specified by "mimeType".
- * <p/>
- * The context parameter limits the exported triples to the named graph represented by this
- * resource. If it is set to null, all named graphs will be exported.
- * <p/>
- * The mime type must be supported by at least one of the registered exporters, otherwise an
- * UnsupportedExporterException. Available mime types can be retrieved using the getProducedTypes()
- * method.
- *
- *
- * @param writer the writer to write the triples to; will be closed when the triples are written
- * @param context the named graph to export; if null, all named graphs will be exported
- * @param mimeType a mime type registered by an exporter
- * @throws kiwi.core.exception.io.UnsupportedExporterException
- * in case there is no matching exporter for the given mime type
- * @throws java.io.IOException in case there is an error writing to the output
- */
- @Override
- public void exportData(Writer writer, URI resource, URI context, String mimeType) throws UnsupportedExporterException, IOException {
- RDFFormat serializer = ioService.getSerializer(mimeType);
- if(serializer == null) {
- log.warn("could not find serializer for MIME type {}",mimeType);
- throw new UnsupportedExporterException("No serializer for mime type "+mimeType);
- }
-
- // HINT: This method might be executed outside a transaction!
- RDFWriter handler = Rio.createWriter(serializer,writer);
- try {
- RepositoryConnection connection = sesameService.getConnection();
- try {
- if(context == null) {
- connection.exportStatements(resource,null,null,true,handler);
- } else {
- connection.exportStatements(resource,null,null,true,handler,context);
- }
- } finally {
- connection.commit();
- connection.close();
- }
- } catch (RepositoryException e) {
- throw new IOException("error while getting repository connection");
- } catch (RDFHandlerException e) {
- throw new IOException("error while writing RDF data to stream");
- }
- }
-
- /**
- * Export the triple data for the given resource contained in the named graph passed as argument "context" and write it
- * to the output stream given as first argument using the serialisation format specified by "mimeType".
- * <p/>
- * The context parameter limits the exported triples to the named graph represented by this
- * resource. If it is set to null, all named graphs will be exported.
- * <p/>
- * The mime type must be supported by at least one of the registered exporters, otherwise an
- * UnsupportedExporterException. Available mime types can be retrieved using the getProducedTypes()
- * method.
- *
- * @param outputStream the OutputStream to write the triples to; data will be written using UTF-8 encoding;
- * will be closed when the triples are written
- * @param context the named graph to export; if null, all named graphs will be exported
- * @param mimeType a mime type registered by an exporter
- * @throws kiwi.core.exception.io.UnsupportedExporterException
- * in case there is no matching exporter for the given mime type
- * @throws java.io.IOException in case there is an error writing to the output
- */
- @Override
- public void exportData(OutputStream outputStream, URI resource, URI context, String mimeType) throws UnsupportedExporterException, IOException {
- RDFFormat serializer = ioService.getSerializer(mimeType);
- if(serializer == null) {
- log.warn("could not find serializer for MIME type {}",mimeType);
- throw new UnsupportedExporterException("No serializer for mime type "+mimeType);
- }
- // HINT: This method might be executed outside a transaction!
- RDFWriter handler = Rio.createWriter(serializer,outputStream);
- try {
- RepositoryConnection connection = sesameService.getConnection();
- try {
- if(context == null) {
- connection.exportStatements(resource,null,null,true,handler);
- } else {
- connection.exportStatements(resource,null,null,true,handler,context);
- }
- } finally {
- connection.commit();
- connection.close();
- }
- } catch (RepositoryException e) {
- throw new IOException("error while getting repository connection");
- } catch (RDFHandlerException e) {
- throw new IOException("error while writing RDF data to stream");
- }
- }
-}