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 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 observed event received * ---------------------------------------------------------*/ @Override public void handleEvent(Event e) { /* HashMap headers = new HashMap(); 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.business); NewsListModel.getInstance().setSortType(SortTypes.publishedAt); NewsListModel.getInstance().query("bitcoin"); } }