1 package com.atlassian.maven.plugins.amps.codegen.prompter.common.servlet;
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.common.servlet.ServletFilterModuleCreator;
12 import com.atlassian.plugins.codegen.modules.common.servlet.ServletFilterProperties;
13 import com.atlassian.plugins.codegen.util.ClassnameUtil;
14
15 import org.codehaus.plexus.components.interactivity.Prompter;
16 import org.codehaus.plexus.components.interactivity.PrompterException;
17
18
19
20
21 @ModuleCreatorClass(ServletFilterModuleCreator.class)
22 public class ServletFilterModulePrompter extends AbstractModulePrompter<ServletFilterProperties>
23 {
24
25 public ServletFilterModulePrompter(Prompter prompter)
26 {
27 super(prompter);
28
29 }
30
31 @Override
32 public ServletFilterProperties promptForBasicProperties(PluginModuleLocation moduleLocation) throws PrompterException
33 {
34 String className = promptJavaClassname("Enter New Classname", "MyServletFilter");
35 String packageName = promptJavaPackagename("Enter Package Name", getDefaultBasePackage() + ".servlet.filter");
36
37 return new ServletFilterProperties(ClassnameUtil.fullyQualifiedName(packageName, className));
38 }
39
40 @Override
41 public void promptForAdvancedProperties(ServletFilterProperties props, PluginModuleLocation moduleLocation) throws PrompterException
42 {
43 props.setUrlPattern(getUrlPatternFromUser());
44 props.setLocation(getLocationFromUser(props.allowedLocations()));
45 props.setWeight(promptForInt("Location Weight", 100));
46
47 List<String> dispatchers = promptForDispatchers(props.allowedDispatchers());
48 if (dispatchers.size() > 0)
49 {
50 props.setDispatchers(dispatchers);
51 }
52
53 Map<String, String> initParams = promptForInitParams();
54 if (initParams.size() > 0)
55 {
56 props.setInitParams(initParams);
57 }
58 }
59
60 private String getUrlPatternFromUser() throws PrompterException
61 {
62 String pattern = promptNotBlank("URL Pattern", "/*");
63
64 return pattern;
65 }
66
67 private String getLocationFromUser(List<String> allowedLocations) throws PrompterException
68 {
69 StringBuilder locationQuery = new StringBuilder("Choose Filter Chain Location\n");
70 List<String> indexChoices = new ArrayList<String>(allowedLocations.size());
71 int index = 1;
72 for (String location : allowedLocations)
73 {
74 String strIndex = Integer.toString(index);
75 locationQuery.append(strIndex + ": " + location + "\n");
76 indexChoices.add(strIndex);
77 index++;
78 }
79
80 locationQuery.append("Choose a number: ");
81 String locationAnswer = prompt(locationQuery.toString(), indexChoices, "4");
82
83 return allowedLocations.get(Integer.parseInt(locationAnswer) - 1);
84 }
85
86 private List<String> promptForDispatchers(List<String> allowedDispatchers) throws PrompterException
87 {
88 List<String> dispatchers = new ArrayList<String>();
89 List<String> mutableValues = new ArrayList<String>(allowedDispatchers);
90
91 promptForDispatcher(dispatchers, mutableValues);
92
93 return dispatchers;
94 }
95
96 private void promptForDispatcher(List<String> dispatchers, List<String> allowedDispatchers) throws PrompterException
97 {
98 boolean addDispatcher = promptForBoolean("Add Dispatcher?", "N");
99
100 if (addDispatcher)
101 {
102 StringBuilder dispatcherQuery = new StringBuilder("Choose A Dispatcher\n");
103 List<String> indexChoices = new ArrayList<String>(allowedDispatchers.size());
104 int index = 1;
105 for (String dispatcher : allowedDispatchers)
106 {
107 String strIndex = Integer.toString(index);
108 dispatcherQuery.append(strIndex + ": " + dispatcher + "\n");
109 indexChoices.add(strIndex);
110 index++;
111 }
112
113 dispatcherQuery.append("Choose a number: ");
114 String dispatcherAnswer = prompt(dispatcherQuery.toString(), indexChoices, "1");
115 int selectedIndex = Integer.parseInt(dispatcherAnswer) - 1;
116
117 String selectedDispatcher = allowedDispatchers.get(selectedIndex);
118
119 dispatchers.add(selectedDispatcher);
120 allowedDispatchers.remove(selectedIndex);
121
122 promptForDispatcher(dispatchers, allowedDispatchers);
123 }
124 }
125
126 private Map<String, String> promptForInitParams() throws PrompterException
127 {
128 Map<String, String> params = new HashMap<String, String>();
129 promptForInitParam(params);
130
131 return params;
132 }
133
134 private void promptForInitParam(Map<String, String> params) throws PrompterException
135 {
136 StringBuffer addBuffer = new StringBuffer();
137 if (params.size() > 0)
138 {
139 addBuffer.append("init-params:\n");
140 for (Map.Entry<String, String> entry : params.entrySet())
141 {
142 addBuffer.append(entry.getKey())
143 .append("->")
144 .append(entry.getValue())
145 .append("\n");
146 }
147 }
148 addBuffer.append("Add Init-Param?");
149 boolean addParam = promptForBoolean(addBuffer.toString(), "N");
150
151 if (addParam)
152 {
153 String key = promptNotBlank("param key");
154 String value = promptNotBlank("param value");
155 params.put(key, value);
156 promptForInitParam(params);
157 }
158 }
159 }