Added Feed groups and fixed resource loading
This commit is contained in:
parent
7822800b26
commit
d9ccacef4f
5 changed files with 113 additions and 20 deletions
2
pom.xml
2
pom.xml
|
@ -28,7 +28,7 @@
|
|||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>resources/icons</directory>
|
||||
<directory>src/main/resources/icons</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
58
src/main/java/eu/toldi/rss/FeedGroup.java
Normal file
58
src/main/java/eu/toldi/rss/FeedGroup.java
Normal 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;
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
|
|
Reference in a new issue