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 if (ext != null)
38 {
39 availableExtensions.put(ext.getName(),ext.getClass());
40 }
41 }
42 }
43
44 public Map<String, Class<? extends Extension>> getAvailableExtensions()
45 {
46 return availableExtensions;
47 }
48
49 public Class<? extends Extension> getExtension(String name)
50 {
51 return availableExtensions.get(name);
52 }
53
54 public Set<String> getExtensionNames()
55 {
56 return availableExtensions.keySet();
57 }
58
59 public boolean isAvailable(String name)
60 {
61 return availableExtensions.containsKey(name);
62 }
63
64 @Override
65 public Iterator<Class<? extends Extension>> iterator()
66 {
67 return availableExtensions.values().iterator();
68 }
69
70 public abstract Extension newInstance(ExtensionConfig config);
71
72 public void register(String name, Class<? extends Extension> extension)
73 {
74 availableExtensions.put(name,extension);
75 }
76
77 public void unregister(String name)
78 {
79 availableExtensions.remove(name);
80 }
81 }