package org.rdfhdt.hdt.hdt;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import org.rdfhdt.hdt.enums.RDFNotation;
import org.rdfhdt.hdt.exceptions.NotFoundException;
import org.rdfhdt.hdt.exceptions.ParserException;
import org.rdfhdt.hdt.hdt.impl.HDTImpl;
import org.rdfhdt.hdt.hdt.impl.TempHDTImporterOnePass;
import org.rdfhdt.hdt.hdt.impl.TempHDTImporterTwoPass;
import org.rdfhdt.hdt.header.HeaderUtil;
import org.rdfhdt.hdt.listener.ProgressListener;
import org.rdfhdt.hdt.options.HDTOptions;
import org.rdfhdt.hdt.options.HDTSpecification;
import org.rdfhdt.hdt.triples.IteratorTripleString;
import org.rdfhdt.hdt.util.StopWatch;
public class HDTManagerImpl extends HDTManager {
@Override
public HDTOptions doReadOptions(String file) throws IOException {
return new HDTSpecification(file);
}
@Override
public HDT doLoadHDT(String hdtFileName, ProgressListener listener) throws IOException {
HDTPrivate hdt = new HDTImpl(new HDTSpecification());
hdt.loadFromHDT(hdtFileName, listener);
return hdt;
}
@Override
protected HDT doMapHDT(String hdtFileName, ProgressListener listener) throws IOException {
HDTPrivate hdt = new HDTImpl(new HDTSpecification());
hdt.mapFromHDT(new File(hdtFileName), 0, listener);
return hdt;
}
@Override
public HDT doLoadHDT(InputStream hdtFile, ProgressListener listener) throws IOException {
HDTPrivate hdt = new HDTImpl(new HDTSpecification());
hdt.loadFromHDT(hdtFile, listener);
return hdt;
}
@Override
public HDT doLoadIndexedHDT(String hdtFileName, ProgressListener listener) throws IOException {
HDTPrivate hdt = new HDTImpl(new HDTSpecification());
hdt.loadFromHDT(hdtFileName, listener);
hdt.loadOrCreateIndex(listener);
return hdt;
}
@Override
protected HDT doMapIndexedHDT(String hdtFileName, ProgressListener listener) throws IOException {
HDTPrivate hdt = new HDTImpl(new HDTSpecification());
hdt.mapFromHDT(new File(hdtFileName), 0, listener);
hdt.loadOrCreateIndex(listener);
return hdt;
}
@Override
public HDT doLoadIndexedHDT(InputStream hdtFile, ProgressListener listener) throws IOException {
HDTPrivate hdt = new HDTImpl(new HDTSpecification());
hdt.loadFromHDT(hdtFile, listener);
hdt.loadOrCreateIndex(listener);
return hdt;
}
@Override
public HDT doIndexedHDT(HDT hdt, ProgressListener listener) {
((HDTPrivate)hdt).loadOrCreateIndex(listener);
return hdt;
}
@Override
public HDT doGenerateHDT(String rdfFileName, String baseURI, RDFNotation rdfNotation, HDTOptions spec, ProgressListener listener) throws IOException, ParserException {
// Let implementations override the one/two pass.
try {
HDTFactory.getTempFactory().checkTwoPass(spec);
} catch (Exception e) {
}
//choose the importer
String loaderType = spec.get("loader.type");
TempHDTImporter loader;
if ("two-pass".equals(loaderType)) {
loader = new TempHDTImporterTwoPass();
} else {
loader = new TempHDTImporterOnePass();
}
StopWatch st = new StopWatch();
// Create TempHDT
TempHDT modHdt = loader.loadFromRDF(spec, rdfFileName, baseURI, rdfNotation, listener);
// Convert to HDT
HDTImpl hdt = new HDTImpl(spec);
hdt.loadFromModifiableHDT(modHdt, listener);
hdt.populateHeaderStructure(modHdt.getBaseURI());
// Add file size to Header
try {
long originalSize = HeaderUtil.getPropertyLong(modHdt.getHeader(), "_:statistics", HDTVocabulary.ORIGINAL_SIZE);
hdt.getHeader().insert("_:statistics", HDTVocabulary.ORIGINAL_SIZE, originalSize);
} catch (NotFoundException e) {
}
System.out.println("File converted in: "+st.stopAndShow());
modHdt.close();
return hdt;
}
@Override
public HDT doGenerateHDT(IteratorTripleString triples, String baseURI, HDTOptions spec, ProgressListener listener) throws IOException {
//choose the importer
TempHDTImporterOnePass loader = new TempHDTImporterOnePass();
StopWatch st = new StopWatch();
// Create TempHDT
TempHDT modHdt = loader.loadFromTriples(spec, triples, baseURI, listener);
// Convert to HDT
HDTImpl hdt = new HDTImpl(spec);
hdt.loadFromModifiableHDT(modHdt, listener);
hdt.populateHeaderStructure(modHdt.getBaseURI());
// Add file size to Header
try {
long originalSize = HeaderUtil.getPropertyLong(modHdt.getHeader(), "_:statistics", HDTVocabulary.ORIGINAL_SIZE);
hdt.getHeader().insert("_:statistics", HDTVocabulary.ORIGINAL_SIZE, originalSize);
} catch (NotFoundException e) {
}
System.out.println("File converted in: "+st.stopAndShow());
modHdt.close();
return hdt;
}
}