package net.enilink.komma.edit.provider; import java.util.Locale; import net.enilink.composition.ClassDefiner; import net.enilink.composition.ClassResolver; import net.enilink.composition.CompositionModule; import net.enilink.composition.DefaultObjectFactory; import net.enilink.composition.ObjectFactory; import net.enilink.composition.mappers.DefaultRoleMapper; import net.enilink.composition.mappers.RoleMapper; import net.enilink.composition.mappers.TypeFactory; import com.google.inject.AbstractModule; import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.Provides; import com.google.inject.Singleton; import com.google.inject.TypeLiteral; import net.enilink.komma.common.adapter.IAdapterFactory; import net.enilink.komma.core.IEntityManagerFactory; import net.enilink.komma.core.KommaModule; import net.enilink.komma.core.URI; import net.enilink.komma.core.URIs; public class DynamicAdapterFactory implements IAdapterFactory { protected class AdapterCompositionModule extends AbstractModule { private KommaModule module; private Locale locale; protected AdapterCompositionModule(IEntityManagerFactory factory, KommaModule module, Locale locale) { this.module = module; this.locale = locale == null ? Locale.getDefault() : locale; } @Provides @Singleton protected ClassDefiner provideClassDefiner(ClassLoader classLoader) { return new ClassDefiner(classLoader); } @Provides @Singleton protected RoleMapper<URI> provideRoleMapper(TypeFactory<URI> typeFactory) { RoleMapper<URI> roleMapper = new DefaultRoleMapper<URI>(typeFactory); // RoleClassLoader<URI> loader = new RoleClassLoader<URI>(); // loader.setClassLoader(module.getClassLoader()); // loader.setRoleMapper(roleMapper); // loader.setTypeFactory(typeFactory); // // List<URL> libraries = module.getLibraries(); // loader.load(libraries); for (KommaModule.Association e : module.getConcepts()) { if (e.getRdfType() == null) { roleMapper.addConcept(e.getJavaClass()); } else { roleMapper.addConcept(e.getJavaClass(), typeFactory.createType(e.getRdfType())); } } for (KommaModule.Association e : module.getBehaviours()) { if (e.getRdfType() == null) { roleMapper.addBehaviour(e.getJavaClass()); } else { roleMapper.addBehaviour(e.getJavaClass(), typeFactory.createType(e.getRdfType())); } } // roleMapper.addBehaviour(SesameEntitySupport.class, // RDFS.RESOURCE); return roleMapper; } @Override protected void configure() { install(new CompositionModule<URI>()); bind(Locale.class).toInstance(locale); bind(new Key<ObjectFactory<URI>>() { }).to(new TypeLiteral<DefaultObjectFactory<URI>>() { }); bind(new TypeLiteral<ClassResolver<URI>>() { }).in(Singleton.class); } @Provides @Singleton protected TypeFactory<URI> provideTypeFactory() { return new TypeFactory<URI>() { @Override public URI createType(String type) { return URIs.createURI(type); } @Override public String toString(URI type) { return type.toString(); } }; } @Provides @Singleton protected KommaModule provideKommaModule() { return module; } @Provides @Singleton protected ClassLoader provideClassLoader() { return module.getClassLoader(); } } public DynamicAdapterFactory(KommaModule module) { } protected Module createModule() { return new CompositionModule<String>() { @Override protected void configure() { super.configure(); bind(new Key<ObjectFactory<String>>() { }).to(new TypeLiteral<DefaultObjectFactory<String>>() { }); bind(new TypeLiteral<ClassResolver<String>>() { }); } @Override protected void initRoleMapper(RoleMapper<String> roleMapper, TypeFactory<String> typeFactory) { } @Provides @Singleton protected TypeFactory<String> provideTypeFactory() { return new TypeFactory<String>() { @Override public String createType(String type) { return type; } @Override public String toString(String type) { return type; } }; } }; } @Override public Object adapt(Object object, Object type) { // TODO Auto-generated method stub return null; } @Override public boolean isFactoryForType(Object type) { // TODO Auto-generated method stub return false; } }