001package org.dllearner.kb.repository; 002 003import com.google.common.collect.Sets; 004import org.semanticweb.owlapi.model.IRI; 005import org.semanticweb.owlapi.model.OWLOntology; 006import org.semanticweb.owlapi.util.OntologyIRIShortFormProvider; 007 008import java.io.File; 009import java.io.IOException; 010import java.net.URI; 011import java.nio.file.Files; 012import java.nio.file.Path; 013import java.nio.file.PathMatcher; 014import java.util.Collection; 015import java.util.Comparator; 016import java.util.List; 017import java.util.Set; 018import java.util.stream.Collectors; 019 020/** 021 * @author Lorenz Buehmann 022 */ 023public class LocalDirectoryOntologyRepository implements OntologyRepository{ 024 private static final Set<String> owlFileExtensions = Sets.newHashSet("owl", "rdf", "ttl", "nt", "xml"); 025 private static final PathMatcher filter = p -> owlFileExtensions.contains( 026 com.google.common.io.Files.getFileExtension(p.getFileName().toString())); 027 028 private final File directory; 029 private long maxFileSizeInMB = Long.MAX_VALUE; 030 031 public LocalDirectoryOntologyRepository(File directory){ 032 this.directory = directory; 033 } 034 035 public LocalDirectoryOntologyRepository(File directory, long maxFileSizeInMB){ 036 this.directory = directory; 037 this.maxFileSizeInMB = maxFileSizeInMB; 038 } 039 040 @Override 041 public String getName() { 042 return "Local repository (" + directory + ")"; 043 } 044 045 @Override 046 public String getLocation() { 047 return directory.toPath().toString(); 048 } 049 050 @Override 051 public void refresh() { 052 053 } 054 055 @Override 056 public void initialize() { 057 058 } 059 060 @Override 061 public Collection<OntologyRepositoryEntry> getEntries() { 062 try { 063 return Files.list(directory.toPath()) 064 .filter(filter::matches) 065 .filter(path -> path.toFile().length() / 1024 / 1024 < maxFileSizeInMB) 066 .map(Path::toFile) 067 .sorted(Comparator.comparingLong(File::length))//.reversed()) 068 .map(path -> new RepositoryEntry(path.toURI())) 069 .collect(Collectors.toList()); 070 } catch (IOException e) { 071 e.printStackTrace(); 072 } 073 return null; 074 } 075 076 @Override 077 public List<Object> getMetaDataKeys() { 078 return null; 079 } 080 081 @Override 082 public OWLOntology getOntology(OntologyRepositoryEntry entry) { 083 return null; 084 } 085 086 private class RepositoryEntry implements OntologyRepositoryEntry { 087 088 private String shortName; 089 090 private URI ontologyURI; 091 092 private URI physicalURI; 093 094 public RepositoryEntry(URI ontologyIRI) { 095 this.ontologyURI = ontologyIRI; 096 OntologyIRIShortFormProvider sfp = new OntologyIRIShortFormProvider(); 097 shortName = sfp.getShortForm(IRI.create(ontologyIRI)); 098 physicalURI = ontologyIRI; 099 } 100 101 @Override 102 public String getOntologyShortName() { 103 return shortName; 104 } 105 106 @Override 107 public URI getOntologyURI() { 108 return ontologyURI; 109 } 110 111 @Override 112 public URI getPhysicalURI() { 113 return physicalURI; 114 } 115 116 @Override 117 public String getMetaData(Object key) { 118 return null; 119 } 120 121 } 122}