200 lines
4.9 KiB
Java
200 lines
4.9 KiB
Java
package controller;
|
|
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
|
|
import Classes.Category;
|
|
import Classes.SortTypes;
|
|
import Classes.css.user.ContextBuilder;
|
|
import Classes.css.user.HeaderIconStyleSheet;
|
|
import Classes.css.user.HeaderStyleSheet;
|
|
import Classes.css.user.MenuStyleSheet;
|
|
import Classes.css.user.SubMenuStyleSheet;
|
|
import Interfaces.Event;
|
|
import Interfaces.EventObserver;
|
|
import javafx.application.Application;
|
|
import javafx.fxml.FXMLLoader;
|
|
import javafx.scene.Scene;
|
|
import javafx.scene.layout.AnchorPane;
|
|
import javafx.scene.layout.FlowPane;
|
|
import javafx.stage.Stage;
|
|
import model.NewsListModel;
|
|
import model.NewsModel;
|
|
|
|
public class RootLayout extends Application implements EventObserver {
|
|
|
|
public static void main(String[] args){ launch(args); }
|
|
|
|
|
|
|
|
/* (1) Attributes
|
|
---------------------------------------------------------*/
|
|
/* (1) Root elements */
|
|
private Stage root_stage;
|
|
private Scene root_scene;
|
|
private AnchorPane root_layout;
|
|
|
|
/* (2) Local elements */
|
|
private FlowPane main_container;
|
|
private Article articles;
|
|
|
|
|
|
|
|
/* (2) Builds the stage, scene, ...
|
|
*
|
|
* @primary_stage<Stage> The primary stage to create in
|
|
*
|
|
---------------------------------------------------------*/
|
|
@Override
|
|
public void start(Stage primary_stage) throws Exception {
|
|
|
|
/* (1) Init. stage, scene and context
|
|
---------------------------------------------------------*/
|
|
/* (1) store primary stage + title it */
|
|
this.root_stage = primary_stage;
|
|
this.root_stage.setTitle("Inifiny Mail Client");
|
|
|
|
/* (2) Load the root layout*/
|
|
this.loadRootLayout();
|
|
|
|
/* (3) Load the CSS CONTEXT */
|
|
ContextBuilder.createContext();
|
|
|
|
/* (3) Store container */
|
|
this.main_container = (FlowPane) this.root_scene.lookup("#container");
|
|
|
|
|
|
/* (2) Manage static stylesheet
|
|
---------------------------------------------------------*/
|
|
/* (1) #header */
|
|
new HeaderStyleSheet( this.root_scene.lookup("#header") );
|
|
|
|
/* (2) #menu_container */
|
|
new MenuStyleSheet( this.root_scene.lookup("#menu") );
|
|
|
|
/* (3) #submenu */
|
|
new SubMenuStyleSheet( this.root_scene.lookup("#submenu") );
|
|
|
|
/* (4) #header_icon*/
|
|
new HeaderIconStyleSheet( this.root_scene.lookup("#header_icon") );
|
|
|
|
|
|
|
|
/* (3) Manage controllers
|
|
---------------------------------------------------------*/
|
|
/* (1) Create HeaderMenu */
|
|
HeaderMenu hm = new HeaderMenu((FlowPane) this.root_scene.lookup("#header_menu"),this);
|
|
|
|
hm.addItem("notification", "/src/header-notif.png");
|
|
hm.addItem("mail", "/src/header-mail.png");
|
|
hm.addItem("search", "/src/header-search.png");
|
|
hm.addItem("menu", "/src/header-menu.png");
|
|
|
|
/* (2) Init. articles controller */
|
|
this.articles = new Article(this.main_container, this);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/* (3) Loads the root layout and init. the scene-stage-pane
|
|
*
|
|
*
|
|
---------------------------------------------------------*/
|
|
public void loadRootLayout(){
|
|
|
|
try{
|
|
|
|
/* (1) Load the root_disp.fxml */
|
|
FXMLLoader loader = new FXMLLoader();
|
|
|
|
loader.setLocation(getClass().getResource("/fxml/model.fxml"));
|
|
|
|
/* (2) Load the layout into the scene */
|
|
this.root_layout = (AnchorPane) loader.load();
|
|
this.root_scene = new Scene(this.root_layout);
|
|
|
|
/* (3) Add the scene to the stage */
|
|
this.root_stage.setScene(this.root_scene);
|
|
|
|
/* (4) Show the stage */
|
|
this.root_stage.show();
|
|
|
|
}catch(IOException e){
|
|
e.printStackTrace();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* (4) Event dispatcher
|
|
*
|
|
* @e<Event> observed event received
|
|
*
|
|
---------------------------------------------------------*/
|
|
@Override
|
|
public void handleEvent(Event e) {
|
|
/*
|
|
HashMap<String,String> headers = new HashMap<String,String>();
|
|
headers.put("Referer", "http://www.wordreference.com");
|
|
|
|
ApiCall call = new ApiCall("http://api.wordreference.com/1/json/enfr/grin","GET",new Callback() {
|
|
|
|
@Override
|
|
public void onSuccess(JSONObject response) {
|
|
System.out.println(response.toString());
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onError() {
|
|
System.out.println("APICall error");
|
|
|
|
}
|
|
|
|
});
|
|
call.addHeaders(headers);
|
|
call.send();*/
|
|
|
|
switch( e.getEventType() ){
|
|
|
|
/* (1) On HeaderMenu.item.click -> search sources */
|
|
case "changeMainLayout":
|
|
this.handleMainLayoutChange(e.getObjectId());
|
|
break;
|
|
|
|
/* (2) articles.query.success -> display articles */
|
|
case "NewsQuerySuccess":
|
|
|
|
for( NewsModel news : NewsListModel.getInstance().getNews() ){
|
|
|
|
try{
|
|
this.articles.addItem( news );
|
|
}catch(Exception e1){
|
|
System.out.println("Cannot fetch article data");
|
|
}
|
|
|
|
}
|
|
break;
|
|
|
|
/* (3) articles.query.error -> display error ('no result') */
|
|
case "NewsQueryFailed":
|
|
System.out.println("une erreur est survenue");
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
public void handleMainLayoutChange(String layout) {
|
|
|
|
NewsListModel.getInstance().addObserver("MainClass", this);
|
|
NewsListModel.getInstance().setCategory(Category.science);
|
|
NewsListModel.getInstance().setSortType(SortTypes.publishedAt);
|
|
NewsListModel.getInstance().query("bitcoin");
|
|
|
|
}
|
|
}
|