1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.gwe.drivers;
18
19 import java.util.EnumMap;
20 import java.util.Map;
21
22 import org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24 import org.gwe.utils.security.ProtocolScheme;
25 import org.gwe.utils.security.ResourceLink;
26
27
28
29
30
31 public class ResourceHandleFactory extends EnumMap<ProtocolScheme, Class> {
32
33 private static Log log = LogFactory.getLog(ResourceHandleFactory.class);
34
35 public ResourceHandleFactory(Map<ProtocolScheme, Class> values) {
36 this();
37 this.putAll(values);
38 }
39
40 public ResourceHandleFactory() {
41 super(ProtocolScheme.class);
42 }
43
44 public <HANDLE_TYPE extends ResourceHandle> HANDLE_TYPE createHandle(ResourceLink<HANDLE_TYPE> link) throws HandleCreationException {
45 try {
46 return (HANDLE_TYPE) getHandleClass(link).getConstructor(ResourceLink.class).newInstance(link);
47 } catch (Exception e) {
48 String msg = "Problems creating handle for resource '" + link.getURI() + "' using reflection";
49 log.warn(msg, e);
50 throw new HandleCreationException(msg, e);
51 }
52 }
53
54 public <HANDLE_TYPE extends ResourceHandle> Class<HANDLE_TYPE> getHandleClass(ResourceLink<HANDLE_TYPE> link) {
55 return get(link.getURI().getProtocolScheme());
56 }
57 }