2525import java .util .List ;
2626
2727import static grakn .common .collection .Collections .pair ;
28+ import static grakn .console .ErrorMessage .Internal .ILLEGAL_CAST ;
29+
30+ public interface ReplCommand {
31+
32+ default boolean isExit () {
33+ return false ;
34+ }
35+
36+ default Exit asExit () {
37+ throw new grakn .console .GraknConsoleException (ILLEGAL_CAST );
38+ }
39+
40+ default boolean isHelp () {
41+ return false ;
42+ }
43+
44+ default Help asHelp () {
45+ throw new grakn .console .GraknConsoleException (ILLEGAL_CAST );
46+ }
47+
48+ default boolean isClear () {
49+ return false ;
50+ }
51+
52+ default Clear asClear () {
53+ throw new grakn .console .GraknConsoleException (ILLEGAL_CAST );
54+ }
55+
56+ default boolean isDatabaseList () {
57+ return false ;
58+ }
59+
60+ default Database .List asDatabaseList () {
61+ throw new grakn .console .GraknConsoleException (ILLEGAL_CAST );
62+ }
63+
64+ default boolean isDatabaseCreate () {
65+ return false ;
66+ }
67+
68+ default Database .Create asDatabaseCreate () {
69+ throw new grakn .console .GraknConsoleException (ILLEGAL_CAST );
70+ }
71+
72+ default boolean isDatabaseDelete () {
73+ return false ;
74+ }
75+
76+ default Database .Delete asDatabaseDelete () {
77+ throw new grakn .console .GraknConsoleException (ILLEGAL_CAST );
78+ }
79+
80+ default boolean isTransaction () {
81+ return false ;
82+ }
83+
84+ default Transaction asTransaction () {
85+ throw new grakn .console .GraknConsoleException (ILLEGAL_CAST );
86+ }
87+
88+ class Exit implements ReplCommand {
2889
29- public abstract class ReplCommand {
30- public static class Exit extends ReplCommand {
3190 private static String token = "exit" ;
3291 private static String helpCommand = token ;
3392 private static String description = "Exit console" ;
93+
94+ @ Override
95+ public boolean isExit () {
96+ return true ;
97+ }
98+
99+ @ Override
100+ public Exit asExit () {
101+ return this ;
102+ }
34103 }
35104
36- public static class Help extends ReplCommand {
105+ class Help implements ReplCommand {
106+
37107 private static String token = "help" ;
38108 private static String helpCommand = token ;
39109 private static String description = "Print this help menu" ;
110+
111+ @ Override
112+ public boolean isHelp () {
113+ return true ;
114+ }
115+
116+ @ Override
117+ public Help asHelp () {
118+ return this ;
119+ }
40120 }
41121
42- public static class Clear extends ReplCommand {
122+ class Clear implements ReplCommand {
123+
43124 private static String token = "clear" ;
44125 private static String helpCommand = token ;
45126 private static String description = "Clear console screen" ;
127+
128+ @ Override
129+ public boolean isClear () {
130+ return true ;
131+ }
132+
133+ @ Override
134+ public Clear asClear () {
135+ return this ;
136+ }
46137 }
47138
48- public static abstract class Database extends ReplCommand {
139+ abstract class Database implements ReplCommand {
140+
49141 private static String token = "database" ;
50142
51143 public static class List extends ReplCommand .Database {
144+
52145 private static String token = "list" ;
53146 private static String helpCommand = Database .token + " " + token ;
54147 private static String description = "List the databases on the server" ;
148+
149+ @ Override
150+ public boolean isDatabaseList () {
151+ return true ;
152+ }
153+
154+ @ Override
155+ public Database .List asDatabaseList () {
156+ return this ;
157+ }
55158 }
56159
57160 public static class Create extends ReplCommand .Database {
161+
58162 private static String token = "create" ;
59163 private static String helpCommand = Database .token + " " + token + " " + "<db>" ;
60164 private static String description = "Create a database with name <db> on the server" ;
61165
62166 private final String database ;
167+
63168 public Create (String database ) {
64169 this .database = database ;
65170 }
66- public String database () { return database ; }
171+
172+ public String database () {
173+ return database ;
174+ }
175+
176+ @ Override
177+ public boolean isDatabaseCreate () {
178+ return true ;
179+ }
180+
181+ @ Override
182+ public Database .Create asDatabaseCreate () {
183+ return this ;
184+ }
67185 }
68186
69187 public static class Delete extends ReplCommand .Database {
188+
70189 private static String token = "delete" ;
71190 private static String helpCommand = Database .token + " " + token + " " + "<db>" ;
72191 private static String description = "Delete a database with name <db> on the server" ;
73192
74193 private final String database ;
194+
75195 public Delete (String database ) {
76196 this .database = database ;
77197 }
78- public String database () { return database ; }
198+
199+ public String database () {
200+ return database ;
201+ }
202+
203+ @ Override
204+ public boolean isDatabaseDelete () {
205+ return true ;
206+ }
207+
208+ @ Override
209+ public Database .Delete asDatabaseDelete () {
210+ return this ;
211+ }
79212 }
80213 }
81214
82- public static class Transaction extends ReplCommand {
215+ class Transaction implements ReplCommand {
216+
83217 private static String token = "transaction" ;
84218 private static String helpCommand = token + " <db> schema|data read|write" ;
85219 private static String description = "Start a transaction to database <db> with schema or data session, with read or write transaction" ;
86220
87221 private final String database ;
88222 private final Grakn .Session .Type sessionType ;
89223 private final Grakn .Transaction .Type transactionType ;
224+
90225 public Transaction (String database , Grakn .Session .Type sessionType , Grakn .Transaction .Type transactionType ) {
91226 this .database = database ;
92227 this .sessionType = sessionType ;
93228 this .transactionType = transactionType ;
94229 }
95- public String database () { return database ; }
96- public Grakn .Session .Type sessionType () { return sessionType ; }
97- public Grakn .Transaction .Type transactionType () { return transactionType ; }
98- }
99230
100- public Database .Create asDatabaseCreate () { return (Database .Create )this ; }
101- public Database .Delete asDatabaseDelete () { return (Database .Delete )this ; }
102- public Transaction asTransaction () { return (Transaction ) this ; }
231+ public String database () {
232+ return database ;
233+ }
234+
235+ public Grakn .Session .Type sessionType () {
236+ return sessionType ;
237+ }
238+
239+ public Grakn .Transaction .Type transactionType () {
240+ return transactionType ;
241+ }
242+
243+ @ Override
244+ public boolean isTransaction () {
245+ return true ;
246+ }
247+
248+ @ Override
249+ public Transaction asTransaction () {
250+ return this ;
251+ }
252+ }
103253
104- public static String getHelpMenu () {
254+ static String getHelpMenu () {
105255 List <Pair <String , String >> menu = Arrays .asList (
106256 pair (Database .List .helpCommand , Database .List .description ),
107257 pair (Database .Create .helpCommand , Database .Create .description ),
@@ -114,7 +264,7 @@ public static String getHelpMenu() {
114264 return Utils .buildHelpMenu (menu );
115265 }
116266
117- public static ReplCommand getCommand (LineReader reader , Printer printer , String prompt ) throws InterruptedException {
267+ static ReplCommand getCommand (LineReader reader , Printer printer , String prompt ) throws InterruptedException {
118268 ReplCommand command = null ;
119269 while (command == null ) {
120270 String line = Utils .readNonEmptyLine (reader , prompt );
0 commit comments