diff --git a/htroot/xml/feed.java b/htroot/xml/feed.java
new file mode 100755
index 000000000..fb00ae2c2
--- /dev/null
+++ b/htroot/xml/feed.java
@@ -0,0 +1,83 @@
+// feed.java
+// (C) 2008 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany
+// first published 25.04.2008 on http://yacy.net
+//
+// This is a part of YaCy, a peer-to-peer based web search engine
+//
+// $LastChangedDate: 2006-04-02 22:40:07 +0200 (So, 02 Apr 2006) $
+// $LastChangedRevision: 1986 $
+// $LastChangedBy: orbiter $
+//
+// LICENSE
+//
+// 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 xml;
+
+import de.anomic.http.httpHeader;
+import de.anomic.server.serverObjects;
+import de.anomic.server.serverSwitch;
+import de.anomic.xml.RSSFeed;
+import de.anomic.xml.RSSMessage;
+
+public class feed {
+
+ public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch> env) {
+ //plasmaSwitchboard sb = (plasmaSwitchboard) env;
+
+ // insert default values
+ serverObjects prop = new serverObjects();
+ prop.put("channel_title", "");
+ prop.put("channel_description", "");
+ prop.put("channel_pubDate", "");
+ prop.put("item", "0");
+
+ if ((post == null) || (env == null)) return prop;
+ //boolean authorized = sb.adminAuthenticated(header) >= 2;
+
+ String channelName = post.get("channel");
+ if (channelName == null) return prop;
+
+ RSSFeed feed = RSSFeed.channels(channelName);
+ if ((feed == null) || (feed.size() == 0)) return prop;
+ int count = post.getInt("count", 10);
+
+ RSSMessage message = feed.getChannel();
+ if (message != null) {
+ prop.put("channel_title", message.getTitle());
+ prop.put("channel_description", message.getDescription());
+ prop.put("channel_pubDate", message.getPubDate());
+ }
+ int c = 0;
+ while ((count > 0) && (feed.size() > 0)) {
+ message = feed.pollMessage();
+ if (message == null) continue;
+
+ // create RSS entry
+ prop.putHTML("item_" + c + "_title", message.getTitle());
+ prop.putHTML("item_" + c + "_description", message.getDescription());
+ prop.putHTML("item_" + c + "_link", message.getLink());
+ prop.put("item_" + c + "_pubDate", message.getPubDate());
+ prop.put("item_" + c + "_guid", message.getGuid());
+ c++;
+ count--;
+ }
+ prop.put("item", c);
+
+ // return rewrite properties
+ return prop;
+ }
+
+}
diff --git a/htroot/xml/feed.rss b/htroot/xml/feed.rss
new file mode 100755
index 000000000..240028d12
--- /dev/null
+++ b/htroot/xml/feed.rss
@@ -0,0 +1,21 @@
+
+
+
+
+
+#[channel_title]#
+#[channel_description]#
+#[channel_pubDate]#
+
+
+#{item}#
+-
+#[title]#
+#[link]#
+#[description]#
+#[pubDate]#
+#[guid]#
+
+#{/item}#
+
+
diff --git a/source/de/anomic/plasma/plasmaCondenser.java b/source/de/anomic/plasma/plasmaCondenser.java
index 9c9a86b79..b1c71981b 100644
--- a/source/de/anomic/plasma/plasmaCondenser.java
+++ b/source/de/anomic/plasma/plasmaCondenser.java
@@ -611,7 +611,7 @@ public final class plasmaCondenser {
}
- private static StringBuffer trim(StringBuffer sb) {
+ static StringBuffer trim(StringBuffer sb) {
while ((sb.length() > 0) && (sb.charAt(0) <= ' ')) sb = sb.deleteCharAt(0);
while ((sb.length() > 0) && (sb.charAt(sb.length() - 1) <= ' ')) sb = sb.deleteCharAt(sb.length() - 1);
return sb;
diff --git a/source/de/anomic/xml/RSSFeed.java b/source/de/anomic/xml/RSSFeed.java
index 4b6fa90d2..a2728a350 100644
--- a/source/de/anomic/xml/RSSFeed.java
+++ b/source/de/anomic/xml/RSSFeed.java
@@ -35,8 +35,8 @@ public class RSSFeed implements Iterable {
// class variables
private RSSMessage channel;
private String imageURL;
- private ConcurrentLinkedQueue messageQueue; // a list of GUIDs, so the items can be retrieved by a specific order
- private ConcurrentHashMap messages; // a guid:Item map
+ ConcurrentLinkedQueue messageQueue; // a list of GUIDs, so the items can be retrieved by a specific order
+ ConcurrentHashMap messages; // a guid:Item map
private int maxsize;
public RSSFeed() {
@@ -136,6 +136,7 @@ public class RSSFeed implements Iterable {
RSSFeed feed = channels.get(channelName);
if (feed != null) return feed;
feed = new RSSFeed();
+ feed.setChannel(new RSSMessage(channelName, ""));
channels.put(channelName, feed);
return feed;
}
diff --git a/source/de/anomic/xml/RSSMessage.java b/source/de/anomic/xml/RSSMessage.java
index c86b58517..2a9e0e4bc 100644
--- a/source/de/anomic/xml/RSSMessage.java
+++ b/source/de/anomic/xml/RSSMessage.java
@@ -27,6 +27,7 @@
package de.anomic.xml;
+import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -58,6 +59,14 @@ public class RSSMessage {
private HashMap map;
+ public RSSMessage(String title, String description) {
+ this();
+ setValue("title", title);
+ setValue("description", description);
+ setValue("pubDate", new Date().toString());
+ setValue("guid", Integer.toHexString((title + description).hashCode()));
+ }
+
public RSSMessage() {
this.map = new HashMap();
this.map.put("guid", Long.toHexString(System.currentTimeMillis()) + ":" + guidcount++);
@@ -68,50 +77,62 @@ public class RSSMessage {
}
public String getAuthor() {
- return (String) map.get("author");
+ String s = map.get("author");
+ if (s == null) return ""; else return s;
}
public String getCopyright() {
- return (String) map.get("copyright");
+ String s = map.get("copyright");
+ if (s == null) return ""; else return s;
}
public String getCategory() {
- return (String) map.get("category");
+ String s = map.get("category");
+ if (s == null) return ""; else return s;
}
public String getTitle() {
- return (String) map.get("title");
+ String s = map.get("title");
+ if (s == null) return ""; else return s;
}
public String getLink() {
- return (String) map.get("link");
+ String s = map.get("link");
+ if (s == null) return ""; else return s;
}
public String getReferrer() {
- return (String) map.get("referrer");
+ String s = map.get("referrer");
+ if (s == null) return ""; else return s;
}
public String getLanguage() {
- return (String) map.get("language");
+ String s = map.get("language");
+ if (s == null) return ""; else return s;
}
public String getDescription() {
- return (String) map.get("description");
+ String s = map.get("description");
+ if (s == null) return ""; else return s;
}
public String getCreator() {
- return (String) map.get("creator");
+ String s = map.get("creator");
+ if (s == null) return ""; else return s;
}
public String getPubDate() {
- return (String) map.get("pubDate");
+ String s = map.get("pubDate");
+ if (s == null) return ""; else return s;
}
public String getGuid() {
- return (String) map.get("guid");
+ String s = map.get("guid");
+ if (s == null) return ""; else return s;
}
public String getDocs() {
- return (String) map.get("docs");
+ String s = map.get("docs");
+ if (s == null) return ""; else return s;
}
}
diff --git a/source/de/anomic/yacy/yacyNewsAction.java b/source/de/anomic/yacy/yacyNewsAction.java
index 0272ce382..c8db8a504 100644
--- a/source/de/anomic/yacy/yacyNewsAction.java
+++ b/source/de/anomic/yacy/yacyNewsAction.java
@@ -48,6 +48,8 @@ import java.io.IOException;
import de.anomic.server.serverCodings;
import de.anomic.server.logging.serverLog;
+import de.anomic.xml.RSSFeed;
+import de.anomic.xml.RSSMessage;
public class yacyNewsAction implements yacyPeerAction {
@@ -64,6 +66,7 @@ public class yacyNewsAction implements yacyPeerAction {
String decodedString = de.anomic.tools.crypt.simpleDecode(recordString, "");
yacyNewsRecord record = yacyNewsRecord.newRecord(decodedString);
if (record != null) {
+ RSSFeed.channels("PEERNEWS").addMessage(new RSSMessage("Peer Arrival", peer.getName() + " has joined the network"));
//System.out.println("### news arrival from peer " + peer.getName() + ", decoded=" + decodedString + ", record=" + recordString + ", news=" + record.toString());
String cre1 = (String) serverCodings.string2map(decodedString, ",").get("cre");
String cre2 = (String) serverCodings.string2map(record.toString(), ",").get("cre");
@@ -80,6 +83,7 @@ public class yacyNewsAction implements yacyPeerAction {
}
public void processPeerDeparture(yacySeed peer) {
+ RSSFeed.channels("PEERNEWS").addMessage(new RSSMessage("Peer Departure", peer.getName() + " has left the network"));
}
public void processPeerPing(yacySeed peer) {