1 package org.openrdf.elmo.base;
2
3 import org.openrdf.elmo.RdfTypeFactory;
4 import org.openrdf.elmo.RoleMapper;
5 import org.openrdf.elmo.RoleMapperFactory;
6 import org.openrdf.elmo.rolemapper.ComplexMapper;
7 import org.openrdf.elmo.rolemapper.DirectMapper;
8 import org.openrdf.elmo.rolemapper.HierarchicalRoleMapper;
9 import org.openrdf.elmo.rolemapper.RoleClassLoader;
10 import org.openrdf.elmo.rolemapper.RoleMapperImpl;
11 import org.openrdf.elmo.rolemapper.SimpleRoleMapper;
12 import org.openrdf.elmo.rolemapper.TypeMapper;
13
14 public abstract class RoleMapperFactoryBase<URI> implements
15 RoleMapperFactory<URI> {
16 private ClassLoader cl;
17
18 public void setClassLoader(ClassLoader cl) {
19 this.cl = cl;
20 }
21
22 public RoleMapper<URI> createRoleMapper() {
23 ComplexMapper role = createMapper();
24 RoleMapperImpl mapper = new RoleMapperImpl(role);
25 mapper.setRdfTypeFactory(getRdfTypeFactory());
26 RoleClassLoader loader = new RoleClassLoader();
27 loader.setClassLoader(cl);
28 loader.setRoleMapper(mapper);
29 loader.loadClasses("META-INF/org.openrdf.elmo.roles");
30 loader.loadClasses("META-INF/org.openrdf.elmo.factories");
31 return mapper;
32 }
33
34 private ComplexMapper createMapper() {
35 DirectMapper d = new DirectMapper();
36 TypeMapper t = new TypeMapper();
37 SimpleRoleMapper r = new SimpleRoleMapper();
38 return new ComplexMapper(new HierarchicalRoleMapper(d, t, r));
39 }
40
41 protected abstract RdfTypeFactory<URI> getRdfTypeFactory();
42 }