1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.websocket.api.extensions;
20
21 import java.util.HashMap;
22 import java.util.Iterator;
23 import java.util.Map;
24 import java.util.ServiceLoader;
25 import java.util.Set;
26
27 public abstract class ExtensionFactory implements Iterable<Class<? extends Extension>>
28 {
29 private ServiceLoader<Extension> extensionLoader = ServiceLoader.load(Extension.class);
30 private Map<String, Class<? extends Extension>> availableExtensions;
31
32 public ExtensionFactory()
33 {
34 availableExtensions = new HashMap<>();
35 for (Extension ext : extensionLoader)
36 {
37 availableExtensions.put(ext.getName(),ext.getClass());
38 }
39 }
40
41 public Map<String, Class<? extends Extension>> getAvailableExtensions()
42 {
43 return availableExtensions;
44 }
45
46 public Class<? extends Extension> getExtension(String name)
47 {
48 return availableExtensions.get(name);
49 }
50
51 public Set<String> getExtensionNames()
52 {
53 return availableExtensions.keySet();
54 }
55
56 public boolean isAvailable(String name)
57 {
58 return availableExtensions.containsKey(name);
59 }
60
61 @Override
62 public Iterator<Class<? extends Extension>> iterator()
63 {
64 return availableExtensions.values().iterator();
65 }
66
67 public abstract Extension newInstance(ExtensionConfig config);
68
69 public void register(String name, Class<? extends Extension> extension)
70 {
71 availableExtensions.put(name,extension);
72 }
73
74 public void unregister(String name)
75 {
76 availableExtensions.remove(name);
77 }
78 }