Skip to content

Commit 4a70ee0

Browse files
committed
New implementation for resolving the duplicate problem.
1 parent 37f6ac9 commit 4a70ee0

File tree

6 files changed

+70
-32
lines changed

6 files changed

+70
-32
lines changed

src/main/java/create_flashcard_use_case/CreateFlashcardInputBoundary.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ public interface CreateFlashcardInputBoundary {
1010
CreateFlashcardResponseModel create(CreateFlashcardRequestModel requestModel);
1111
CreateFlashcardResponseModel create(CreateFlashcardRequestModel requestModel, int flashcardId);
1212

13+
1314
}

src/main/java/create_flashcard_use_case/CreateFlashcardInteractor.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,15 @@ else if (gateway.getFlashcardSet(requestModel.getFlashcardSetId()) == null) {
3939
}
4040
for (int flashcardId : gateway.getFlashcardSet(requestModel.getFlashcardSetId()).getFlashcardIds()){
4141
if (gateway.getFlashcard(flashcardId).getTerm().equals(term)){
42-
return new CreateFlashcardResponseModel(LocalDateTime.now(), requestModel.getTerm(),
43-
gateway.getFlashcard(flashcardId).getDefinition(), flashcardId);
42+
return presenter.prepareFailView(new CreateFlashcardResponseModel(LocalDateTime.now(), requestModel.getTerm(),
43+
gateway.getFlashcard(flashcardId).getDefinition(), flashcardId, true));
4444
}
4545
}
4646
LocalDateTime creationDate = LocalDateTime.now();
47-
gateway.saveFlashcard(new FlashcardDsRequestModel(term, definition, creationDate, -1,
47+
int flashcardId = gateway.saveFlashcard(new FlashcardDsRequestModel(term, definition, creationDate, -1,
4848
requestModel.getFlashcardSetId()));
49-
return new CreateFlashcardResponseModel(creationDate, term, definition, -1);
49+
return presenter.prepareSuccessView(new
50+
CreateFlashcardResponseModel(creationDate, term, definition, flashcardId, false));
5051

5152
}
5253

@@ -56,9 +57,6 @@ public CreateFlashcardResponseModel create(CreateFlashcardRequestModel requestMo
5657
LocalDateTime creationDate = LocalDateTime.now();
5758
gateway.editFlashcard(new FlashcardDsRequestModel(term, definition, creationDate, flashcardId,
5859
requestModel.getFlashcardSetId()));
59-
return new CreateFlashcardResponseModel(creationDate, term, definition, -1);
60+
return new CreateFlashcardResponseModel(creationDate, term, definition, flashcardId,false);
6061
}
61-
62-
63-
6462
}

src/main/java/create_flashcard_use_case/CreateFlashcardOutputBoundary.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
*/
77
public interface CreateFlashcardOutputBoundary {
88
CreateFlashcardResponseModel prepareSuccessView(CreateFlashcardResponseModel responseModel);
9-
109
CreateFlashcardResponseModel prepareFailView(String error);
10+
CreateFlashcardResponseModel prepareFailView(CreateFlashcardResponseModel responseModel);
1111
}

src/main/java/create_flashcard_use_case/CreateFlashcardResponseModel.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,22 @@ public class CreateFlashcardResponseModel {
1010
private final LocalDateTime creationDate;
1111
private String term, definition;
1212
private int flashcardId;
13+
private final Boolean existsDuplicate;
1314

1415
/**
15-
* Create FcCResponseModel
16-
* @param creationDate date of creation of the flashcard
16+
*Creating CreateFlashcardResponseModel for flashcard creation
17+
* @param creationDate date of creation
1718
* @param term term of the flashcard
1819
* @param definition definition of the flashcard
20+
* @param flashcardId flashcard id of the flashcard
21+
* @param existsDuplicate if there is duplicate flashcard currently
1922
*/
20-
public CreateFlashcardResponseModel(LocalDateTime creationDate, String term, String definition, int flashcardId) {
23+
public CreateFlashcardResponseModel(LocalDateTime creationDate, String term, String definition, int flashcardId, Boolean existsDuplicate) {
2124
this.creationDate = creationDate;
2225
this.term = term;
2326
this.definition = definition;
2427
this.flashcardId = flashcardId;
28+
this.existsDuplicate = existsDuplicate;
2529

2630
}
2731

@@ -52,4 +56,8 @@ public LocalDateTime getCreationDate() {
5256
public int getFlashcardId() {
5357
return flashcardId;
5458
}
59+
60+
public Boolean existsDuplicate() {
61+
return existsDuplicate;
62+
}
5563
}

src/main/java/frameworks_and_drivers/components/CreateFlashcardPanel.java

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.awt.*;
88
import java.awt.event.ActionEvent;
99
import java.awt.event.ActionListener;
10+
import java.time.format.DateTimeFormatter;
1011

1112
/**
1213
* Panel for flashcard creator.
@@ -72,30 +73,18 @@ public void actionPerformed(ActionEvent e) {
7273
//Success view.
7374
CreateFlashcardResponseModel responseModel = controller.create(term_text.getText(),
7475
definition_text.getText(), -1);
75-
if (responseModel.getFlashcardId() == -1) {
76+
if (! responseModel.existsDuplicate()) {
7677
successView(responseModel);
7778
} else {
78-
Object[] options = {"re-edit current card", "overwrite", "back to flashcard set"};
79-
int action = JOptionPane.showOptionDialog(this,
80-
"Term already exist:\n" + responseModel.getTerm() + "\n" + responseModel.getDefinition()
81-
+ "\ncurrent card:\n"+ term_text.getText() + "\n" + definition_text.getText(),
82-
"conflict", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE,
83-
null, options, options[0]);
84-
if (action == JOptionPane.YES_OPTION) {
85-
existing_definition.setText("<html>existing definition :<br>" + responseModel.getDefinition() +
86-
"</html>");
87-
} else if (action == JOptionPane.NO_OPTION) {
88-
responseModel = controller.create(term_text.getText().replace("\n", " "),
89-
definition_text.getText().replace("\n", " "), responseModel.getFlashcardId());
90-
successView(responseModel);
91-
} else {
92-
fcCMain.dispose();
93-
}
79+
duplicateView(responseModel);
9480
}
9581
} catch (RuntimeException error) {
9682
//Failure view.
97-
int action = JOptionPane.showConfirmDialog(this,
98-
error + "\nre-edit?");
83+
Object[] options = {"re_edit", "back to flashcard set"};
84+
int action = JOptionPane.showOptionDialog(this,
85+
error.getMessage(),
86+
"Failure", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
87+
null, options, options[0]);
9988
if (action == JOptionPane.NO_OPTION) {
10089
fcCMain.dispose();
10190
}
@@ -105,7 +94,9 @@ public void actionPerformed(ActionEvent e) {
10594
private void successView(CreateFlashcardResponseModel responseModel){
10695
Object[] options = {"create another card", "back to flashcard set"};
10796
int action = JOptionPane.showOptionDialog(this,
108-
"Card created:\n" + responseModel.getTerm() + "\n" + responseModel.getDefinition(),
97+
"Card created at "+ responseModel.getCreationDate().format(DateTimeFormatter.
98+
ofPattern("yyyy-MM-dd HH:mm")) + "\nTerm: " + responseModel.getTerm() + "\nDefinition: " +
99+
responseModel.getDefinition() + "\nid: " + responseModel.getFlashcardId(),
109100
"Success", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
110101
null, options, options[0]);
111102
if (action == JOptionPane.YES_OPTION) {
@@ -115,4 +106,24 @@ private void successView(CreateFlashcardResponseModel responseModel){
115106
fcCMain.dispose();
116107
}
117108
}
109+
private void duplicateView(CreateFlashcardResponseModel responseModel){
110+
Object[] options = {"re-edit current card", "overwrite", "back to flashcard set"};
111+
int action = JOptionPane.showOptionDialog(this,
112+
"Term already exist:\n" + responseModel.getTerm() + "\n" + responseModel.getDefinition()
113+
+ "\ncurrent card:\n"+ term_text.getText() + "\n" + definition_text.getText(),
114+
"conflict", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE,
115+
null, options, options[0]);
116+
if (action == JOptionPane.YES_OPTION) {
117+
existing_definition.setText("<html>existing definition :<br>" + responseModel.getDefinition() +
118+
"</html>");
119+
existing_term.setText("<html>existing term :<br>" + responseModel.getTerm() +
120+
"</html>");
121+
} else if (action == JOptionPane.NO_OPTION) {
122+
responseModel = controller.create(term_text.getText().replace("\n", " "),
123+
definition_text.getText().replace("\n", " "), responseModel.getFlashcardId());
124+
successView(responseModel);
125+
} else {
126+
fcCMain.dispose();
127+
}
128+
}
118129
}

src/main/java/interface_adapters/presenters/CreateFlashcardPresenter.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,33 @@
1010
* @author Junyu Chen
1111
*/
1212
public class CreateFlashcardPresenter implements CreateFlashcardOutputBoundary {
13+
/**
14+
* When creation is successful.
15+
* @param responseModel presenting information of the flashcard that was successfully created
16+
* @return the responseModel
17+
*/
1318
@Override
1419
public CreateFlashcardResponseModel prepareSuccessView(CreateFlashcardResponseModel responseModel) {
1520
return responseModel;
1621
}
1722

23+
/**
24+
* When creation failed because of an error.
25+
* @param error error that occurred
26+
* @return the error
27+
*/
1828
@Override
1929
public CreateFlashcardResponseModel prepareFailView(String error) {
2030
throw new CreateFlashcardFailed(error);
2131
}
32+
33+
/**
34+
* When creation failed because of duplicate terms.
35+
* @param responseModel presenting information of the flashcard that already existed
36+
* @return the responseModel
37+
*/
38+
@Override
39+
public CreateFlashcardResponseModel prepareFailView(CreateFlashcardResponseModel responseModel) {
40+
return responseModel;
41+
}
2242
}

0 commit comments

Comments
 (0)