Skip to content

Commit 7954d4a

Browse files
authored
Merge pull request #135 from AY2021S1-CS2103T-T10-3/bugfix/134
Fix #134
2 parents 5244355 + 13eeac7 commit 7954d4a

3 files changed

Lines changed: 45 additions & 38 deletions

File tree

src/main/java/chopchop/commons/util/Strings.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class Strings {
1717
public static final ArgName ARG_QUANTITY = new ArgName("qty");
1818
public static final ArgName ARG_EXPIRY = new ArgName("expiry");
1919
public static final ArgName ARG_TAG = new ArgName("tag");
20+
public static final ArgName ARG_NAME = new ArgName("name");
2021

2122
// command names
2223
public static final String COMMAND_ADD = "add";

src/main/java/chopchop/logic/edit/RecipeEditDescriptor.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,30 @@
33
package chopchop.logic.edit;
44

55
import java.util.List;
6+
import java.util.Optional;
67

78
public class RecipeEditDescriptor {
89

910
private final List<IngredientEditDescriptor> ingredientEdits;
1011
private final List<StepEditDescriptor> stepEdits;
1112
private final List<TagEditDescriptor> tagEdits;
13+
private final Optional<String> nameEdit;
1214

1315
/**
1416
* Creates a RecipeEditDescriptor to edit a recipe.
1517
*
1618
* @param ingredientEdits the list of edit descriptors for ingredients
1719
* @param stepEdits the list of edit descriptors for steps
1820
* @param tagEdits the list of edit descriptors for tags
21+
* @param nameEdit the edited name (if present)
1922
*/
20-
public RecipeEditDescriptor(List<IngredientEditDescriptor> ingredientEdits,
23+
public RecipeEditDescriptor(Optional<String> nameEdit, List<IngredientEditDescriptor> ingredientEdits,
2124
List<StepEditDescriptor> stepEdits, List<TagEditDescriptor> tagEdits) {
2225

2326
this.ingredientEdits = ingredientEdits;
2427
this.stepEdits = stepEdits;
2528
this.tagEdits = tagEdits;
29+
this.nameEdit = nameEdit;
2630
}
2731

2832
public List<IngredientEditDescriptor> getIngredientEdits() {
@@ -36,4 +40,8 @@ public List<StepEditDescriptor> getStepEdits() {
3640
public List<TagEditDescriptor> getTagEdits() {
3741
return this.tagEdits;
3842
}
43+
44+
public Optional<String> getNameEdit() {
45+
return this.nameEdit;
46+
}
3947
}

src/main/java/chopchop/logic/parser/commands/EditCommandParser.java

Lines changed: 35 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55

66
import chopchop.model.attributes.Quantity;
77
import chopchop.model.attributes.Tag;
8-
import chopchop.commons.util.Pair;
98
import chopchop.commons.util.Result;
109
import chopchop.commons.util.Strings;
1110

12-
import chopchop.logic.edit.EditDescriptor;
1311
import chopchop.logic.edit.EditOperationType;
1412
import chopchop.logic.edit.IngredientEditDescriptor;
1513
import chopchop.logic.edit.RecipeEditDescriptor;
@@ -54,7 +52,10 @@ public static Result<? extends Command> parseEditCommand(CommandArguments args)
5452
})
5553
.then(item -> {
5654

57-
var edits = new ArrayList<Result<EditDescriptor>>();
55+
Optional<String> editedName = Optional.empty();
56+
var tagEdits = new ArrayList<Result<TagEditDescriptor>>();
57+
var stepEdits = new ArrayList<Result<StepEditDescriptor>>();
58+
var ingrEdits = new ArrayList<Result<IngredientEditDescriptor>>();
5859

5960
for (int i = 0; i < args.getAllArguments().size(); i++) {
6061

@@ -66,13 +67,23 @@ public static Result<? extends Command> parseEditCommand(CommandArguments args)
6667
return Result.error("'%s' needs an edit-argument in an edit command", argName);
6768
}
6869

69-
if (argName.name().equals(Strings.ARG_TAG.name())) {
70+
if (argName.name().equals(Strings.ARG_NAME.name())) {
7071

71-
edits.add(parseTagEdit(argName, argValue));
72+
if (argValue.isEmpty()) {
73+
return Result.error("expected a name after '/name'");
74+
} else if (editedName.isPresent()) {
75+
return Result.error("only one '/name' should be provided");
76+
}
77+
78+
editedName = Optional.of(argValue);
79+
80+
} else if (argName.name().equals(Strings.ARG_TAG.name())) {
81+
82+
tagEdits.add(parseTagEdit(argName, argValue));
7283

7384
} else if (argName.name().equals(Strings.ARG_STEP.name())) {
7485

75-
edits.add(parseStepEdit(argName, argValue));
86+
stepEdits.add(parseStepEdit(argName, argValue));
7687

7788
} else if (argName.name().equals(Strings.ARG_INGREDIENT.name())) {
7889

@@ -93,49 +104,36 @@ public static Result<? extends Command> parseEditCommand(CommandArguments args)
93104
}
94105
}
95106

96-
edits.add(parseIngredientEdit(argName, argValue, qty));
107+
ingrEdits.add(parseIngredientEdit(argName, argValue, qty));
97108

98109
} else {
99110
return Result.error("'edit' command doesn't support '%s'", argName);
100111
}
101112
}
102113

103-
return Result.of(Pair.of(item, edits));
104-
})
105-
.map(pair -> pair.mapSnd(x -> Result.sequence(x)))
106-
.then(pair -> {
107-
108-
var ingrEdits = new ArrayList<IngredientEditDescriptor>();
109-
var stepEdits = new ArrayList<StepEditDescriptor>();
110-
var tagEdits = new ArrayList<TagEditDescriptor>();
111-
112-
if (pair.snd().isError()) {
113-
return Result.error(pair.snd().getError());
114-
}
115-
116-
var list = pair.snd().getValue();
117-
for (var item : list) {
118-
if (item instanceof TagEditDescriptor) {
119-
tagEdits.add((TagEditDescriptor) item);
120-
} else if (item instanceof StepEditDescriptor) {
121-
stepEdits.add((StepEditDescriptor) item);
122-
} else if (item instanceof IngredientEditDescriptor) {
123-
ingrEdits.add((IngredientEditDescriptor) item);
124-
} else {
125-
// unreachable
126-
assert false : "invalid edit descriptor";
127-
}
114+
// ugly AF, but i don't care at the moment.
115+
var tes = Result.sequence(tagEdits);
116+
var ses = Result.sequence(stepEdits);
117+
var ies = Result.sequence(ingrEdits);
118+
119+
if (tes.isError()) {
120+
return Result.error(tes.getError());
121+
} else if (ses.isError()) {
122+
return Result.error(ses.getError());
123+
} else if (ies.isError()) {
124+
return Result.error(ies.getError());
128125
}
129126

130-
return Result.of(new EditCommandStub(pair.fst(),
131-
new RecipeEditDescriptor(ingrEdits, stepEdits, tagEdits)));
127+
return Result.of(new EditCommandStub(item,
128+
new RecipeEditDescriptor(editedName, ies.getValue(), ses.getValue(), tes.getValue())
129+
));
132130
});
133131
}
134132

135133

136134

137135

138-
private static Result<EditDescriptor> parseIngredientEdit(ArgName argName, String ingredientName,
136+
private static Result<IngredientEditDescriptor> parseIngredientEdit(ArgName argName, String ingredientName,
139137
Optional<Quantity> qty) {
140138

141139
var components = argName.getComponents();
@@ -163,7 +161,7 @@ private static Result<EditDescriptor> parseIngredientEdit(ArgName argName, Strin
163161

164162

165163

166-
private static Result<EditDescriptor> parseTagEdit(ArgName argName, String argValue) {
164+
private static Result<TagEditDescriptor> parseTagEdit(ArgName argName, String argValue) {
167165

168166
var components = argName.getComponents();
169167

@@ -184,7 +182,7 @@ private static Result<EditDescriptor> parseTagEdit(ArgName argName, String argVa
184182
));
185183
}
186184

187-
private static Result<EditDescriptor> parseStepEdit(ArgName argName, String argValue) {
185+
private static Result<StepEditDescriptor> parseStepEdit(ArgName argName, String argValue) {
188186

189187
var components = argName.getComponents();
190188

0 commit comments

Comments
 (0)