1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.maven.archetype.ui;
21
22
23 import org.apache.maven.archetype.catalog.Archetype;
24 import org.apache.maven.archetype.common.ArchetypeDefinition;
25 import org.codehaus.plexus.components.interactivity.Prompter;
26 import org.codehaus.plexus.components.interactivity.PrompterException;
27 import org.codehaus.plexus.logging.AbstractLogEnabled;
28
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.HashMap;
32 import java.util.Iterator;
33 import java.util.List;
34 import java.util.Map;
35
36
37 public class DefaultArchetypeSelectionQueryer
38 extends AbstractLogEnabled
39 implements ArchetypeSelectionQueryer
40 {
41
42 private Prompter prompter;
43
44 public boolean confirmSelection( ArchetypeDefinition archetypeDefinition )
45 throws
46 PrompterException
47 {
48 String query =
49 "Confirm archetype selection: \n" + archetypeDefinition.getGroupId() + "/"
50 + archetypeDefinition.getName() + "\n";
51
52 String answer = prompter.prompt( query, Arrays.asList( new String[]{"Y", "N"} ), "Y" );
53
54 return "Y".equalsIgnoreCase( answer );
55 }
56
57 public Archetype selectArchetype( List archetypes )
58 throws PrompterException
59 {
60 String query = "Choose archetype:\n";
61 Map answerMap = new HashMap();
62 List answers = new ArrayList();
63 Iterator archetypeIterator = archetypes.iterator();
64 int counter = 1;
65 while ( archetypeIterator.hasNext() )
66 {
67 org.apache.maven.archetype.catalog.Archetype archetype = (org.apache.maven.archetype.catalog.Archetype) archetypeIterator.next();
68
69 answerMap.put( "" + counter, archetype );
70 query +=
71 "" + counter + ": " + archetype.getArtifactId() + " (" + archetype.getDescription() + ":"
72 + archetype.getArtifactId() + ")\n";
73 answers.add( "" + counter );
74
75 counter++;
76 }
77 query += "Choose a number: ";
78
79 String answer = prompter.prompt( query, answers );
80
81 return (org.apache.maven.archetype.catalog.Archetype) answerMap.get( answer );
82 }
83
84 public Archetype selectArchetype( Map catalogs )
85 throws PrompterException
86 {
87 return selectArchetype( catalogs, null );
88 }
89
90 public Archetype selectArchetype( Map catalogs, ArchetypeDefinition defaultDefinition )
91 throws PrompterException
92 {
93 String query = "Choose archetype:\n";
94 Map answerMap = new HashMap();
95 List answers = new ArrayList();
96
97 Iterator catalogIterator = catalogs.keySet().iterator();
98 int counter = 1;
99 int defaultSelection = 0;
100 while ( catalogIterator.hasNext() )
101 {
102 String catalog = (String) catalogIterator.next();
103
104 Iterator archetypeIterator = ((List) catalogs.get( catalog )).iterator();
105 while ( archetypeIterator.hasNext() )
106 {
107 org.apache.maven.archetype.catalog.Archetype archetype = (org.apache.maven.archetype.catalog.Archetype) archetypeIterator.next();
108
109 answerMap.put( "" + counter, archetype );
110 query +=
111 "" + counter + ": " + catalog +
112 " -> " + archetype.getArtifactId() + " (" + archetype.getDescription() + ")\n";
113 answers.add( "" + counter );
114
115
116 if ( defaultDefinition != null && archetype.getGroupId().equals( defaultDefinition.getGroupId() ) &&
117 archetype.getArtifactId().equals( defaultDefinition.getArtifactId() ) )
118 {
119 defaultSelection = counter;
120 }
121
122 counter++;
123 }
124
125 }
126
127 query += "Choose a number: ";
128
129 String answer;
130 if ( defaultSelection == 0 )
131 {
132 answer = prompter.prompt( query, answers );
133 }
134 else
135 {
136 answer = prompter.prompt( query, answers, Integer.toString( defaultSelection ) );
137 }
138
139 return (org.apache.maven.archetype.catalog.Archetype) answerMap.get( answer );
140 }
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224 public void setPrompter( Prompter prompter )
225 {
226 this.prompter = prompter;
227 }
228 }