/*
* Copyright (c) 2010 Mysema Ltd.
* All rights reserved.
*
*/
package com.mysema.rdfbean.model;
import java.util.Collection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.mysema.commons.lang.CloseableIterator;
import com.mysema.query.QueryMetadata;
/**
* MiniConnection is an RDFConnection implementation for the MiniRepository
*
* @author sasa
*
*/
public class MiniConnection implements RDFConnection {
private static final Logger logger = LoggerFactory.getLogger(MiniConnection.class);
private final MiniRepository repository;
public MiniConnection(MiniRepository repository) {
this.repository = repository;
}
public void addStatements(STMT... stmts) {
this.repository.add(stmts);
}
@Override
public RDFBeanTransaction beginTransaction(boolean readOnly, int txTimeout, int isolationLevel) {
throw new UnsupportedOperationException();
}
@Override
public void clear() {
}
@Override
public void close() {
}
@Override
public BID createBNode() {
return new BID();
}
@Override
public <D, Q> Q createUpdate(UpdateLanguage<D, Q> updateLanguage, D definition) {
throw new UnsupportedOperationException(updateLanguage.toString());
}
@SuppressWarnings("unchecked")
@Override
public <D, Q> Q createQuery(QueryLanguage<D, Q> queryLanguage, D definition) {
if (queryLanguage == QueryLanguage.TUPLE
|| queryLanguage == QueryLanguage.GRAPH
|| queryLanguage == QueryLanguage.BOOLEAN) {
if (logger.isDebugEnabled()) {
QueryMetadata metadata = (QueryMetadata) definition;
logger.debug(queryLanguage + " : " + metadata.getWhere().toString());
}
QueryRDFVisitor visitor = new QueryRDFVisitor(this);
return (Q) visitor.visit((QueryMetadata) definition, queryLanguage);
} else {
throw new UnsupportedOperationException(queryLanguage.toString());
}
}
@Override
public boolean exists(ID subject, UID predicate, NODE object, UID context, boolean includeInferred) {
if (logger.isDebugEnabled()) {
logger.debug("exists " + subject + " " + predicate + " " + object + " " + context);
}
return repository.exists(subject, predicate, object, context);
}
@Override
public CloseableIterator<STMT> findStatements(ID subject, UID predicate,
NODE object, UID context, boolean includeInferred) {
if (logger.isDebugEnabled()) {
logger.debug("find " + subject + " " + predicate + " " + object + " " + context);
}
return repository.findStatements(subject, predicate, object, context, includeInferred);
}
@Override
public long getNextLocalId() {
return repository.getNextLocalId();
}
public MiniRepository getRepository() {
return repository;
}
@Override
public void remove(ID subject, UID predicate, NODE object, UID context) {
repository.remove(subject, predicate, object, context);
}
@Override
public void update(Collection<STMT> removedStatements, Collection<STMT> addedStatements) {
if (removedStatements != null) {
repository.removeStatements(removedStatements);
}
if (addedStatements != null) {
repository.add(addedStatements.toArray(new STMT[addedStatements.size()]));
}
}
@Override
public QueryOptions getQueryOptions() {
return QueryOptions.PRESERVE_STRING_OPS;
}
@Override
public InferenceOptions getInferenceOptions() {
return InferenceOptions.DEFAULT;
}
}