1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.internal.impl;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Singleton;
24
25 import java.lang.reflect.Method;
26 import java.util.List;
27
28 import org.apache.maven.api.services.Prompter;
29 import org.apache.maven.api.services.PrompterException;
30 import org.codehaus.plexus.PlexusContainer;
31
32 @Named
33 @Singleton
34 public class DefaultPrompter implements Prompter {
35
36 private static final String PROMPTER_CLASS = "org.codehaus.plexus.components.interactivity.Prompter";
37 private final PlexusContainer container;
38
39 @Inject
40 public DefaultPrompter(PlexusContainer container) {
41 this.container = container;
42 }
43
44 @Override
45 public String prompt(String message, List<String> possibleValues, String defaultReply) throws PrompterException {
46 try {
47 Class<?> clazz = container.getContainerRealm().loadClass(PROMPTER_CLASS);
48 Object instance = container.lookup(clazz);
49 Method method = clazz.getMethod("prompt", String.class, List.class, String.class);
50 return (String) method.invoke(instance, message, possibleValues, defaultReply);
51 } catch (Exception e) {
52 throw new PrompterException("Unable to call prompter", e);
53 }
54 }
55
56 @Override
57 public String promptForPassword(String message) throws PrompterException {
58 try {
59 Class<?> clazz = container.getContainerRealm().loadClass(PROMPTER_CLASS);
60 Object instance = container.lookup(clazz);
61 Method method = clazz.getMethod("promptForPassword", String.class);
62 return (String) method.invoke(instance, message);
63 } catch (Exception e) {
64 throw new PrompterException("Unable to call prompter", e);
65 }
66 }
67
68 @Override
69 public void showMessage(String message) throws PrompterException {
70 try {
71 Class<?> clazz = container.getContainerRealm().loadClass(PROMPTER_CLASS);
72 Object instance = container.lookup(clazz);
73 Method method = clazz.getMethod("showMessage", String.class);
74 method.invoke(instance, message);
75 } catch (Exception e) {
76 throw new PrompterException("Unable to call prompter", e);
77 }
78 }
79 }