/**
* <copyright>
* </copyright>
*
* $Id$
*/
package net.enilink.komma.rdfs.edit;
import java.util.Arrays;
import java.util.Collection;
import java.util.Set;
import net.enilink.vocab.rdf.RDF;
import net.enilink.vocab.rdfs.RDFS;
import net.enilink.komma.common.util.IResourceLocator;
import net.enilink.komma.edit.provider.ReflectiveItemProviderAdapterFactory;
import net.enilink.komma.em.concepts.IClass;
import net.enilink.komma.em.concepts.IProperty;
import net.enilink.komma.em.concepts.IResource;
import net.enilink.komma.core.IEntity;
import net.enilink.komma.core.URI;
/**
* This is the factory that is used to provide the interfaces needed to support
* Viewers.
*/
public class RDFSItemProviderAdapterFactory extends
ReflectiveItemProviderAdapterFactory {
public RDFSItemProviderAdapterFactory() {
super(RDFSEditPlugin.INSTANCE, RDFS.NAMESPACE_URI, RDF.NAMESPACE_URI);
}
protected RDFSItemProviderAdapterFactory(IResourceLocator resourceLocator,
URI... namespaceURIs) {
super(resourceLocator, namespaceURIs);
}
@Override
protected Collection<IClass> getTypes(Object object) {
// classes
if (object instanceof IClass) {
return Arrays.asList(((IEntity) object).getEntityManager().find(
RDFS.TYPE_CLASS, IClass.class));
}
if (object instanceof IProperty) {
return Arrays.asList(((IEntity) object).getEntityManager().find(
RDF.TYPE_PROPERTY, IClass.class));
}
// others
Set<IClass> classes = ((IResource) object).getDirectNamedClasses()
.toSet();
return classes;
}
@Override
protected Object createItemProvider(Object object,
Collection<IClass> types, Object providerType) {
if (object instanceof IClass) {
return new RDFSClassItemProvider(this, resourceLocator, types);
}
if (object instanceof IProperty) {
return new RDFSPropertyItemProvider(this, resourceLocator, types);
}
return null;
}
}