1   package com.atlassian.maven.plugins.amps.codegen.prompter.common;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import com.atlassian.maven.plugins.amps.codegen.prompter.AbstractModulePrompter;
7   import com.atlassian.plugins.codegen.modules.PluginModuleProperties;
8   import com.atlassian.plugins.codegen.modules.common.Resource;
9   
10  import org.apache.commons.lang.StringUtils;
11  import org.codehaus.plexus.components.interactivity.Prompter;
12  import org.codehaus.plexus.components.interactivity.PrompterException;
13  
14  /**
15   * @since 3.6
16   */
17  public abstract class AbstractResourcePrompter<T extends PluginModuleProperties> extends AbstractModulePrompter<T>
18  {
19  
20      public AbstractResourcePrompter(Prompter prompter)
21      {
22          super(prompter);
23      }
24  
25      protected List<Resource> promptForResources() throws PrompterException
26      {
27          List<Resource> resources = new ArrayList<Resource>();
28          promptForResources(resources);
29          return resources;
30      }
31  
32      protected void promptForResources(List<Resource> resources) throws PrompterException
33      {
34          if (promptForBoolean("Add Resource", "N"))
35          {
36              resources.add(promptForResource());
37              promptForResources(resources);
38          }
39      }
40  
41      protected Resource promptForResource() throws PrompterException
42      {
43          Resource resource = new Resource();
44          promptForResourceNameOrPattern(resource);
45  
46          resource.setType(promptNotBlank("Enter Resource Type", "download"));
47          resource.setLocation(promptNotBlank("Enter Location (path to resource file)"));
48  
49          resource.setParams(promptForParams("Add Resource Parameter?"));
50  
51          return resource;
52      }
53  
54      protected void promptForResourceNameOrPattern(Resource resource) throws PrompterException
55      {
56          String name = prompt("Enter Resource Name (leave blank to use namePattern)");
57          if (StringUtils.isNotBlank(name))
58          {
59              resource.setName(name);
60          } else
61          {
62              String namePattern = prompt("Enter Resource Name Pattern");
63              if (StringUtils.isNotBlank(namePattern))
64              {
65                  resource.setNamePattern(namePattern);
66              } else
67              {
68                  promptForResourceNameOrPattern(resource);
69              }
70          }
71      }
72  
73  }