Author: hboutemy Date: Sat Jul 16 11:47:23 2011 New Revision: 1147404 URL: http://svn.apache.org/viewvc?rev=1147404&view=rev Log: o avoid recursive call to select archetype o reset to initial filter at each iteration
Modified: maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryer.java maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java Modified: maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryer.java URL: http://svn.apache.org/viewvc/maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryer.java?rev=1147404&r1=1147403&r2=1147404&view=diff ============================================================================== --- maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryer.java (original) +++ maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelectionQueryer.java Sat Jul 16 11:47:23 2011 @@ -71,89 +71,87 @@ public class DefaultArchetypeSelectionQu public Archetype selectArchetype( Map<String, List<Archetype>> catalogs, ArchetypeDefinition defaultDefinition ) throws PrompterException { - StringBuilder query = new StringBuilder( "Choose archetype:\n" ); + Archetype selection = null; + Map<String, List<Archetype>> filteredCatalogs = catalogs; - Set<String> archetypeKeys = new HashSet<String>(); - List<String> answers = new ArrayList<String>(); - Map<String, Archetype> archetypeAnswerMap = new HashMap<String, Archetype>(); + do + { + StringBuilder query = new StringBuilder( "Choose archetype:\n" ); - int counter = 1; - int defaultSelection = 0; + Set<String> archetypeKeys = new HashSet<String>(); + List<String> answers = new ArrayList<String>(); + Map<String, Archetype> archetypeAnswerMap = new HashMap<String, Archetype>(); - for ( Map.Entry<String, List<Archetype>> entry : catalogs.entrySet() ) - { - String catalog = entry.getKey(); + int counter = 0; + int defaultSelection = 0; - for ( Archetype archetype : entry.getValue() ) + for ( Map.Entry<String, List<Archetype>> entry : filteredCatalogs.entrySet() ) { - String archetypeKey = archetype.getGroupId() + ":" + archetype.getArtifactId(); + String catalog = entry.getKey(); - if ( !archetypeKeys.add( archetypeKey ) ) + for ( Archetype archetype : entry.getValue() ) { - continue; - } + String archetypeKey = archetype.getGroupId() + ":" + archetype.getArtifactId(); - String description = archetype.getDescription(); - if ( description == null ) - { - description = "-"; - } - - String answer = String.valueOf( counter ); + if ( !archetypeKeys.add( archetypeKey ) ) + { + continue; + } - query.append( - answer + ": " + catalog + " -> " + archetype.getGroupId() + ":" + archetype.getArtifactId() + " (" - + description + ")\n" ); + counter++; - answers.add( answer ); + String description = archetype.getDescription(); + if ( description == null ) + { + description = "-"; + } - archetypeAnswerMap.put( answer, archetype ); + String answer = String.valueOf( counter ); - // the version is not tested. This is intentional. - if ( defaultDefinition != null && archetype.getGroupId().equals( defaultDefinition.getGroupId() ) - && archetype.getArtifactId().equals( defaultDefinition.getArtifactId() ) ) - { - defaultSelection = counter; - } + query.append( answer + ": " + catalog + " -> " + archetype.getGroupId() + ":" + + archetype.getArtifactId() + " (" + description + ")\n" ); - counter++; - } + answers.add( answer ); - } + archetypeAnswerMap.put( answer, archetype ); - query.append( "Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): " ); + // the version is not tested. This is intentional. + if ( defaultDefinition != null && archetype.getGroupId().equals( defaultDefinition.getGroupId() ) + && archetype.getArtifactId().equals( defaultDefinition.getArtifactId() ) ) + { + defaultSelection = counter; + } + } + } - String answer; - if ( defaultSelection == 0 ) - { - answer = prompter.prompt( query.toString() ); - } - else - { - answer = prompter.prompt( query.toString(), Integer.toString( defaultSelection ) ); - } + if ( counter == 0 ) + { + query.append( " Your filter doesn't match any archetype (hint: enter to return to initial list)\n" ); + } - if ( !NumberUtils.isNumber( answer ) ) - { - // not a number so apply filter and ask again + query.append( "Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): " ); - Map<String, List<Archetype>> filteredCatalogs = - ArchetypeSelectorUtils.getFilteredArchetypesByCatalog( catalogs, answer ); - if ( filteredCatalogs.isEmpty() ) + String answer; + if ( defaultSelection == 0 ) { - prompter.prompt( - "Your filter doesn't match any archetype (hint: enter to return to your previous list)" ); - return selectArchetype( catalogs, defaultDefinition ); + answer = prompter.prompt( query.toString() ); + } + else + { + answer = prompter.prompt( query.toString(), Integer.toString( defaultSelection ) ); } - return selectArchetype( filteredCatalogs, defaultDefinition ); - } - if ( !answer.contains( answer ) ) - { - return selectArchetype( catalogs, defaultDefinition ); + if ( NumberUtils.isNumber( answer ) ) + { + selection = archetypeAnswerMap.get( answer ); + } + else + { + // not a number so apply filter and ask again + filteredCatalogs = ArchetypeSelectorUtils.getFilteredArchetypesByCatalog( catalogs, answer ); + } } - - Archetype selection = archetypeAnswerMap.get( answer ); + while ( selection == null ); return selectVersion( catalogs, selection.getGroupId(), selection.getArtifactId() ); } Modified: maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java URL: http://svn.apache.org/viewvc/maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java?rev=1147404&r1=1147403&r2=1147404&view=diff ============================================================================== --- maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java (original) +++ maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java Sat Jul 16 11:47:23 2011 @@ -80,7 +80,7 @@ public class DefaultArchetypeSelector archetypes = ArchetypeSelectorUtils.getFilteredArchetypesByCatalog( archetypes, request.getFilter() ); if ( archetypes.isEmpty() ) { - getLogger().info( "your filter doesn't find any archetype, so try again with an other value" ); + getLogger().info( "Your filter doesn't match any archetype, so try again with another value." ); return; } }