Added Feed groups and fixed resource loading

This commit is contained in:
Balazs Toldi 2020-11-25 21:03:31 +01:00
parent 7822800b26
commit d9ccacef4f
5 changed files with 113 additions and 20 deletions

View file

@ -28,7 +28,7 @@
<build>
<resources>
<resource>
<directory>resources/icons</directory>
<directory>src/main/resources/icons</directory>
</resource>
</resources>
<plugins>

View file

@ -23,21 +23,26 @@ public class Feed {
private URL link;
private String name;
@XStreamAlias("articleList")
private List<Article> articleList = new ArrayList<>();
private List<Article> articleList = null;
public String getName() {
return name;
}
public Feed(String url) {
public Feed(URL url) {
articleList = new ArrayList<>();
try {
link = new URL(url);
link = url;
updateFeed();
} catch (IOException e) {
e.printStackTrace();
}
}
public Feed(String name) {
this.name = name;
}
public int getArticleCount() {
return articleList.size();
}
@ -71,6 +76,10 @@ public class Feed {
return name;
}
public void setName(String name) {
this.name = name;
}
public void addArticle(Article a){
articleList.add(a);
}
@ -79,4 +88,7 @@ public class Feed {
return new DefaultMutableTreeNode(this);
}
public String getLink() {
return link.toString();
}
}

View file

@ -1,5 +1,6 @@
package eu.toldi.rss;
import javax.naming.ldap.SortKey;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
@ -8,8 +9,9 @@ import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.*;
import java.lang.Class;
import java.lang.ClassLoader;
import java.net.MalformedURLException;
import java.net.URL;
public class FeedFrame extends JFrame {
@ -19,8 +21,10 @@ public class FeedFrame extends JFrame {
private FeedData data;
private JMenuBar menubar;
private JTree feeds;
private TableRowSorter<FeedData> sorter;
public FeedFrame() {
setTitle("RSS Feed reader");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setMinimumSize(new Dimension(900, 600));
@ -30,7 +34,19 @@ public class FeedFrame extends JFrame {
private void initData() {
FeedLoader loader = new FeedLoader();
data = loader.loadFeedData("feeds.xml");
//data = loader.loadFeedData("feeds.xml");
data = new FeedData();
FeedGroup group = new FeedGroup("Magyar hírek");
try {
group.addFeed(new Feed(new URL("https://24.hu/feed")));
group.addFeed(new Feed(new URL("https://444.hu/feed")));
group.addFeed(new Feed(new URL("https://hvg.hu/rss")));
data.addFeed(new Feed(new URL("https://www.theguardian.com/uk/rss")));
} catch (MalformedURLException e) {
e.printStackTrace();
}
data.addFeed(group);
}
private void initTable(){
@ -47,7 +63,9 @@ public class FeedFrame extends JFrame {
}
}
});
table.setRowSorter(new TableRowSorter<FeedData>(data));
sorter = new TableRowSorter<FeedData>(data);
table.setRowSorter(sorter);
add(scrollPane, BorderLayout.CENTER);
}
@ -56,7 +74,7 @@ public class FeedFrame extends JFrame {
menubar = new JMenuBar();
JMenu menu1 = new JMenu("File");
JMenuItem addFeed = new JMenuItem("Add Feed");
addFeed.addActionListener(new AddFeed(table));
addFeed.addActionListener(new AddFeed());
menu1.add(addFeed);
JMenuItem save = new JMenuItem("Save Feeds");
@ -70,12 +88,13 @@ public class FeedFrame extends JFrame {
DefaultMutableTreeNode root = data.getRootNode();
feeds = new JTree(root);
feeds.addMouseListener(new SwitchFeed());
feeds.setEditable(true);
add(feeds,BorderLayout.WEST);
}
private void initComponents() {
this.setLayout(new BorderLayout());
ImageIcon icon = new ImageIcon(this.getClass().getResource("/icons/icon.png"));
ImageIcon icon = new ImageIcon(this.getClass().getResource("/icon.png"));
this.setIconImage(icon.getImage());
initTable();
initMenuBar();
@ -83,11 +102,6 @@ public class FeedFrame extends JFrame {
}
private class AddFeed implements ActionListener {
JTable jTable;
public AddFeed(JTable t){
jTable = t;
}
@Override
public void actionPerformed(ActionEvent e) {
@ -98,9 +112,14 @@ public class FeedFrame extends JFrame {
int result = JOptionPane.showConfirmDialog(null, panel, "Add feed",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if (result == JOptionPane.OK_OPTION) {
Feed f = new Feed(feedURL.getText());
Feed f = null;
try {
f = new Feed(new URL(feedURL.getText()));
} catch (MalformedURLException malformedURLException) {
malformedURLException.printStackTrace();
}
data.addFeed(f);
jTable.updateUI();
table.updateUI();
} else {
System.out.println("Cancelled");
}
@ -115,8 +134,8 @@ public class FeedFrame extends JFrame {
loader.saveFeedData();
}
}
private class SwitchFeed extends MouseAdapter {
private class SwitchFeed extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
@ -127,9 +146,11 @@ public class FeedFrame extends JFrame {
if(selRow == 0) data.limitTo(null);
else {
data.limitTo((Feed) ((DefaultMutableTreeNode) selPath.getLastPathComponent()).getUserObject());
}
sorter.setModel(data);
table.setRowSorter(sorter);
table.updateUI();
}
}
}

View file

@ -0,0 +1,58 @@
package eu.toldi.rss;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamOmitField;
import javax.swing.tree.DefaultMutableTreeNode;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@XStreamAlias("feedGroup")
public class FeedGroup extends Feed {
List<Feed> feedList = new ArrayList<Feed>();
@XStreamOmitField
List<Article> articleList = new ArrayList<Article>();
public FeedGroup(String name){
super(name);
}
public void addFeed(Feed feed){
feedList.add(feed);
for (int i = 0; i < feed.getArticleCount(); i++) {
articleList.add(feed.get(i));
}
}
@Override
public Article get(int i) {
return articleList.get(i);
}
@Override
public void updateFeed() throws IOException {
for (Feed f:feedList) {
f.updateFeed();
}
}
@Override
public int getArticleCount() {
int result = 0;
for (Feed f:feedList) {
result += f.getArticleCount();
}
return result;
}
@Override
public DefaultMutableTreeNode getTreeNode() {
DefaultMutableTreeNode folder = super.getTreeNode();
for (Feed f: feedList) {
folder.add(f.getTreeNode());
}
return folder;
}
}

View file

@ -13,6 +13,7 @@ import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@ -54,7 +55,7 @@ public class FeedLoader {
}
if(url == null) continue;
}
Feed feed = new Feed(url);
Feed feed = new Feed(new URL(url));
System.out.println(articleList.size());
for (int k = 0; k < articleList.size(); k++) {
System.out.println();
@ -77,6 +78,7 @@ public class FeedLoader {
XStream xStream = new XStream();
xStream.processAnnotations(Article.class);
xStream.processAnnotations(Feed.class);
xStream.processAnnotations(FeedGroup.class);
xStream.omitField(FeedData.class,"articleList");
xStream.omitField(javax.swing.event.EventListenerList.class,"listenerList");
String xml = xStream.toXML(data.getFeeds());