forked from nus-cs2103-AY2324S1/tp
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request nus-cs2103-AY2324S1#90 from LicongHuang/convertlead
Add Convertion of class
- Loading branch information
Showing
8 changed files
with
351 additions
and
12 deletions.
There are no files selected for viewing
89 changes: 89 additions & 0 deletions
89
src/main/java/seedu/address/logic/commands/ConvertClientToLeadCommand.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
package seedu.address.logic.commands; | ||
|
||
import static java.util.Objects.requireNonNull; | ||
import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; | ||
|
||
import java.util.HashSet; | ||
import java.util.List; | ||
import java.util.Set; | ||
|
||
import seedu.address.commons.core.index.Index; | ||
import seedu.address.logic.Messages; | ||
import seedu.address.logic.commands.exceptions.CommandException; | ||
import seedu.address.model.Model; | ||
import seedu.address.model.person.Address; | ||
import seedu.address.model.person.Client; | ||
import seedu.address.model.person.Email; | ||
import seedu.address.model.person.Lead; | ||
import seedu.address.model.person.Name; | ||
import seedu.address.model.person.Person; | ||
import seedu.address.model.person.Phone; | ||
import seedu.address.model.tag.Tag; | ||
|
||
/** | ||
* Converts a Client to a Lead in the address book. | ||
*/ | ||
public class ConvertClientToLeadCommand extends Command { | ||
public static final String COMMAND_WORD = "converttolead"; | ||
|
||
public static final String MESSAGE_USAGE = COMMAND_WORD + ": Converts a client to a lead by the index " | ||
+ "number used in the displayed person list. \n" | ||
+ "Parameters: INDEX (must be a positive integer)\n" | ||
+ "Example: " + COMMAND_WORD + " 1"; | ||
|
||
public static final String MESSAGE_CONVERT_SUCCESS = "Converted Client to Lead: %1$s"; | ||
|
||
private final Index index; | ||
|
||
public ConvertClientToLeadCommand(Index index) { | ||
requireNonNull(index); | ||
this.index = index; | ||
} | ||
|
||
@Override | ||
public CommandResult execute(Model model) throws CommandException { | ||
requireNonNull(model); | ||
List<Person> lastShownList = model.getFilteredPersonList(); | ||
|
||
if (index.getZeroBased() >= lastShownList.size()) { | ||
throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); | ||
} | ||
|
||
Person personToConvert = lastShownList.get(index.getZeroBased()); | ||
|
||
if (!(personToConvert instanceof Client)) { | ||
throw new CommandException("The person at the specified index is not a Client."); | ||
} | ||
|
||
Name name = personToConvert.getName(); | ||
Phone phone = personToConvert.getPhone(); | ||
Email email = personToConvert.getEmail(); | ||
Address address = personToConvert.getAddress(); | ||
Set<Tag> tags = new HashSet<Tag>(); | ||
tags.remove(new Tag("Client")); | ||
tags.add(new Tag("Lead")); | ||
// TODO: Add more fields from client to lead | ||
|
||
|
||
Lead convertedLead = new Lead(name, phone, email, address, tags); | ||
|
||
model.setPerson(personToConvert, convertedLead); | ||
model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); | ||
return new CommandResult(String.format(MESSAGE_CONVERT_SUCCESS, Messages.format(convertedLead))); | ||
} | ||
|
||
@Override | ||
public boolean equals(Object other) { | ||
if (other == this) { | ||
return true; | ||
} | ||
|
||
if (!(other instanceof ConvertClientToLeadCommand)) { | ||
return false; | ||
} | ||
|
||
ConvertClientToLeadCommand otherConvertCommand = (ConvertClientToLeadCommand) other; | ||
return index.equals(otherConvertCommand.index); | ||
} | ||
} | ||
|
88 changes: 88 additions & 0 deletions
88
src/main/java/seedu/address/logic/commands/ConvertLeadToClientCommand.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
package seedu.address.logic.commands; | ||
|
||
import static java.util.Objects.requireNonNull; | ||
import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS; | ||
|
||
import java.util.HashSet; | ||
import java.util.List; | ||
import java.util.Set; | ||
|
||
import seedu.address.commons.core.index.Index; | ||
import seedu.address.logic.Messages; | ||
import seedu.address.logic.commands.exceptions.CommandException; | ||
import seedu.address.model.Model; | ||
import seedu.address.model.person.Address; | ||
import seedu.address.model.person.Client; | ||
import seedu.address.model.person.Email; | ||
import seedu.address.model.person.Lead; | ||
import seedu.address.model.person.Name; | ||
import seedu.address.model.person.Person; | ||
import seedu.address.model.person.Phone; | ||
import seedu.address.model.tag.Tag; | ||
|
||
/** | ||
* Converts a Lead to a Client in the address book. | ||
*/ | ||
public class ConvertLeadToClientCommand extends Command { | ||
public static final String COMMAND_WORD = "converttoclient"; | ||
|
||
public static final String MESSAGE_USAGE = COMMAND_WORD + ": Converts a lead to a client by the index " | ||
+ "number used in the displayed person list. \n" | ||
+ "Parameters: INDEX (must be a positive integer)\n" | ||
+ "Example: " + COMMAND_WORD + " 1"; | ||
|
||
public static final String MESSAGE_CONVERT_SUCCESS = "Converted Lead to Client: %1$s"; | ||
|
||
private final Index index; | ||
|
||
public ConvertLeadToClientCommand(Index index) { | ||
requireNonNull(index); | ||
this.index = index; | ||
} | ||
|
||
@Override | ||
public CommandResult execute(Model model) throws CommandException { | ||
requireNonNull(model); | ||
List<Person> lastShownList = model.getFilteredPersonList(); | ||
|
||
if (index.getZeroBased() >= lastShownList.size()) { | ||
throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); | ||
} | ||
|
||
Person personToConvert = lastShownList.get(index.getZeroBased()); | ||
|
||
if (!(personToConvert instanceof Lead)) { | ||
throw new CommandException("The person at the specified index is not a Lead."); | ||
} | ||
|
||
Name name = personToConvert.getName(); | ||
Phone phone = personToConvert.getPhone(); | ||
Email email = personToConvert.getEmail(); | ||
Address address = personToConvert.getAddress(); | ||
Set<Tag> tags = new HashSet<>(); | ||
tags.remove(new Tag("Lead")); | ||
tags.add(new Tag("Client")); | ||
// TODO: Add more fields from lead to client | ||
|
||
Client convertedClient = new Client(name, phone, email, address, tags); | ||
|
||
model.setPerson(personToConvert, convertedClient); | ||
model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); | ||
return new CommandResult(String.format(MESSAGE_CONVERT_SUCCESS, Messages.format(convertedClient))); | ||
} | ||
|
||
@Override | ||
public boolean equals(Object other) { | ||
if (other == this) { | ||
return true; | ||
} | ||
|
||
if (!(other instanceof ConvertLeadToClientCommand)) { | ||
return false; | ||
} | ||
|
||
ConvertLeadToClientCommand otherConvertCommand = (ConvertLeadToClientCommand) other; | ||
return index.equals(otherConvertCommand.index); | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
39 changes: 39 additions & 0 deletions
39
src/main/java/seedu/address/logic/parser/ConvertClientToLeadCommandParser.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package seedu.address.logic.parser; | ||
|
||
import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; | ||
|
||
import java.util.Arrays; | ||
|
||
import seedu.address.commons.core.index.Index; | ||
import seedu.address.logic.commands.ConvertClientToLeadCommand; | ||
import seedu.address.logic.parser.exceptions.ParseException; | ||
import seedu.address.model.person.NameContainsKeywordsPredicate; | ||
|
||
/** | ||
* Parses input arguments and creates a new FindCommand object | ||
*/ | ||
public class ConvertClientToLeadCommandParser implements Parser<ConvertClientToLeadCommand> { | ||
|
||
/** | ||
* Parses the given {@code String} of arguments in the context of the FindCommand | ||
* and returns a FindCommand object for execution. | ||
* @throws ParseException if the user input does not conform the expected format | ||
*/ | ||
|
||
public ConvertClientToLeadCommand parse(String args) throws ParseException { | ||
String trimmedArgs = args.trim(); | ||
if (trimmedArgs.isEmpty()) { | ||
throw new ParseException( | ||
String.format(MESSAGE_INVALID_COMMAND_FORMAT, ConvertClientToLeadCommand.MESSAGE_USAGE)); | ||
} | ||
|
||
try { | ||
Index index = ParserUtil.parseIndex(trimmedArgs); | ||
return new ConvertClientToLeadCommand(index); | ||
} catch (ParseException pe) { | ||
throw new ParseException( | ||
String.format(MESSAGE_INVALID_COMMAND_FORMAT, ConvertClientToLeadCommand.MESSAGE_USAGE), pe); | ||
} | ||
} | ||
|
||
} |
39 changes: 39 additions & 0 deletions
39
src/main/java/seedu/address/logic/parser/ConvertLeadToClientCommandParser.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package seedu.address.logic.parser; | ||
|
||
import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; | ||
|
||
import java.util.Arrays; | ||
|
||
import seedu.address.commons.core.index.Index; | ||
import seedu.address.logic.commands.ConvertLeadToClientCommand; | ||
import seedu.address.logic.parser.exceptions.ParseException; | ||
import seedu.address.model.person.NameContainsKeywordsPredicate; | ||
|
||
/** | ||
* Parses input arguments and creates a new FindCommand object | ||
*/ | ||
public class ConvertLeadToClientCommandParser implements Parser<ConvertLeadToClientCommand> { | ||
|
||
/** | ||
* Parses the given {@code String} of arguments in the context of the FindCommand | ||
* and returns a FindCommand object for execution. | ||
* @throws ParseException if the user input does not conform the expected format | ||
*/ | ||
|
||
public ConvertLeadToClientCommand parse(String args) throws ParseException { | ||
String trimmedArgs = args.trim(); | ||
if (trimmedArgs.isEmpty()) { | ||
throw new ParseException( | ||
String.format(MESSAGE_INVALID_COMMAND_FORMAT, ConvertLeadToClientCommand.MESSAGE_USAGE)); | ||
} | ||
|
||
try { | ||
Index index = ParserUtil.parseIndex(trimmedArgs); | ||
return new ConvertLeadToClientCommand(index); | ||
} catch (ParseException pe) { | ||
throw new ParseException( | ||
String.format(MESSAGE_INVALID_COMMAND_FORMAT, ConvertLeadToClientCommand.MESSAGE_USAGE), pe); | ||
} | ||
} | ||
|
||
} |
41 changes: 41 additions & 0 deletions
41
src/test/java/seedu/address/logic/commands/ConvertClientToLeadCommandTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
import static org.junit.jupiter.api.Assertions.assertTrue; | ||
import static org.junit.jupiter.api.Assertions.assertFalse; | ||
import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; | ||
|
||
import org.junit.jupiter.api.Test; | ||
|
||
import seedu.address.model.Model; | ||
import seedu.address.model.ModelManager; | ||
import seedu.address.model.UserPrefs; | ||
import seedu.address.model.person.Client; | ||
import seedu.address.model.person.Lead; | ||
import seedu.address.testutil.TypicalPersons; | ||
|
||
public class ConvertClientToLeadCommandTest { | ||
private Model model = new ModelManager(TypicalPersons.getTypicalAddressBook(), new UserPrefs()); | ||
private Model expectedModel = new ModelManager(TypicalPersons.getTypicalAddressBook(), new UserPrefs()); | ||
|
||
@Test | ||
public void execute_validClientIndex_success() { | ||
Client clientToConvert = TypicalPersons.getTypicalClients().get(0); // assuming you have a list of clients | ||
ConvertClientToLeadCommand command = new ConvertClientToLeadCommand(clientToConvert.getIndex()); | ||
|
||
String expectedMessage = String.format(ConvertClientToLeadCommand.MESSAGE_CONVERT_SUCCESS, clientToConvert); | ||
expectedModel.deletePerson(clientToConvert); | ||
expectedModel.addPerson(new Lead(clientToConvert)); // Assuming a constructor for Lead is available | ||
|
||
assertCommandSuccess(command, model, expectedMessage, expectedModel); | ||
} | ||
|
||
@Test | ||
public void execute_invalidClientIndex_failure() { | ||
int outOfBoundIndex = model.getFilteredPersonList().size() + 1; | ||
ConvertClientToLeadCommand command = new ConvertClientToLeadCommand(Index.fromOneBased(outOfBoundIndex)); | ||
|
||
assertCommandFailure(command, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); | ||
} | ||
|
||
// Add more test cases for edge cases, if necessary | ||
} | ||
|
41 changes: 41 additions & 0 deletions
41
src/test/java/seedu/address/logic/commands/ConvertLeadToClientCommandTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
import static org.junit.jupiter.api.Assertions.assertTrue; | ||
import static org.junit.jupiter.api.Assertions.assertFalse; | ||
import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; | ||
|
||
import org.junit.jupiter.api.Test; | ||
|
||
import seedu.address.model.Model; | ||
import seedu.address.model.ModelManager; | ||
import seedu.address.model.UserPrefs; | ||
import seedu.address.model.person.Client; | ||
import seedu.address.model.person.Lead; | ||
import seedu.address.testutil.TypicalPersons; | ||
|
||
public class ConvertLeadToClientCommandTest { | ||
private Model model = new ModelManager(TypicalPersons.getTypicalAddressBook(), new UserPrefs()); | ||
private Model expectedModel = new ModelManager(TypicalPersons.getTypicalAddressBook(), new UserPrefs()); | ||
|
||
@Test | ||
public void execute_validLeadIndex_success() { | ||
Lead leadToConvert = TypicalPersons.getTypicalLeads().get(0); // assuming you have a list of leads | ||
ConvertLeadToClientCommand command = new ConvertLeadToClientCommand(leadToConvert.getIndex()); | ||
|
||
String expectedMessage = String.format(ConvertLeadToClientCommand.MESSAGE_CONVERT_SUCCESS, leadToConvert); | ||
expectedModel.deletePerson(leadToConvert); | ||
expectedModel.addPerson(new Client(leadToConvert)); // Assuming a constructor for Client is available | ||
|
||
assertCommandSuccess(command, model, expectedMessage, expectedModel); | ||
} | ||
|
||
@Test | ||
public void execute_invalidLeadIndex_failure() { | ||
int outOfBoundIndex = model.getFilteredPersonList().size() + 1; | ||
ConvertLeadToClientCommand command = new ConvertLeadToClientCommand(Index.fromOneBased(outOfBoundIndex)); | ||
|
||
assertCommandFailure(command, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); | ||
} | ||
|
||
// Add more test cases for edge cases, if necessary | ||
} | ||
|