/*
* Copyright (c) 2010 Mysema Ltd.
* All rights reserved.
*
*/
package com.mysema.rdfbean.object;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import com.mysema.rdfbean.CORE;
import com.mysema.rdfbean.model.RDF;
import com.mysema.rdfbean.model.RDFS;
import com.mysema.rdfbean.model.UID;
import com.mysema.rdfbean.model.XSD;
import com.mysema.rdfbean.owl.OWL;
import com.mysema.rdfbean.xsd.ConverterRegistry;
/**
* @author tiwe
*
*/
class SimpleConfiguration implements Configuration {
private static final Set<String> buildinNamespaces = new HashSet<String>();
static {
buildinNamespaces.add(RDF.NS);
buildinNamespaces.add(RDFS.NS);
buildinNamespaces.add(XSD.NS);
buildinNamespaces.add(OWL.NS);
buildinNamespaces.add(CORE.NS);
}
private final Set<String> restrictedResources = new HashSet<String>(buildinNamespaces);
private final Set<MappedClass> mappedClasses;
private final Set<Class<?>> polymorphicClasses = new HashSet<Class<?>>();
private final Map<UID, MappedClass> uidToMappedClass = new HashMap<UID, MappedClass>();
private final Map<Class<?>, MappedClass> classToMappedClass = new HashMap<Class<?>, MappedClass>();
private final ConverterRegistry converterRegistry;
public SimpleConfiguration(
ConverterRegistry converterRegistry,
Set<MappedClass> mappedClasses) {
this.converterRegistry = converterRegistry;
this.mappedClasses = mappedClasses;
for (MappedClass mappedClass : mappedClasses) {
uidToMappedClass.put(mappedClass.getUID(), mappedClass);
classToMappedClass.put(mappedClass.getJavaClass(), mappedClass);
for (MappedClass superClass : mappedClass.getMappedSuperClasses()) {
polymorphicClasses.add(superClass.getJavaClass());
}
}
}
@Override
public boolean allowCreate(Class<?> clazz) {
return true;
}
@Override
public boolean allowRead(MappedPath path) {
return true;
}
@Override
public UID createURI(Object instance) {
Class<?> clazz = instance.getClass();
UID context = getMappedClass(clazz).getContext();
if (context != null) {
return new UID(context.getId() + "#", clazz.getSimpleName() + "-" + UUID.randomUUID().toString());
}
return null;
}
@Override
public ConverterRegistry getConverterRegistry() {
return converterRegistry;
}
@Override
public MappedClass getMappedClass(Class<?> javaClass) {
return classToMappedClass.get(javaClass);
}
@Override
public List<MappedClass> getMappedClasses(UID uid) {
MappedClass mappedClass = uidToMappedClass.get(uid);
return mappedClass != null ? Collections.<MappedClass> singletonList(mappedClass) : Collections.<MappedClass> emptyList();
}
@Override
public Set<MappedClass> getMappedClasses() {
return mappedClasses;
}
public boolean isPolymorphic(Class<?> clazz) {
return polymorphicClasses.contains(clazz);
}
public boolean isMapped(Class<?> clazz) {
return classToMappedClass.containsKey(clazz);
}
@Override
public boolean isRestricted(UID uid) {
return restrictedResources.contains(uid.getId()) || restrictedResources.contains(uid.ns());
}
}