From 217d64e44ed9932e1fec4117cdd7a4922ad1c2f1 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 19 Nov 2017 14:44:40 +0100 Subject: [PATCH] Article fetch [ok] --- Classes/Category.java | 22 +++++++++++- Classes/TagType.java | 17 --------- controller/Article.java | 74 ++++++++++++++++++++++---------------- controller/HeaderMenu.java | 2 +- controller/RootLayout.java | 34 ++++++++++++------ model/NewsListModel.java | 4 ++- model/NewsModel.java | 14 ++++++++ 7 files changed, 105 insertions(+), 62 deletions(-) delete mode 100644 Classes/TagType.java diff --git a/Classes/Category.java b/Classes/Category.java index d5a2cf8..f910b19 100644 --- a/Classes/Category.java +++ b/Classes/Category.java @@ -1,5 +1,25 @@ package Classes; public enum Category { - business, entertainment, gaming, general, healthAndMedical, music, politics, scienceAndNature, sport, technology, all +// business, entertainment, gaming, general, healthAndMedical, music, politics, scienceAndNature, sport, technology, all + + all("all", "black"), + business("business", "red"), + entertainment("entertainment", "skyblue"), + gaming("gaming", "green"), + health("health", "yellow"), + music("music", "purple"), + sport("sport", "brown"), + science("science", "#f14405"), + nature("nature", "#16c668"), + economics("economics", "#d1991b"), + politics("politics", "#6825f4"), + technology("technology", "#1e7ebe"); + + protected String color; + protected String label; + Category(String label, String color){ this.label = label; this.color = color; } + + public String getLabel(){ return this.label; } + public String getColor(){ return this.color; } } diff --git a/Classes/TagType.java b/Classes/TagType.java deleted file mode 100644 index 7f7a9d8..0000000 --- a/Classes/TagType.java +++ /dev/null @@ -1,17 +0,0 @@ -package Classes; - -public enum TagType { - science("science", "#f14405"), - nature("nature", "#16c668"), - economics("economics", "#d1991b"), - politics("politics", "#6825f4"), - technology("technology", "#1e7ebe"); - - protected String color; - protected String label; - TagType(String label, String color){ this.label = label; this.color = color; } - - public String getLabel(){ return this.label; } - public String getColor(){ return this.color; } - -} \ No newline at end of file diff --git a/controller/Article.java b/controller/Article.java index 41d7f09..45fcb57 100644 --- a/controller/Article.java +++ b/controller/Article.java @@ -4,21 +4,17 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Date; -import Classes.TagType; +import Classes.Category; import Interfaces.EventObserver; -import javafx.event.EventHandler; +import javafx.application.Platform; import javafx.fxml.FXMLLoader; -import javafx.geometry.Insets; -import javafx.scene.input.MouseEvent; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.Background; -import javafx.scene.layout.BackgroundFill; -import javafx.scene.layout.CornerRadii; import javafx.scene.layout.FlowPane; import javafx.scene.layout.HBox; -import javafx.scene.layout.Pane; -import javafx.scene.paint.Paint; import javafx.scene.text.Text; +import model.NewsModel; public class Article{ @@ -35,7 +31,7 @@ public class Article{ this.observer = observer; } - public void addItem(String p_title, String p_content, Date p_publ, ArrayList p_tags) throws IOException { + public void addItem(NewsModel model) throws IOException { /* (1) Load the article_disp.fxml */ FXMLLoader loader = new FXMLLoader(); @@ -45,35 +41,42 @@ public class Article{ AnchorPane item = (AnchorPane) loader.load(); /* (3) Set content */ - this.gsetContent( p_content, item ); + this.gsetContent( model.getDescription(), item ); /* (4) Set date */ - this.gsetDate( p_publ.toString(), item ); + this.gsetDate( model.getDate(), item ); /* (5) Set title */ HBox headerContainer = (HBox) item.getChildren().get(3); - this.gsetTitle( p_title, headerContainer ); + this.gsetTitle( model.getTitle(), headerContainer ); /* (6) Set tags */ - this.gsetTags( p_tags, headerContainer ); + this.gsetTags( model.getTags(), headerContainer ); - /* (7) Bind event */ - item.setOnMousePressed(new EventHandler() { - @Override - public void handle(MouseEvent event) { - Article.this.observer.handleEvent(new Classes.Event(item.getId(),"changeMainLayout")); - } - }); + /* (7) Set image */ + this.gsetImage( model.getImageURL(), item ); - /* (8) Add to the controller local */ + /* (8) Bind event */ +// item.setOnMousePressed(new EventHandler() { +// @Override +// public void handle(MouseEvent event) { +// Article.this.observer.handleEvent(new Classes.Event(item.getId(),"changeMainLayout")); +// } +// }); + + /* (9) Add to the controller local */ this.items.add(item); - /* (9) On bind au width du parent */ + /* (10) On bind au width du parent */ item.prefWidthProperty().bind(this.parent.widthProperty()); item.maxWidthProperty().bind(this.parent.widthProperty()); - /* (10) Add to parent (graphics) */ - this.parent.getChildren().add(item); + /* (11) Add to parent (graphics) */ + Platform.runLater(new Runnable(){ + public void run(){ + Article.this.parent.getChildren().add(item); + } + }); } @@ -87,12 +90,12 @@ public class Article{ } - public void gsetDate(String p_date, AnchorPane p_parent){ + public void gsetDate(Date p_date, AnchorPane p_parent){ /* (1) Get node */ Text g_date = (Text) p_parent.getChildren().get(2); /* (2) Update content */ - g_date.setText(p_date); + g_date.setText(p_date.toString()); } @@ -104,20 +107,29 @@ public class Article{ /* (2) Update title */ g_title.setText(p_title); } + + + public void gsetImage(String p_uri, AnchorPane p_parent){ + /* (1) Get node */ + ImageView g_image = (ImageView) p_parent.getChildren().get(0); + + /* (2) Update title */ + g_image.setImage(new Image(p_uri)); + } - public void gsetTags(ArrayList p_tags, HBox p_parent) throws IOException{ + public void gsetTags(ArrayList p_tags, HBox p_parent) throws IOException{ /* (1) For each tag -> load a new one */ - for( TagType tag : p_tags ){ + for( Category tag : p_tags ){ /* (1.1) Create the container */ FXMLLoader loader = new FXMLLoader(); loader.setLocation(getClass().getResource("/fxml/article_tag_disp.fxml")); /* (1.2) Load the tag elements */ - Pane g_tag = (Pane) loader.load(); - Text g_tagText = (Text) g_tag.getChildren().get(0); + FlowPane g_tag = (FlowPane) loader.load(); + Text g_tagText = (Text) g_tag.getChildren().get(0); /* (1.3) Update the tag name */ g_tagText.setText(tag.getLabel()); diff --git a/controller/HeaderMenu.java b/controller/HeaderMenu.java index 1565e01..2a2cc75 100644 --- a/controller/HeaderMenu.java +++ b/controller/HeaderMenu.java @@ -35,7 +35,7 @@ public class HeaderMenu{ menuItem.setOnMousePressed(new EventHandler() { @Override public void handle(MouseEvent event) { - HeaderMenu.this.observer.handleEvent(new Classes.Event(menuItem.getId(),"changeMainLayout")); + HeaderMenu.this.observer.handleEvent(new Classes.Event(menuItem.getId(), "changeMainLayout")); } }); diff --git a/controller/RootLayout.java b/controller/RootLayout.java index 2efc8e2..673734b 100644 --- a/controller/RootLayout.java +++ b/controller/RootLayout.java @@ -2,11 +2,9 @@ package controller; import java.io.IOException; import java.util.ArrayList; -import java.util.Date; import Classes.Category; import Classes.SortTypes; -import Classes.TagType; import Classes.css.user.ContextBuilder; import Classes.css.user.HeaderIconStyleSheet; import Classes.css.user.HeaderStyleSheet; @@ -21,6 +19,7 @@ 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 { @@ -28,7 +27,7 @@ public class RootLayout extends Application implements EventObserver { private Scene root_scene; private AnchorPane root_layout; private FlowPane main_container; - + private Article articles; @Override @@ -61,12 +60,7 @@ public class RootLayout extends Application implements EventObserver { /* (2) Create container */ - Article artCtl = new Article(this.main_container, this); - ArrayList tags = new ArrayList(); - tags.add(TagType.science); tags.add(TagType.economics); - - artCtl.addItem("Article 1", "blabla bloblo blibli", new Date(12), tags); - + this.articles = new Article(this.main_container, this); /* (2) CSS @@ -141,16 +135,34 @@ public class RootLayout extends Application implements EventObserver { call.send();*/ switch(e.getEventType()){ + case "changeMainLayout": this.handleMainLayoutChange(e.getObjectId()); break; + case "NewsQuerySuccess": System.out.println(NewsListModel.getInstance().getNews().size()+" News ont été trouvé"); - if(NewsListModel.getInstance().getNews().size() != 0) { - System.out.println("La description du premier article est: "+NewsListModel.getInstance().getNews().get(0).getDescription()); + + // For each news + for( NewsModel news : NewsListModel.getInstance().getNews() ){ + + try{ + + this.articles.addItem( news ); + + }catch(Exception e1){ + + System.out.println("Cannot fetch article data"); + e1.printStackTrace(); + + } + } + if( NewsListModel.getInstance().getNews().size() != 0 ) + System.out.println("La description du premier article est: "+NewsListModel.getInstance().getNews().get(0).getDescription()); break; + case "NewsQueryFailed": System.out.println("une erreur est survenue"); break; diff --git a/model/NewsListModel.java b/model/NewsListModel.java index 8fccc2e..5e3aa39 100644 --- a/model/NewsListModel.java +++ b/model/NewsListModel.java @@ -149,12 +149,14 @@ public class NewsListModel implements Observable{ for(int i = 0;i tags; private Date date; + public NewsModel(){ + this.tags = new ArrayList(); + } + public NewsModel addTag(Category tag) { + this.tags.add(tag); + return this; + } public String getAuthor() { return author; @@ -40,6 +51,9 @@ public class NewsModel { public String getNewsURL() { return newsURL; } + public ArrayList getTags() { + return tags; + } public NewsModel setNewsURL(String newsURL) { this.newsURL = newsURL; return this;