1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.uruma.desc;
17
18 import java.util.concurrent.ConcurrentMap;
19
20 import org.seasar.framework.util.Disposable;
21 import org.seasar.framework.util.DisposableUtil;
22 import org.seasar.framework.util.tiger.CollectionsUtil;
23 import org.seasar.uruma.desc.impl.FormDescImpl;
24
25
26
27
28
29
30 public class FormDescFactory {
31 private static volatile boolean initialized;
32
33 protected static final ConcurrentMap<Class<?>, FormDesc> formDescs = CollectionsUtil
34 .newConcurrentHashMap();
35
36
37
38
39 public static void initialize() {
40 DisposableUtil.add(new Disposable() {
41 public void dispose() {
42 FormDescFactory.dispose();
43 }
44 });
45 initialized = true;
46 }
47
48
49
50
51 public static synchronized void dispose() {
52 formDescs.clear();
53 initialized = false;
54 }
55
56
57
58
59
60
61
62
63 public static FormDesc getFormDesc(final Class<?> formClass) {
64 if (!initialized) {
65 initialize();
66 }
67 FormDesc formDesc = formDescs.get(formClass);
68 if (formDesc == null) {
69 formDesc = CollectionsUtil.putIfAbsent(formDescs, formClass,
70 new FormDescImpl(formClass));
71 }
72 return formDesc;
73 }
74 }