1 /*
2
3 dsh-codegen Source code generation suite.
4 Copyright (c) 2004-2013 held jointly by the individual authors.
5
6 This library is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as published
8 by the Free Software Foundation; either version 3 of the License, or (at
9 your option) any later version.
10
11 This library is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
15
16 You should have received a copy of the GNU Lesser General Public License
17 along with this library; if not, write to the Free Software Foundation,
18 Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
19
20 > http://www.fsf.org/licensing/licenses/lgpl.html
21 > http://www.opensource.org/licenses/lgpl-license.php
22
23 */
24 package org.dishevelled.codegen;
25
26 /**
27 * A description of a collection interface and implementation.
28 *
29 * @author Michael Heuer
30 */
31 public final class CollectionDescription
32 {
33 /** The interface name for this collection description. */
34 private final String interfaceName;
35
36 /** The interface description for this collection description. */
37 private final String interfaceDescription;
38
39 /** The interface package name for this collection description. */
40 private final String interfacePackageName;
41
42 /** The implementation name for this collection description. */
43 private final String implementationName;
44
45 /** The implementation package name for this collection description. */
46 private final String implementationPackageName;
47
48
49 /**
50 * Create a new collection description from the specified parameters.
51 *
52 * @param interfaceName interface name for this collection description
53 * @param interfaceDescription interface description for this collection description
54 * @param interfacePackageName interface package name for this collection description
55 * @param implementationName implementation name for this collection description
56 * @param implementationPackageName implementation package name for this collection description
57 */
58 public CollectionDescription(final String interfaceName,
59 final String interfaceDescription,
60 final String interfacePackageName,
61 final String implementationName,
62 final String implementationPackageName)
63 {
64 this.interfaceName = interfaceName;
65 this.interfaceDescription = interfaceDescription;
66 this.interfacePackageName = interfacePackageName;
67 this.implementationName = implementationName;
68 this.implementationPackageName = implementationPackageName;
69 }
70
71
72 /**
73 * Return the interface name for this collection description.
74 *
75 * @return the interface name for this collection description
76 */
77 public String getInterfaceName()
78 {
79 return interfaceName;
80 }
81
82 /**
83 * Return the interface description for this collection description.
84 *
85 * @return the interface description for this collection description
86 */
87 public String getInterfaceDescription()
88 {
89 return interfaceDescription;
90 }
91
92 /**
93 * Return the interface package name for this collection description.
94 *
95 * @return the interface package name for this collection description
96 */
97 public String getInterfacePackageName()
98 {
99 return interfacePackageName;
100 }
101
102 /**
103 * Return the implementation name for this collection description.
104 *
105 * @return the implementation name for this collection description
106 */
107 public String getImplementationName()
108 {
109 return implementationName;
110 }
111
112 /**
113 * Return the implementation package name for this collection description.
114 *
115 * @return the implementation package name for this collection description
116 */
117 public String getImplementationPackageName()
118 {
119 return implementationPackageName;
120 }
121
122
123 /** Collection description. */
124 public static final CollectionDescription COLLECTION =
125 new CollectionDescription("Collection", "collection", "java.util", "ArrayList", "java.util");
126
127 /** LinkedList description. */
128 public static final CollectionDescription LINKED_LIST =
129 new CollectionDescription("List", "list", "java.util", "LinkedList", "java.util");
130
131 /** ArrayList description. */
132 public static final CollectionDescription ARRAY_LIST =
133 new CollectionDescription("List", "list", "java.util", "ArrayList", "java.util");
134
135 /** HashSet description. */
136 public static final CollectionDescription HASH_SET =
137 new CollectionDescription("Set", "set", "java.util", "HashSet", "java.util");
138
139 /** LinkedHashSet description. */
140 public static final CollectionDescription LINKED_HASH_SET =
141 new CollectionDescription("Set", "set", "java.util", "LinkedHashSet", "java.util");
142
143 /** TreeSet description. */
144 public static final CollectionDescription TREE_SET =
145 new CollectionDescription("SortedSet", "sorted set", "java.util", "TreeSet", "java.util");
146
147
148 /**
149 * Choose a collection description that satisfies the specified parameters.
150 *
151 * @param indexed true if the collection should be indexed
152 * @param unique true if the collection should not allow duplicate elements
153 * @param ordered true if the collection should iterate over elements in <i>insertion-order</i>
154 * @param sorted true if the collection should iterate over elements in ascending element order,
155 * sorted according to the <i>natural ordering</i> of its elements (see Comparable), or by a Comparator
156 * provided at creation time
157 * @return a collection description that satisfies the specified parameters
158 */
159 public static CollectionDescription choose(final boolean indexed,
160 final boolean unique,
161 final boolean ordered,
162 final boolean sorted)
163 {
164 if (indexed && !ordered)
165 {
166 return ARRAY_LIST;
167 }
168 if (indexed && ordered)
169 {
170 return LINKED_LIST;
171 }
172 if (unique && !ordered && !sorted)
173 {
174 return HASH_SET;
175 }
176 if (unique && ordered && !sorted)
177 {
178 return LINKED_HASH_SET;
179 }
180 if (unique && sorted)
181 {
182 return TREE_SET;
183 }
184 return COLLECTION;
185 }
186 }