X Tutup
Skip to content

Commit 718b3cc

Browse files
committed
Finished the Flux example.
1 parent c288f13 commit 718b3cc

File tree

10 files changed

+123
-20
lines changed

10 files changed

+123
-20
lines changed

flux/src/main/java/com/iluwatar/App.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,22 @@
33
public class App {
44

55
public static void main( String[] args ) {
6-
System.out.println( "Hello World!" );
6+
// initialize
7+
MenuStore menuStore = new MenuStore();
8+
Dispatcher.getInstance().registerStore(menuStore);
9+
ContentStore contentStore = new ContentStore();
10+
Dispatcher.getInstance().registerStore(contentStore);
11+
MenuView menuView = new MenuView();
12+
menuStore.registerView(menuView);
13+
ContentView contentView = new ContentView();
14+
contentStore.registerView(contentView);
15+
16+
// render initial view
17+
menuView.render();
18+
contentView.render();
19+
20+
// user clicks another menu item
21+
// this triggers action dispatching and eventually causes views to render with new content
22+
menuView.itemClicked(MenuItem.COMPANY);
723
}
824
}

flux/src/main/java/com/iluwatar/Content.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
public enum Content {
44

5-
PRODUCTS, COMPANY;
5+
PRODUCTS("Products - This page lists the company's products."), COMPANY("Company - This page displays information about the company.");
6+
7+
private String title;
68

9+
private Content(String title) {
10+
this.title = title;
11+
}
12+
13+
@Override
14+
public String toString() {
15+
return title;
16+
}
717
}
Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
package com.iluwatar;
22

3-
public class ContentStore implements Store {
3+
public class ContentStore extends Store {
4+
5+
private Content content = Content.PRODUCTS;
46

57
@Override
68
public void onAction(Action action) {
7-
// TODO Auto-generated method stub
8-
9+
if (action.getType().equals(ActionType.CONTENT_CHANGED)) {
10+
ContentAction contentAction = (ContentAction) action;
11+
content = contentAction.getContent();
12+
notifyChange();
13+
}
14+
}
15+
16+
public Content getContent() {
17+
return content;
918
}
10-
1119
}

flux/src/main/java/com/iluwatar/ContentView.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,17 @@
22

33
public class ContentView implements View {
44

5+
private Content content = Content.PRODUCTS;
6+
57
@Override
68
public void storeChanged(Store store) {
7-
// TODO Auto-generated method stub
8-
9+
ContentStore contentStore = (ContentStore) store;
10+
content = contentStore.getContent();
11+
render();
912
}
1013

14+
@Override
15+
public void render() {
16+
System.out.println(content.toString());
17+
}
1118
}

flux/src/main/java/com/iluwatar/Dispatcher.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class Dispatcher {
1212
private Dispatcher() {
1313
}
1414

15-
public Dispatcher getInstance() {
15+
public static Dispatcher getInstance() {
1616
return instance;
1717
}
1818

@@ -21,6 +21,20 @@ public void registerStore(Store store) {
2121
}
2222

2323
public void menuItemSelected(MenuItem menuItem) {
24-
24+
dispatchAction(new MenuAction(menuItem));
25+
switch (menuItem) {
26+
case HOME:
27+
case PRODUCTS:
28+
default:
29+
dispatchAction(new ContentAction(Content.PRODUCTS));
30+
break;
31+
case COMPANY:
32+
dispatchAction(new ContentAction(Content.COMPANY));
33+
break;
34+
}
35+
}
36+
37+
private void dispatchAction(Action action) {
38+
stores.stream().forEach((store) -> store.onAction(action));
2539
}
2640
}

flux/src/main/java/com/iluwatar/MenuItem.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
public enum MenuItem {
44

5-
HOME, PRODUCTS, COMPANY;
5+
HOME("Home"), PRODUCTS("Products"), COMPANY("Company");
6+
7+
private String title;
68

9+
MenuItem(String title) {
10+
this.title = title;
11+
}
12+
13+
@Override
14+
public String toString() {
15+
return title;
16+
}
717
}
Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
package com.iluwatar;
22

3-
public class MenuStore implements Store {
3+
public class MenuStore extends Store {
44

5+
private MenuItem selected = MenuItem.HOME;
6+
57
@Override
68
public void onAction(Action action) {
7-
// TODO Auto-generated method stub
8-
9+
if (action.getType().equals(ActionType.MENU_ITEM_SELECTED)) {
10+
MenuAction menuAction = (MenuAction) action;
11+
selected = menuAction.getMenuItem();
12+
notifyChange();
13+
}
14+
}
15+
16+
public MenuItem getSelected() {
17+
return selected;
918
}
10-
1119
}

flux/src/main/java/com/iluwatar/MenuView.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,27 @@
22

33
public class MenuView implements View {
44

5+
private MenuItem selected = MenuItem.HOME;
6+
57
@Override
68
public void storeChanged(Store store) {
7-
// TODO Auto-generated method stub
8-
9+
MenuStore menuStore = (MenuStore) store;
10+
selected = menuStore.getSelected();
11+
render();
912
}
1013

14+
@Override
15+
public void render() {
16+
for (MenuItem item: MenuItem.values()) {
17+
if (selected.equals(item)) {
18+
System.out.println(String.format("* %s", item.toString()));
19+
} else {
20+
System.out.println(item.toString());
21+
}
22+
}
23+
}
24+
25+
public void itemClicked(MenuItem item) {
26+
Dispatcher.getInstance().menuItemSelected(item);
27+
}
1128
}
Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
package com.iluwatar;
22

3-
public interface Store {
3+
import java.util.LinkedList;
4+
import java.util.List;
45

5-
public void onAction(Action action);
6+
public abstract class Store {
67

8+
private List<View> views = new LinkedList<>();
9+
10+
public abstract void onAction(Action action);
11+
12+
public void registerView(View view) {
13+
views.add(view);
14+
}
15+
16+
protected void notifyChange() {
17+
views.stream().forEach((view) -> view.storeChanged(this));
18+
}
719
}

flux/src/main/java/com/iluwatar/View.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
public interface View {
44

55
public void storeChanged(Store store);
6-
6+
7+
public void render();
78
}

0 commit comments

Comments
 (0)
X Tutup