Skip to content

Commit 2e022d9

Browse files
committed
some changes in Mediator package
1 parent cfc915d commit 2e022d9

File tree

12 files changed

+427
-344
lines changed

12 files changed

+427
-344
lines changed

src/refactoring_guru/mediator/example/Demo.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,38 @@
33
import refactoring_guru.mediator.example.components.*;
44
import refactoring_guru.mediator.example.mediator.Editor;
55
import refactoring_guru.mediator.example.mediator.Mediator;
6+
import refactoring_guru.mediator.example.mediator.Note;
67

78
import javax.swing.*;
89

910
/**
1011
* EN: Demo class. Everything comes together here.
11-
*
12+
* <p>
1213
* RU: Демо-класс. Здесь всё сводится воедино.
1314
*/
1415
public class Demo {
15-
public static void main(String[] args) {
16-
Mediator mediator = new Editor();
16+
public static void main(String[] args) {
17+
Mediator mediator = new Editor();
18+
ListModel<Note> noteList = new AbstractListModel<>() {
19+
@Override
20+
public int getSize() {
21+
return 0;
22+
}
1723

18-
mediator.registerComponent(new Title());
19-
mediator.registerComponent(new TextBox());
20-
mediator.registerComponent(new AddButton());
21-
mediator.registerComponent(new DeleteButton());
22-
mediator.registerComponent(new SaveButton());
23-
mediator.registerComponent(new List(new DefaultListModel()));
24-
mediator.registerComponent(new Filter());
24+
@Override
25+
public Note getElementAt(int i) {
26+
return null;
27+
}
28+
};
2529

26-
mediator.createGUI();
27-
}
30+
mediator.registerComponent(new Title());
31+
mediator.registerComponent(new TextBox());
32+
mediator.registerComponent(new AddButton());
33+
mediator.registerComponent(new DeleteButton());
34+
mediator.registerComponent(new SaveButton());
35+
mediator.registerComponent(new InitList(new DefaultListModel<>()));
36+
mediator.registerComponent(new Filter(mediator, noteList));
37+
38+
mediator.createGUI();
39+
}
2840
}

src/refactoring_guru/mediator/example/components/AddButton.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,29 @@
99
/**
1010
* EN: Concrete components don't talk with each other. They have only one
1111
* communication channel–sending requests to the mediator.
12-
*
12+
* <p>
1313
* RU: Конкретные компоненты никак не связаны между собой. У них есть только
1414
* один канал общения – через отправку уведомлений посреднику.
1515
*/
1616
public class AddButton extends JButton implements Component {
17-
private Mediator mediator;
17+
private transient Mediator mediator;
1818

19-
public AddButton() {
20-
super("Add");
21-
}
19+
public AddButton() {
20+
super("Add");
21+
}
2222

23-
@Override
24-
public void setMediator(Mediator mediator) {
25-
this.mediator = mediator;
26-
}
23+
@Override
24+
public void setMediator(Mediator mediator) {
25+
this.mediator = mediator;
26+
}
2727

28-
@Override
29-
protected void fireActionPerformed(ActionEvent actionEvent) {
30-
mediator.addNewNote(new Note());
31-
}
28+
@Override
29+
protected void fireActionPerformed(ActionEvent actionEvent) {
30+
mediator.addNewNote(new Note());
31+
}
3232

33-
@Override
34-
public String getName() {
35-
return "AddButton";
36-
}
33+
@Override
34+
public String getName() {
35+
return "AddButton";
36+
}
3737
}

src/refactoring_guru/mediator/example/components/Component.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44

55
/**
66
* EN: Common component interface.
7-
*
7+
* <p>
88
* RU: Общий интерфейс компонентов.
99
*/
1010
public interface Component {
11-
void setMediator(Mediator mediator);
12-
String getName();
11+
void setMediator(Mediator mediator);
12+
13+
String getName();
1314
}

src/refactoring_guru/mediator/example/components/DeleteButton.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,29 @@
88
/**
99
* EN: Concrete components don't talk with each other. They have only one
1010
* communication channel–sending requests to the mediator.
11-
*
11+
* <p>
1212
* RU: Конкретные компоненты никак не связаны между собой. У них есть только
1313
* один канал общения – через отправку уведомлений посреднику.
1414
*/
15-
public class DeleteButton extends JButton implements Component {
16-
private Mediator mediator;
15+
public class DeleteButton extends JButton implements Component {
16+
private transient Mediator mediator;
1717

18-
public DeleteButton() {
19-
super("Del");
20-
}
18+
public DeleteButton() {
19+
super("Del");
20+
}
2121

22-
@Override
23-
public void setMediator(Mediator mediator) {
24-
this.mediator = mediator;
25-
}
22+
@Override
23+
public void setMediator(Mediator mediator) {
24+
this.mediator = mediator;
25+
}
2626

27-
@Override
28-
protected void fireActionPerformed(ActionEvent actionEvent) {
29-
mediator.deleteNote();
30-
}
27+
@Override
28+
protected void fireActionPerformed(ActionEvent actionEvent) {
29+
mediator.deleteNote();
30+
}
3131

32-
@Override
33-
public String getName() {
34-
return "DelButton";
35-
}
32+
@Override
33+
public String getName() {
34+
return "DelButton";
35+
}
3636
}

src/refactoring_guru/mediator/example/components/Filter.java

Lines changed: 41 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,61 +5,57 @@
55

66
import javax.swing.*;
77
import java.awt.event.KeyEvent;
8-
import java.util.ArrayList;
8+
import javax.swing.DefaultListModel;
99

1010
/**
1111
* EN: Concrete components don't talk with each other. They have only one
1212
* communication channel–sending requests to the mediator.
13-
*
13+
* <p>
1414
* RU: Конкретные компоненты никак не связаны между собой. У них есть только
1515
* один канал общения – через отправку уведомлений посреднику.
1616
*/
1717
public class Filter extends JTextField implements Component {
18-
private Mediator mediator;
19-
private ListModel listModel;
20-
21-
public Filter() {}
22-
23-
@Override
24-
public void setMediator(Mediator mediator) {
25-
this.mediator = mediator;
18+
private transient Mediator mediator;
19+
private transient ListModel<Note> listModel;
20+
21+
public Filter(Mediator mediator, ListModel<Note> listModel) {
22+
this.mediator = mediator;
23+
this.listModel = listModel;
24+
}
25+
26+
@Override
27+
public void setMediator(Mediator mediator) {
28+
this.mediator = mediator;
29+
}
30+
31+
@Override
32+
protected void processComponentKeyEvent(KeyEvent keyEvent) {
33+
String start = getText();
34+
searchElements(start);
35+
}
36+
37+
public void setList(ListModel<Note> listModel) {
38+
this.listModel = listModel;
39+
}
40+
41+
private void searchElements(String s) {
42+
if (listModel == null || s.equals("")) {
43+
mediator.setElementsList(listModel);
44+
return;
2645
}
2746

28-
@Override
29-
protected void processComponentKeyEvent(KeyEvent keyEvent) {
30-
String start = getText();
31-
searchElements(start);
47+
DefaultListModel<Note> filteredListModel = new DefaultListModel<>();
48+
for (int i = 0; i < listModel.getSize(); i++) {
49+
Note note = listModel.getElementAt(i);
50+
if (note.getName().contains(s)) {
51+
filteredListModel.addElement(note);
52+
}
3253
}
54+
mediator.setElementsList(filteredListModel);
55+
}
3356

34-
public void setList(ListModel listModel) {
35-
this.listModel = listModel;
36-
}
37-
38-
private void searchElements(String s) {
39-
if (listModel == null) {
40-
return;
41-
}
42-
43-
if (s.equals("")) {
44-
mediator.setElementsList(listModel);
45-
return;
46-
}
47-
48-
ArrayList<Note> notes = new ArrayList<>();
49-
for (int i = 0; i < listModel.getSize(); i++) {
50-
notes.add((Note) listModel.getElementAt(i));
51-
}
52-
DefaultListModel<Note> listModel = new DefaultListModel<>();
53-
for (Note note : notes) {
54-
if (note.getName().contains(s)) {
55-
listModel.addElement(note);
56-
}
57-
}
58-
mediator.setElementsList(listModel);
59-
}
60-
61-
@Override
62-
public String getName() {
63-
return "Filter";
64-
}
57+
@Override
58+
public String getName() {
59+
return "Filter";
60+
}
6561
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package refactoring_guru.mediator.example.components;
2+
3+
import refactoring_guru.mediator.example.mediator.Mediator;
4+
import refactoring_guru.mediator.example.mediator.Note;
5+
6+
import javax.swing.*;
7+
8+
/**
9+
* EN: Concrete components don't talk with each other. They have only one
10+
* communication channel–sending requests to the mediator.
11+
* <p>
12+
* RU: Конкретные компоненты никак не связаны между собой. У них есть только
13+
* один канал общения – через отправку уведомлений посреднику.
14+
*/
15+
@SuppressWarnings("unchecked")
16+
public class InitList extends JList implements Component {
17+
private transient Mediator mediator;
18+
private final DefaultListModel<Note> listModel;
19+
private static final boolean running = true;
20+
21+
public InitList(DefaultListModel<Note> listModel) {
22+
super(listModel);
23+
this.listModel = listModel;
24+
setModel(listModel);
25+
this.setLayoutOrientation(JList.VERTICAL);
26+
Thread thread = new Thread(new Hide(this));
27+
thread.start();
28+
}
29+
30+
@Override
31+
public void setMediator(Mediator mediator) {
32+
this.mediator = mediator;
33+
}
34+
35+
public void addElement(Note note) {
36+
listModel.addElement(note);
37+
int index = listModel.size() - 1;
38+
setSelectedIndex(index);
39+
ensureIndexIsVisible(index);
40+
mediator.sendToFilter(listModel);
41+
}
42+
43+
public void deleteElement() {
44+
int index = this.getSelectedIndex();
45+
if (index >= 0 && index < listModel.size()) {
46+
listModel.remove(index);
47+
mediator.sendToFilter(listModel);
48+
}
49+
}
50+
51+
public Note getCurrentElement() {
52+
return (Note) getSelectedValue();
53+
}
54+
55+
@Override
56+
public String getName() {
57+
return "List";
58+
}
59+
60+
private class Hide implements Runnable {
61+
private final InitList list;
62+
63+
Hide(InitList list) {
64+
this.list = list;
65+
}
66+
67+
@Override
68+
public void run() {
69+
while (running) {
70+
SwingUtilities.invokeLater(() -> mediator.hideElements(list.isSelectionEmpty()));
71+
}
72+
}
73+
}
74+
}

src/refactoring_guru/mediator/example/components/SaveButton.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,29 @@
88
/**
99
* EN: Concrete components don't talk with each other. They have only one
1010
* communication channel–sending requests to the mediator.
11-
*
11+
* <p>
1212
* RU: Конкретные компоненты никак не связаны между собой. У них есть только
1313
* один канал общения – через отправку уведомлений посреднику.
1414
*/
1515
public class SaveButton extends JButton implements Component {
16-
private Mediator mediator;
16+
private transient Mediator mediator;
1717

18-
public SaveButton() {
19-
super("Save");
20-
}
18+
public SaveButton() {
19+
super("Save");
20+
}
2121

22-
@Override
23-
public void setMediator(Mediator mediator) {
24-
this.mediator = mediator;
25-
}
22+
@Override
23+
public void setMediator(Mediator mediator) {
24+
this.mediator = mediator;
25+
}
2626

27-
@Override
28-
protected void fireActionPerformed(ActionEvent actionEvent) {
29-
mediator.saveChanges();
30-
}
27+
@Override
28+
protected void fireActionPerformed(ActionEvent actionEvent) {
29+
mediator.saveChanges();
30+
}
3131

32-
@Override
33-
public String getName() {
34-
return "SaveButton";
35-
}
32+
@Override
33+
public String getName() {
34+
return "SaveButton";
35+
}
3636
}

0 commit comments

Comments
 (0)