1 |
| |
2 |
| |
3 |
| |
4 |
| |
5 |
| |
6 |
| |
7 |
| |
8 |
| |
9 |
| |
10 |
| |
11 |
| |
12 |
| |
13 |
| |
14 |
| |
15 |
| package org.apache.tapestry.util; |
16 |
| |
17 |
| import java.util.HashMap; |
18 |
| import java.util.Map; |
19 |
| |
20 |
| import org.apache.hivemind.util.Defense; |
21 |
| |
22 |
| |
23 |
| |
24 |
| |
25 |
| |
26 |
| |
27 |
| |
28 |
| |
29 |
| |
30 |
| public class IdAllocator |
31 |
| { |
32 |
| private static final String SEPARATOR = "_"; |
33 |
| |
34 |
| private final Map _generatorMap = new HashMap(); |
35 |
| |
36 |
| private final String _namespace; |
37 |
| |
38 |
| private static class NameGenerator |
39 |
| { |
40 |
| private final String _baseId; |
41 |
| |
42 |
| private int _index; |
43 |
| |
44 |
5612
| NameGenerator(String baseId)
|
45 |
| { |
46 |
5612
| _baseId = baseId + SEPARATOR;
|
47 |
| } |
48 |
| |
49 |
410
| public String nextId()
|
50 |
| { |
51 |
410
| return _baseId + _index++;
|
52 |
| } |
53 |
| } |
54 |
| |
55 |
1932
| public IdAllocator()
|
56 |
| { |
57 |
1932
| this("");
|
58 |
| } |
59 |
| |
60 |
2090
| public IdAllocator(String namespace)
|
61 |
| { |
62 |
2090
| Defense.notNull(namespace, "namespace");
|
63 |
| |
64 |
2090
| _namespace = namespace;
|
65 |
| } |
66 |
| |
67 |
| |
68 |
| |
69 |
| |
70 |
| |
71 |
| |
72 |
6020
| public String allocateId(String name)
|
73 |
| { |
74 |
6020
| String key = name + _namespace;
|
75 |
| |
76 |
6020
| NameGenerator g = (NameGenerator) _generatorMap.get(key);
|
77 |
6020
| String result = null;
|
78 |
| |
79 |
6020
| if (g == null)
|
80 |
| { |
81 |
5612
| g = new NameGenerator(key);
|
82 |
5612
| result = key;
|
83 |
| } |
84 |
| else |
85 |
408
| result = g.nextId();
|
86 |
| |
87 |
| |
88 |
| |
89 |
| |
90 |
6020
| while (_generatorMap.containsKey(result))
|
91 |
2
| result = g.nextId();
|
92 |
| |
93 |
6020
| _generatorMap.put(result, g);
|
94 |
| |
95 |
6020
| return result;
|
96 |
| } |
97 |
| |
98 |
| |
99 |
| |
100 |
| |
101 |
| |
102 |
676
| public void clear()
|
103 |
| { |
104 |
676
| _generatorMap.clear();
|
105 |
| } |
106 |
| } |