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}