diff --git a/htroot/FeedReader_p.html b/htroot/FeedReader_p.html
index 2d95a1c27..46e25bfa8 100644
--- a/htroot/FeedReader_p.html
+++ b/htroot/FeedReader_p.html
@@ -20,5 +20,12 @@ please select your feed with ?url=Feedurl&max=5&offset=1 (to be implemented in h
#{/items}#
::
-Error
+
+Error:
+#(error)#
+You need to install libx
+::
+Problem with url
+#(/error)#
+test
#(/page)#
\ No newline at end of file
diff --git a/htroot/FeedReader_p.java b/htroot/FeedReader_p.java
new file mode 100644
index 000000000..577c8f47c
--- /dev/null
+++ b/htroot/FeedReader_p.java
@@ -0,0 +1,143 @@
+//FeedReader_p.java
+//------------
+// part of YACY
+//
+// (C) 2007 Alexander Schier
+//
+// last change: $LastChangedDate: $ by $LastChangedBy: $
+// $LastChangedRevision: $
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Iterator;
+
+import de.anomic.data.rssReaderItem;
+import de.anomic.http.httpHeader;
+import de.anomic.server.serverObjects;
+import de.anomic.server.serverSwitch;
+import de.anomic.server.servletProperties;
+
+public class FeedReader_p {
+
+ Class rssReaderClass;
+ String url;
+ Object reader;
+ public FeedReader_p(String url) throws ClassNotFoundException{
+ this.url=url;
+ //reflection
+ Class[] paramClasses=new Class[1];
+ Object[] params=new Object[1];
+ paramClasses[0]=Class.forName("java.lang.String");
+ rssReaderClass=Class.forName("de.anomic.data.rssReader");
+ params[0]=url.toString();
+ Constructor constructor;
+ try {
+ constructor = rssReaderClass.getConstructor(paramClasses);
+ reader=constructor.newInstance(params);
+ }
+ catch (SecurityException e) {}
+ catch (NoSuchMethodException e) {}
+ catch (IllegalArgumentException e) {}
+ catch (InstantiationException e) {}
+ catch (IllegalAccessException e) {}
+ catch (InvocationTargetException e) {}
+
+ }
+ //this could be in the servlet class(?)
+ public Object ReflectionWrapper(Class theclass, Object theinstance, String method, Class[] class_array, Object[] object_array){
+ try {
+ return theclass.getMethod(method, class_array).invoke(theinstance, object_array);
+ }
+ catch (IllegalArgumentException e) {}
+ catch (SecurityException e) {}
+ catch (IllegalAccessException e) {}
+ catch (InvocationTargetException e) {}
+ catch (NoSuchMethodException e) {}
+ return null;
+ }
+ public String getTitle(){
+ return (String) ReflectionWrapper(rssReaderClass, reader, "getTitle", null, null);
+ }
+ public String getCreator(){
+ return (String) ReflectionWrapper(rssReaderClass, reader, "getCreator", new Class[0], new Object[0]);
+ }
+ public String getDescription(){
+ return (String) ReflectionWrapper(rssReaderClass, reader, "getDescription", new Class[0], new Object[0]);
+ }
+ public Collection getFeedItems(){
+ return (Collection) ReflectionWrapper(rssReaderClass, reader, "getFeedItems", new Class[0], new Object[0]);
+ }
+ public static servletProperties respond(httpHeader header, serverObjects post, serverSwitch env) {
+ servletProperties prop = new servletProperties();
+ prop.put("SUPERTEMPLATE", "/env/page.html");
+
+ URL url;
+ prop.put("page", 0);
+ try {
+ if(post!=null){
+ url = new URL((String) post.get("url"));
+ int maxitems=Integer.parseInt(post.get("max", "0"));
+ int offset=Integer.parseInt(post.get("offset", "0")); //offset to the first displayed item
+ FeedReader_p self;
+ try {
+ self = new FeedReader_p(url.toString());
+ } catch (ClassNotFoundException e) {
+ System.out.println("DEBUG!!!");
+ prop.put("page", 2);
+ prop.put("page_error", 0);
+ return prop;
+ }
+
+ //rssReader reader=new rssReader(url.toString());
+ prop.put("page_title", self.getTitle());
+ if(self.getCreator()!=null){
+ prop.put("page_hasAuthor", 1);
+ prop.put("page_hasAuthor_author", self.getCreator());
+ }else
+ prop.put("page_hasAuthor", 0);
+ prop.put("page_description", self.getDescription());
+
+ Collection feedItems=self.getFeedItems();
+ if(feedItems!=null && !feedItems.isEmpty()){
+ Iterator it=feedItems.iterator();
+ int count=0;
+ while(it.hasNext() && (maxitems==0 || count0)) //first check, if there still is an offset. if yes, skip count++, so the next item will overwrite this item. then decrement offset.
+ count++;
+ }
+ prop.put("page_items", count);
+ }
+ prop.put("page", 1);
+ }
+ } catch (MalformedURLException e) {
+ prop.put("page", 2);
+ prop.put("page_error", 1);
+ }
+
+ // return rewrite properties
+ return prop;
+ }
+}
diff --git a/htroot/FeedReader_p.java.disabled b/htroot/FeedReader_p.java.disabled
deleted file mode 100644
index 7524fb73f..000000000
--- a/htroot/FeedReader_p.java.disabled
+++ /dev/null
@@ -1,92 +0,0 @@
-//FeedReader_p.java
-//------------
-// part of YACY
-//
-// (C) 2007 Alexander Schier
-//
-// last change: $LastChangedDate: $ by $LastChangedBy: $
-// $LastChangedRevision: $
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Iterator;
-
-import de.anomic.http.httpHeader;
-import de.anomic.server.serverObjects;
-import de.anomic.server.serverSwitch;
-import de.anomic.server.servletProperties;
-import de.nava.informa.core.ChannelIF;
-import de.nava.informa.core.ParseException;
-import de.nava.informa.impl.basic.ChannelBuilder;
-import de.nava.informa.impl.basic.Item;
-import de.nava.informa.parsers.FeedParser;
-
-public class FeedReader_p {
-
-
- public static servletProperties respond(httpHeader header, serverObjects post, serverSwitch env) {
- servletProperties prop = new servletProperties();
- prop.put("SUPERTEMPLATE", "/env/page.html");
-
- URL url;
- try {
- if(post!=null){
- url = new URL((String) post.get("url"));
- int maxitems=Integer.parseInt(post.get("max", "0"));
- int offset=Integer.parseInt(post.get("offset", "0")); //offset to the first displayed item
- ChannelBuilder builder=new ChannelBuilder();
- ChannelIF channel=FeedParser.parse(builder, url);
- prop.put("page_title", channel.getTitle());
- if(channel.getCreator()!=null){
- prop.put("page_hasAuthor", 1);
- prop.put("page_hasAuthor_author", channel.getCreator());
- }else
- prop.put("page_hasAuthor", 0);
- prop.put("page_description", channel.getDescription());
-
- Collection feedItems=channel.getItems();
- if(!feedItems.isEmpty()){
- Iterator it=feedItems.iterator();
- int count=0;
- while(it.hasNext() && (maxitems==0 || count0)) //first check, if there still is an offset. if yes, skip count++, so the next item will overwrite this item. then decrement offset.
- count++;
- }
- prop.put("page_items", count);
- }
- prop.put("page", 1);
- }
- } catch (MalformedURLException e) {
- prop.put("page", 2);
- } catch (IOException e) {
- prop.put("page", 2);
- } catch (ParseException e) {
- prop.put("page", 2);
- }
-
- // return rewrite properties
- return prop;
- }
-}
diff --git a/source/de/anomic/data/rssReader.java b/source/de/anomic/data/rssReader.java
new file mode 100644
index 000000000..c2dea3ba1
--- /dev/null
+++ b/source/de/anomic/data/rssReader.java
@@ -0,0 +1,73 @@
+//rssReader.java
+//------------
+// part of YACY
+//
+// (C) 2007 Alexander Schier
+//
+// last change: $LastChangedDate: $ by $LastChangedBy: $
+// $LastChangedRevision: $
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+package de.anomic.data;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.TreeSet;
+
+import de.nava.informa.core.ChannelIF;
+import de.nava.informa.core.ParseException;
+import de.nava.informa.impl.basic.ChannelBuilder;
+import de.nava.informa.parsers.FeedParser;
+
+public class rssReader {
+ URL url;
+ ChannelIF channel;
+ TreeSet feedItems;
+ public rssReader(String url) throws MalformedURLException{
+ this.url=new URL(url);
+ ChannelBuilder builder=new ChannelBuilder();
+ try {
+ channel=FeedParser.parse(builder, url);
+ Collection oldfeedItems=channel.getItems();
+ feedItems=new TreeSet(new rssReaderItemComparator());
+ Iterator it=oldfeedItems.iterator();
+ int count=0;
+ while(it.hasNext()){
+ de.nava.informa.impl.basic.Item item=(de.nava.informa.impl.basic.Item) it.next();
+ rssReaderItem newItem=new rssReaderItem(count++, item.getLink(), item.getTitle(), item.getDescription(), item.getDate(), item.getCreator());
+ feedItems.add(newItem);
+ }
+ }
+ catch (IOException e) {}
+ catch (ParseException e) {}
+ }
+ public String getCreator(){
+ return (channel!=null)? channel.getCreator(): null;
+ }
+ public String getTitle(){
+ return (channel!=null)? channel.getTitle(): null;
+ }
+ public String getDescription(){
+ return (channel!=null)? channel.getDescription(): null;
+ }
+ public Collection getFeedItems(){
+ return feedItems;
+ }
+
+}
diff --git a/source/de/anomic/data/rssReaderItem.java b/source/de/anomic/data/rssReaderItem.java
new file mode 100644
index 000000000..e22c57228
--- /dev/null
+++ b/source/de/anomic/data/rssReaderItem.java
@@ -0,0 +1,62 @@
+//rssReaderItem.java
+//------------
+// part of YACY
+//
+// (C) 2007 Alexander Schier
+//
+// last change: $LastChangedDate: $ by $LastChangedBy: $
+// $LastChangedRevision: $
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+package de.anomic.data;
+
+import java.net.URL;
+import java.util.Date;
+
+
+public class rssReaderItem{
+ String creator, title, description;
+ Date date;
+ URL link;
+ int num;
+ public rssReaderItem(int num, URL link, String title, String description, Date date, String creator){
+ this.link=link;
+ this.title=title;
+ this.description=description;
+ this.date=date;
+ this.creator=creator;
+ this.num=num;
+ }
+ public URL getLink(){
+ return link;
+ }
+ public String getTitle(){
+ return (title!=null)? title: "";
+ }
+ public String getDescription(){
+ return (description!=null)? description: "";
+ }
+ public Date getDate(){
+ return (date!=null)? date: new Date();
+ }
+ public String getCreator(){
+ return (creator!=null)? creator: "";
+ }
+ public int getNum(){
+ return num;
+ }
+
+}
\ No newline at end of file
diff --git a/source/de/anomic/data/rssReaderItemComparator.java b/source/de/anomic/data/rssReaderItemComparator.java
new file mode 100644
index 000000000..e52cf02b3
--- /dev/null
+++ b/source/de/anomic/data/rssReaderItemComparator.java
@@ -0,0 +1,36 @@
+//rssReaderItemComparator.java
+//------------
+// part of YACY
+//
+// (C) 2007 Alexander Schier
+//
+// last change: $LastChangedDate: $ by $LastChangedBy: $
+// $LastChangedRevision: $
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+package de.anomic.data;
+
+import java.util.Comparator;
+
+public class rssReaderItemComparator implements Comparator{
+ public int compare(Object o1, Object o2){
+ int num1=((rssReaderItem)o1).getNum();
+ int num2=((rssReaderItem)o2).getNum();
+ return num2-num1;
+ }
+ public boolean equals(Object o1, Object o2){
+ return compare(o1, o2)==0;
+ }
+}
\ No newline at end of file