1   package com.atlassian.maven.plugins.amps.codegen.prompter.jira;
2   
3   import java.util.ArrayList;
4   import java.util.HashMap;
5   import java.util.List;
6   import java.util.Map;
7   
8   import com.atlassian.maven.plugins.amps.codegen.annotations.ModuleCreatorClass;
9   import com.atlassian.maven.plugins.amps.codegen.prompter.AbstractModulePrompter;
10  import com.atlassian.plugins.codegen.modules.PluginModuleLocation;
11  import com.atlassian.plugins.codegen.modules.jira.KeyboardShortcutModuleCreator;
12  import com.atlassian.plugins.codegen.modules.jira.KeyboardShortcutProperties;
13  
14  import org.codehaus.plexus.components.interactivity.Prompter;
15  import org.codehaus.plexus.components.interactivity.PrompterException;
16  
17  /**
18   * @since 3.5
19   */
20  @ModuleCreatorClass(KeyboardShortcutModuleCreator.class)
21  public class KeyboardShortcutPrompter extends AbstractModulePrompter<KeyboardShortcutProperties>
22  {
23  
24      public KeyboardShortcutPrompter(Prompter prompter)
25      {
26          super(prompter);
27  
28      }
29  
30      @Override
31      public KeyboardShortcutProperties promptForBasicProperties(PluginModuleLocation moduleLocation) throws PrompterException
32      {
33          suppressAdvancedNamePrompt();
34  
35          String moduleName = promptNotBlank("Enter Keyboard Shortcut Name", "My Keyboard Shortcut");
36  
37          KeyboardShortcutProperties props = new KeyboardShortcutProperties(moduleName);
38          props.setShortcut(promptNotBlank("Enter Shortcut Character"));
39          props.setContext(promptForContext());
40          props.setOperationType(promptForOperation());
41          props.setOperationValue(promptNotBlank("Enter Operation Value"));
42  
43          return props;
44      }
45  
46      @Override
47      public void promptForAdvancedProperties(KeyboardShortcutProperties props, PluginModuleLocation moduleLocation) throws PrompterException
48      {
49          props.setHidden(promptForBoolean("Hidden?", "N"));
50          props.setOrder(promptForInt("Order", 10));
51      }
52  
53      protected String promptForOperation() throws PrompterException
54      {
55          String operation = "";
56          List<String> operations = KeyboardShortcutProperties.ALLOWED_OPERATIONS;
57          StringBuilder operationQuery = new StringBuilder("Choose An Operation\n");
58          List<String> indexChoices = new ArrayList<String>(operations.size());
59          Map<String, String> indexedValues = new HashMap<String, String>();
60          int index = 1;
61          String strIndex;
62          for (String entry : operations)
63          {
64              strIndex = Integer.toString(index);
65              operationQuery.append(strIndex + ": " + entry + "\n");
66              indexChoices.add(strIndex);
67              indexedValues.put(strIndex, entry);
68              index++;
69          }
70  
71          operationQuery.append("Choose a number: ");
72          String operationAnswer = prompt(operationQuery.toString(), indexChoices, "");
73          operation = indexedValues.get(operationAnswer);
74  
75          return operation;
76      }
77  
78      protected String promptForContext() throws PrompterException
79      {
80          String context = "";
81          List<String> contexts = KeyboardShortcutProperties.ALLOWED_CONTEXTS;
82          StringBuilder contextQuery = new StringBuilder("Choose A Context\n");
83          List<String> indexChoices = new ArrayList<String>(contexts.size());
84          Map<String, String> indexedValues = new HashMap<String, String>();
85          int index = 1;
86          String strIndex;
87          for (String entry : contexts)
88          {
89              strIndex = Integer.toString(index);
90              contextQuery.append(strIndex + ": " + entry + "\n");
91              indexChoices.add(strIndex);
92              indexedValues.put(strIndex, entry);
93              index++;
94          }
95  
96          contextQuery.append("Choose a number: ");
97          String contextAnswer = prompt(contextQuery.toString(), indexChoices, "");
98          context = indexedValues.get(contextAnswer);
99  
100         return context;
101     }
102 }