forked from nus-cs2103-AY1819S1/addressbook-level4
-
Notifications
You must be signed in to change notification settings - Fork 5
/
BrowserPanel.java
169 lines (141 loc) · 5.48 KB
/
BrowserPanel.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
package seedu.address.ui;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.logging.Logger;
import com.google.common.eventbus.Subscribe;
import javafx.application.Platform;
import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.scene.layout.Region;
import javafx.scene.web.WebView;
import seedu.address.MainApp;
import seedu.address.commons.core.LogsCenter;
import seedu.address.commons.events.ui.CalendarNotFoundEvent;
import seedu.address.commons.events.ui.EmailNotFoundEvent;
import seedu.address.commons.events.ui.EmailViewEvent;
import seedu.address.commons.events.ui.ListEmailsEvent;
import seedu.address.commons.events.ui.PersonPanelSelectionChangedEvent;
import seedu.address.commons.events.ui.ProfileViewEvent;
import seedu.address.model.EmailModel;
import seedu.address.model.person.Person;
/**
* The Browser Panel of the App.
*/
public class BrowserPanel extends UiPart<Region> {
public static final String DEFAULT_PAGE = "default.html";
public static final String PROFILE_PAGE = "/ProfileWindow.html";
public static final String SEARCH_PAGE_URL =
"https://se-edu.github.io/addressbook-level4/DummySearchPage.html?name=";
private static final String FXML = "BrowserPanel.fxml";
private final Logger logger = LogsCenter.getLogger(getClass());
@FXML
private WebView browser;
public BrowserPanel() {
super(FXML);
// To prevent triggering events for typing inside the loaded Web page.
getRoot().setOnKeyPressed(Event::consume);
loadDefaultPage();
registerAsAnEventHandler(this);
}
private void loadPersonPage(Person person) {
loadPage(SEARCH_PAGE_URL + person.getName().fullName);
}
public void loadPage(String url) {
Platform.runLater(() -> browser.getEngine().load(url));
}
/**
* Loads a default HTML file with a background that matches the general theme.
*/
private void loadDefaultPage() {
URL defaultPage = MainApp.class.getResource(FXML_FILE_FOLDER + DEFAULT_PAGE);
loadPage(defaultPage.toExternalForm());
}
//@@author EatOrBeEaten
/**
* Loads HTML text preview of email.
*
* @param emailModel The emailModel containing the saved email.
*/
private void loadEmail(EmailModel emailModel) {
Platform.runLater(() -> browser.getEngine().loadContent(emailModel.getPreview()));
}
//@@author
/**
* Frees resources allocated to the browser.
*/
public void freeResources() {
browser = null;
}
@Subscribe
private void handlePersonPanelSelectionChangedEvent(PersonPanelSelectionChangedEvent event) {
logger.info(LogsCenter.getEventHandlingLogMessage(event));
//loadPersonPage(event.getNewSelection());
loadProfile(event.getNewSelection());
}
//@@author EatOrBeEaten
@Subscribe
private void handleEmailViewEvent(EmailViewEvent event) {
logger.info(LogsCenter.getEventHandlingLogMessage(event));
loadEmail(event.getEmailModel());
}
@Subscribe
private void handleEmailNotFoundEvent(EmailNotFoundEvent event) {
logger.info(LogsCenter.getEventHandlingLogMessage(event));
Platform.runLater(() -> browser.getEngine().loadContent(event.toString()));
}
@Subscribe
private void handleListEmailsEvent(ListEmailsEvent event) {
logger.info(LogsCenter.getEventHandlingLogMessage(event));
Platform.runLater(() -> browser.getEngine().loadContent(event.toString()));
}
//@@author javenseow
@Subscribe
private void handleProfileViewEvent(ProfileViewEvent event) {
logger.info(LogsCenter.getEventHandlingLogMessage(event));
loadProfile(event.getPersonSelected());
}
//@@author GilgameshTC
@Subscribe
private void handleCalendarNotFoundEvent(CalendarNotFoundEvent event) {
logger.info(LogsCenter.getEventHandlingLogMessage(event));
Platform.runLater(() -> browser.getEngine().loadContent(event.toString()));
}
//@@author javenseow
/**
* Loads HTML page of profile.
*
* @param person The person that the profile will show.
*/
public void loadProfile(Person person) {
String profileView = loadProfileHtml(person);
Platform.runLater(() -> browser.getEngine().loadContent(profileView));
}
/**
* Loads the HTML code of profile view.
*
* @param person The person that the code will be for.
*/
private String loadProfileHtml(Person person) {
String htmlString = "";
String tempString;
try {
InputStream profilePage = getClass().getResourceAsStream(PROFILE_PAGE);
BufferedReader reader = new BufferedReader(new InputStreamReader(profilePage));
while ((tempString = reader.readLine()) != null) {
htmlString += tempString;
}
} catch (IOException e) {
e.printStackTrace();
}
htmlString = htmlString.replace("$name", person.getName().fullName);
htmlString = htmlString.replace("$cca", person.getTags().toString());
htmlString = htmlString.replace("$room", person.getRoom().value);
htmlString = htmlString.replace("$number", person.getPhone().value);
htmlString = htmlString.replace("$school", person.getSchool().value);
htmlString = htmlString.replace("$email", person.getEmail().value);
return htmlString;
}
}