/******************************************************************************* * Copyright (c) 2010-2011 VIVO Harvester Team. For full list of contributors, please see the AUTHORS file provided. * All rights reserved. * This program and the accompanying materials are made available under the terms of the new BSD license which accompanies this distribution, and is available at http://www.opensource.org/licenses/bsd-license.html ******************************************************************************/ package org.vivoweb.harvester.util.repo; import java.io.IOException; import java.util.HashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.vivoweb.harvester.util.FileAide; import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.tdb.TDBFactory; /** * Connection Helper for TDB Jena Models * @author Christopher Haines (hainesc@ctrip.ufl.edu) */ public class TDBJenaConnect extends JenaConnect { /** * SLF4J Logger */ private static Logger log = LoggerFactory.getLogger(TDBJenaConnect.class); /** * Mapping of directory to Dataset */ private static HashMap<String, Dataset> dirDatasets = new HashMap<String, Dataset>(); /** * the TDB directory name */ private final String dbDir; /** * Clone Constructor * @param original the original to clone * @param modelName the modelname to connect to */ private TDBJenaConnect(TDBJenaConnect original, String modelName) { this(original.dbDir, modelName); } /** * Constructor (Default Model) * @param dbDir tdb directory name */ public TDBJenaConnect(String dbDir) { this(dbDir, null); } /** * Constructor (TDB Named Model) * @param dbDir tdb directory name * @param modelName the model to connect to */ public TDBJenaConnect(String dbDir, String modelName) { this.dbDir = dbDir; try { FileAide.createFolder(this.dbDir); } catch(IOException e) { throw new IllegalArgumentException("Invalid Directory", e); } if(modelName != null) { setModelName(modelName); } else { setModelName("urn:x-arq:DefaultGraph"); } setJenaModel(getDataset().getNamedModel(getModelName())); } @Override public Dataset getDataset() { if(!dirDatasets.containsKey(this.dbDir)) { dirDatasets.put(this.dbDir, TDBFactory.createDataset(this.dbDir)); } return dirDatasets.get(this.dbDir); } @Override public JenaConnect neighborConnectClone(String modelName) { return new TDBJenaConnect(this, modelName); } @Override public void close() { super.close(); getJenaModel().close(); } @Override public void printParameters() { super.printParameters(); log.trace("type: 'tdb'"); log.trace("dbDir: '" + this.dbDir + "'"); } @Override public void sync() { // Do Nothing } }