forked from nus-cs2103-AY1819S1/addressbook-level4
-
Notifications
You must be signed in to change notification settings - Fork 4
/
InventoryParser.java
201 lines (160 loc) · 8.55 KB
/
InventoryParser.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
package seedu.inventory.logic.parser;
import static seedu.inventory.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT;
import static seedu.inventory.commons.core.Messages.MESSAGE_UNKNOWN_COMMAND;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import seedu.inventory.logic.commands.ClearCommand;
import seedu.inventory.logic.commands.Command;
import seedu.inventory.logic.commands.ExitCommand;
import seedu.inventory.logic.commands.HelpCommand;
import seedu.inventory.logic.commands.HistoryCommand;
import seedu.inventory.logic.commands.RedoCommand;
import seedu.inventory.logic.commands.SelectCommand;
import seedu.inventory.logic.commands.UndoCommand;
import seedu.inventory.logic.commands.authentication.ChangePasswordCommand;
import seedu.inventory.logic.commands.authentication.LoginCommand;
import seedu.inventory.logic.commands.authentication.LogoutCommand;
import seedu.inventory.logic.commands.csv.ExportCsvCommand;
import seedu.inventory.logic.commands.csv.ImportCsvCommand;
import seedu.inventory.logic.commands.item.AddItemCommand;
import seedu.inventory.logic.commands.item.DeleteItemCommand;
import seedu.inventory.logic.commands.item.EditItemCommand;
import seedu.inventory.logic.commands.item.FilterItemCommand;
import seedu.inventory.logic.commands.item.FindItemCommand;
import seedu.inventory.logic.commands.item.FindItemSkuCommand;
import seedu.inventory.logic.commands.item.ListItemCommand;
import seedu.inventory.logic.commands.item.ListLowQuantityCommand;
import seedu.inventory.logic.commands.purchaseorder.AddPurchaseOrderCommand;
import seedu.inventory.logic.commands.purchaseorder.ApprovePurchaseOrderCommand;
import seedu.inventory.logic.commands.purchaseorder.DeletePurchaseOrderCommand;
import seedu.inventory.logic.commands.purchaseorder.EditPurchaseOrderCommand;
import seedu.inventory.logic.commands.purchaseorder.ListPurchaseOrderCommand;
import seedu.inventory.logic.commands.purchaseorder.RejectPurchaseOrderCommand;
import seedu.inventory.logic.commands.sale.AddSaleCommand;
import seedu.inventory.logic.commands.sale.DeleteSaleCommand;
import seedu.inventory.logic.commands.sale.ListSaleCommand;
import seedu.inventory.logic.commands.staff.AddStaffCommand;
import seedu.inventory.logic.commands.staff.DeleteStaffCommand;
import seedu.inventory.logic.commands.staff.EditStaffCommand;
import seedu.inventory.logic.commands.staff.ListStaffCommand;
import seedu.inventory.logic.parser.authentication.ChangePasswordCommandParser;
import seedu.inventory.logic.parser.authentication.LoginCommandParser;
import seedu.inventory.logic.parser.csv.ExportCsvCommandParser;
import seedu.inventory.logic.parser.csv.ImportCsvCommandParser;
import seedu.inventory.logic.parser.exceptions.ParseException;
import seedu.inventory.logic.parser.item.AddCommandParser;
import seedu.inventory.logic.parser.item.DeleteCommandParser;
import seedu.inventory.logic.parser.item.EditCommandParser;
import seedu.inventory.logic.parser.item.FilterItemCommandParser;
import seedu.inventory.logic.parser.item.FindCommandParser;
import seedu.inventory.logic.parser.item.FindItemSkuCommandParser;
import seedu.inventory.logic.parser.purchaseorder.AddPurchaseOrderCommandParser;
import seedu.inventory.logic.parser.purchaseorder.ApprovePurchaseOrderCommandParser;
import seedu.inventory.logic.parser.purchaseorder.DeletePurchaseOrderCommandParser;
import seedu.inventory.logic.parser.purchaseorder.EditPurchaseOrderCommandParser;
import seedu.inventory.logic.parser.purchaseorder.RejectPurchaseOrderCommandParser;
import seedu.inventory.logic.parser.sale.AddSaleCommandParser;
import seedu.inventory.logic.parser.sale.DeleteSaleCommandParser;
import seedu.inventory.logic.parser.staff.AddStaffCommandParser;
import seedu.inventory.logic.parser.staff.DeleteStaffCommandParser;
import seedu.inventory.logic.parser.staff.EditStaffCommandParser;
/**
* Parses user input.
*/
public class InventoryParser {
/**
* Used for initial separation of command word and args.
*/
private static final Pattern BASIC_COMMAND_FORMAT = Pattern.compile("(?<commandWord>\\S+)(?<arguments>.*)");
/**
* Parses user input into command for execution.
*
* @param userInput full user input string
* @return the command based on the user input
* @throws ParseException if the user input does not conform the expected format
*/
public Command parseCommand(String userInput) throws ParseException {
final Matcher matcher = BASIC_COMMAND_FORMAT.matcher(userInput.trim());
if (!matcher.matches()) {
throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE));
}
final String commandWord = matcher.group("commandWord");
final String arguments = matcher.group("arguments");
switch (commandWord) {
case LoginCommand.COMMAND_WORD:
return new LoginCommandParser().parse(arguments);
case ChangePasswordCommand.COMMAND_WORD:
return new ChangePasswordCommandParser().parse(arguments);
case LogoutCommand.COMMAND_WORD:
return new LogoutCommand();
case AddStaffCommand.COMMAND_WORD:
return new AddStaffCommandParser().parse(arguments);
case ListStaffCommand.COMMAND_WORD:
return new ListStaffCommand();
case EditStaffCommand.COMMAND_WORD:
return new EditStaffCommandParser().parse(arguments);
case DeleteStaffCommand.COMMAND_WORD:
return new DeleteStaffCommandParser().parse(arguments);
case AddItemCommand.COMMAND_WORD:
return new AddCommandParser().parse(arguments);
case EditItemCommand.COMMAND_WORD:
return new EditCommandParser().parse(arguments);
case SelectCommand.COMMAND_WORD:
return new SelectCommandParser().parse(arguments);
case DeleteItemCommand.COMMAND_WORD:
return new DeleteCommandParser().parse(arguments);
case ClearCommand.COMMAND_WORD:
return new ClearCommand();
case FilterItemCommand.COMMAND_WORD:
return new FilterItemCommandParser().parse(arguments);
case FindItemCommand.COMMAND_WORD:
return new FindCommandParser().parse(arguments);
case FindItemSkuCommand.COMMAND_WORD:
return new FindItemSkuCommandParser().parse(arguments);
case ListItemCommand.COMMAND_WORD:
return new ListItemCommand();
case ListLowQuantityCommand.COMMAND_WORD:
return new ListLowQuantityCommand();
case HistoryCommand.COMMAND_WORD:
return new HistoryCommand();
case ExitCommand.COMMAND_WORD:
return new ExitCommand();
case HelpCommand.COMMAND_WORD:
return new HelpCommand();
case UndoCommand.COMMAND_WORD:
return new UndoCommand();
case RedoCommand.COMMAND_WORD:
return new RedoCommand();
case ListPurchaseOrderCommand.COMMAND_WORD:
return new ListPurchaseOrderCommand();
case AddPurchaseOrderCommand.COMMAND_WORD:
return new AddPurchaseOrderCommandParser().parse(arguments);
case DeletePurchaseOrderCommand.COMMAND_WORD:
return new DeletePurchaseOrderCommandParser().parse(arguments);
case ApprovePurchaseOrderCommand.COMMAND_WORD:
return new ApprovePurchaseOrderCommandParser().parse(arguments);
case RejectPurchaseOrderCommand.COMMAND_WORD:
return new RejectPurchaseOrderCommandParser().parse(arguments);
case EditPurchaseOrderCommand.COMMAND_WORD:
return new EditPurchaseOrderCommandParser().parse(arguments);
case AddSaleCommand.COMMAND_WORD:
return new AddSaleCommandParser().parse(arguments);
case DeleteSaleCommand.COMMAND_WORD:
return new DeleteSaleCommandParser().parse(arguments);
case ListSaleCommand.COMMAND_WORD:
return new ListSaleCommand();
case ExportCsvCommand.COMMAND_WORD_ITEMS:
case ExportCsvCommand.COMMAND_WORD_SALES:
case ExportCsvCommand.COMMAND_WORD_STAFFS:
case ExportCsvCommand.COMMAND_WORD_PURCHASE_ORDERS:
return new ExportCsvCommandParser().parse(arguments).setCommandWord(commandWord);
case ImportCsvCommand.COMMAND_WORD_ITEMS:
case ImportCsvCommand.COMMAND_WORD_SALES:
case ImportCsvCommand.COMMAND_WORD_STAFFS:
case ImportCsvCommand.COMMAND_WORD_PURCHASE_ORDERS:
return new ImportCsvCommandParser().parse(arguments).setCommandWord(commandWord);
default:
throw new ParseException(MESSAGE_UNKNOWN_COMMAND);
}
}
}