1 /*
2 * Copyright (C) 2009 Christian Schulte <cs@schulte.it>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * o Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * o Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
18 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
19 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $JOMC: Command.java 5215 2016-04-24 06:54:04Z schulte $
29 *
30 */
31 package org.jomc.cli;
32
33 import java.util.List;
34 import java.util.Locale;
35 import java.util.logging.Level;
36 import org.apache.commons.cli.CommandLine;
37 import org.apache.commons.cli.Options;
38
39 /**
40 * Command.
41 *
42 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
43 */
44 public interface Command
45 {
46
47 /**
48 * Listener interface.
49 */
50 public interface Listener
51 {
52
53 /**
54 * Gets called on logging.
55 *
56 * @param level The level of the event.
57 * @param message The message of the event or {@code null}.
58 * @param t The throwable of the event or {@code null}.
59 *
60 * @throws NullPointerException if {@code level} is {@code null}.
61 */
62 void onLog( Level level, String message, Throwable t );
63
64 }
65
66 /**
67 * Status code when the command completed successfully.
68 */
69 int STATUS_SUCCESS = 0;
70
71 /**
72 * Status code when the command failed.
73 */
74 int STATUS_FAILURE = 1;
75
76 /**
77 * Gets the list of registered listeners.
78 *
79 * @return The list of registered listeners.
80 */
81 List<Listener> getListeners();
82
83 /**
84 * Gets the log level of the instance.
85 *
86 * @return The log level of the instance.
87 *
88 * @see #setLogLevel(java.util.logging.Level)
89 */
90 Level getLogLevel();
91
92 /**
93 * Sets the log level of the instance.
94 *
95 * @param value The new log level of the instance or {@code null}.
96 *
97 * @see #getLogLevel()
98 */
99 void setLogLevel( Level value );
100
101 /**
102 * Gets the name of the command.
103 *
104 * @return The name of the command.
105 */
106 String getName();
107
108 /**
109 * Gets the abbreviated name of the command.
110 *
111 * @return The abbreviated name of the command.
112 */
113 String getAbbreviatedName();
114
115 /**
116 * Gets the short description of the command.
117 *
118 * @param locale The locale of the short description to return.
119 *
120 * @return The short description of the command.
121 *
122 * @throws NullPointerException if {@code locale} is {@code null}.
123 */
124 String getShortDescription( Locale locale ) throws NullPointerException;
125
126 /**
127 * Gets the long description of the command.
128 *
129 * @param locale The locale of the long description to return.
130 *
131 * @return The long description of the command.
132 *
133 * @throws NullPointerException if {@code locale} is {@code null}.
134 */
135 String getLongDescription( Locale locale ) throws NullPointerException;
136
137 /**
138 * Gets the options of the command.
139 *
140 * @return The options of the command.
141 */
142 Options getOptions();
143
144 /**
145 * Executes the command.
146 *
147 * @param commandLine Command line to execute.
148 *
149 * @return The status code to report.
150 *
151 * @throws NullPointerException if {@code commandLine} is {@code null}.
152 *
153 * @see #STATUS_SUCCESS
154 * @see #STATUS_FAILURE
155 */
156 int execute( CommandLine commandLine ) throws NullPointerException;
157
158 }