package org.wikier.trioo.jtrioo;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import org.wikier.trioo.jtrioo.common.Configuration;
import org.wikier.trioo.jtrioo.exceptions.NotRegistrableRDFClassException;
import org.wikier.trioo.jtrioo.helpers.TypeHelper;
import org.wikier.trioo.jtrioo.introspection.ResourceInstrospector;
import org.wikier.trioo.jtrioo.rdf.meta.RDFMetaResource;
public abstract class AbstractSession implements Session {
private static final Logger logger = Logger.getLogger(AbstractSession.class);
private Map<String,RDFMetaResource> resources;
private Configuration configuration;
public AbstractSession() {
this.resources = new HashMap<String,RDFMetaResource>();
}
@SuppressWarnings("rawtypes")
public void registerClass(Class resourceClass) throws NotRegistrableRDFClassException {
RDFMetaResource resource = ResourceInstrospector.getRDFMetaResource(resourceClass);
resources.put(resourceClass.getCanonicalName(), resource);
logger.debug("Registered RDF Resource for class " + resourceClass.getCanonicalName());
}
@SuppressWarnings("rawtypes")
public RDFMetaResource getMetaRDFResource(Class resourceClass) {
if (TypeHelper.isPrimitive(resourceClass)) {
logger.debug("Primitive types can not be registered");
return null;
} else {
String canonicalNane = resourceClass.getCanonicalName();
if (!resources.containsKey(canonicalNane)) {
logger.debug(canonicalNane + " was not previously registered, try to do it now...");
try {
this.registerClass(resourceClass);
} catch (NotRegistrableRDFClassException e) {
logger.error("Error registering class " + canonicalNane + ": " + e);
return null;
}
}
return resources.get(canonicalNane); //FIXME return an unmodifiable RDFMetaResource
}
}
@SuppressWarnings("rawtypes")
public Class getAssociatedClass(RDFMetaResource metaResource) {
for (RDFMetaResource mr : this.resources.values()) {
if (metaResource.compareTo(mr) == 0) {
return mr.getResourceClass();
}
}
return null;
}
public Configuration getConfiguration() {
return this.configuration;
}
public void setConfiguration(Configuration conf) {
this.configuration = conf;
}
}