1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.id;
18
19 import java.io.Serializable;
20 import java.util.Collection;
21 import java.util.Iterator;
22
23
24
25
26
27
28
29
30
31 public class CompositeIdentifierGenerator extends AbstractStringIdentifierGenerator implements Serializable {
32
33
34
35
36 private static final long serialVersionUID = 20060206L;
37
38
39 private final StringIdentifierGenerator[] identifierGenerators;
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public static StringIdentifierGenerator getInstance(
55 StringIdentifierGenerator[] generators) {
56 if (generators == null) {
57 throw new IllegalArgumentException(
58 "Generator array must not be null");
59 }
60 if (generators.length == 0) {
61 throw new IllegalArgumentException(
62 "Generator array must not be empty");
63 }
64 StringIdentifierGenerator[] generatorsCopy =
65 new StringIdentifierGenerator[generators.length];
66 for (int i = 0; i < generators.length; i++) {
67 if (generators[i] == null) {
68 throw new IllegalArgumentException(
69 "Generators must not be null");
70 }
71 generatorsCopy[i] = generators[i];
72 }
73 return new CompositeIdentifierGenerator(generatorsCopy);
74 }
75
76
77
78
79
80
81
82
83
84
85
86
87 public static StringIdentifierGenerator getInstance(Collection generators) {
88 if (generators == null) {
89 throw new IllegalArgumentException(
90 "Generator collection must not be null");
91 }
92 if (generators.size() == 0) {
93 throw new IllegalArgumentException(
94 "Generator collection must not be empty");
95 }
96 StringIdentifierGenerator[] generatorsCopy =
97 new StringIdentifierGenerator[generators.size()];
98 int i = 0;
99 Iterator it = generators.iterator();
100 while (it.hasNext()) {
101 generatorsCopy[i] = (StringIdentifierGenerator) it.next();
102 if (generatorsCopy[i] == null) {
103 throw new IllegalArgumentException(
104 "Generators must not be null");
105 }
106 i++;
107 }
108 return new CompositeIdentifierGenerator(generatorsCopy);
109 }
110
111
112
113
114
115
116
117
118
119 public CompositeIdentifierGenerator(
120 StringIdentifierGenerator[] identifierGenerators) {
121 super();
122 this.identifierGenerators = identifierGenerators;
123 }
124
125 public String nextStringIdentifier() {
126 StringBuffer buffer = new StringBuffer();
127 for (int i = 0; i < identifierGenerators.length; i++) {
128 buffer.append(identifierGenerators[i].nextStringIdentifier());
129 }
130 return buffer.toString();
131 }
132
133 public long maxLength() {
134 long length = 0;
135 for (int i = 0; i < identifierGenerators.length; i++) {
136 length += identifierGenerators[i].maxLength();
137 }
138 return length;
139 }
140
141 public long minLength() {
142 long length = 0;
143 for (int i = 0; i < identifierGenerators.length; i++) {
144 length += identifierGenerators[i].minLength();
145 }
146 return length;
147 }
148
149
150
151
152
153
154
155 public StringIdentifierGenerator[] getIdentifierGenerators() {
156 int len = identifierGenerators.length;
157 StringIdentifierGenerator[] out =
158 new StringIdentifierGenerator[len];
159 System.arraycopy(identifierGenerators, 0, out, 0, len);
160 return out;
161 }
162
163 }