git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4474 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
lulabad 17 years ago
parent bfe171e693
commit 766a04bc06

@ -46,7 +46,6 @@
// javac -classpath .:../classes Blog.java // javac -classpath .:../classes Blog.java
// if the shell's current path is HTROOT // if the shell's current path is HTROOT
import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
@ -61,7 +60,6 @@ import de.anomic.http.httpc;
import de.anomic.plasma.plasmaSwitchboard; import de.anomic.plasma.plasmaSwitchboard;
import de.anomic.server.serverObjects; import de.anomic.server.serverObjects;
import de.anomic.server.serverSwitch; import de.anomic.server.serverSwitch;
import de.anomic.server.logging.serverLog;
import de.anomic.yacy.yacyCore; import de.anomic.yacy.yacyCore;
import de.anomic.yacy.yacyNewsPool; import de.anomic.yacy.yacyNewsPool;
import de.anomic.yacy.yacyNewsRecord; import de.anomic.yacy.yacyNewsRecord;
@ -80,7 +78,7 @@ public class Blog {
public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch env) { public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch env) {
final plasmaSwitchboard switchboard = (plasmaSwitchboard) env; final plasmaSwitchboard switchboard = (plasmaSwitchboard) env;
final serverObjects prop = new serverObjects(); final serverObjects prop = new serverObjects();
blogBoard.entry page = null; blogBoard.BlogEntry page = null;
boolean hasRights = switchboard.verifyAuthentication(header, true); boolean hasRights = switchboard.verifyAuthentication(header, true);
@ -293,8 +291,8 @@ public class Blog {
final boolean hasRights, final boolean hasRights,
final boolean xml) final boolean xml)
{ {
try { //final Iterator<String> i = switchboard.blogDB.keys(false);
final Iterator<String> i = switchboard.blogDB.keys(false); final Iterator<String> i = switchboard.blogDB.getBlogIterator(false);
String pageid; String pageid;
int count = 0; //counts how many entries are shown to the user int count = 0; //counts how many entries are shown to the user
if(xml) num = 0; if(xml) num = 0;
@ -331,13 +329,12 @@ public class Blog {
} else prop.put("mode_preventries", "0"); } else prop.put("mode_preventries", "0");
} catch (IOException e) { serverLog.logSevere("BLOG", "Error reading blog-DB", e); }
return prop; return prop;
} }
private static serverObjects putBlogEntry( private static serverObjects putBlogEntry(
final serverObjects prop, final serverObjects prop,
final blogBoard.entry entry, final blogBoard.BlogEntry entry,
final String address, final String address,
final int number, final int number,
final boolean hasRights, final boolean hasRights,

@ -58,7 +58,7 @@ import de.anomic.data.blogBoard;
import de.anomic.data.blogBoardComments; import de.anomic.data.blogBoardComments;
import de.anomic.data.messageBoard; import de.anomic.data.messageBoard;
import de.anomic.data.userDB; import de.anomic.data.userDB;
import de.anomic.data.blogBoard.entry; import de.anomic.data.blogBoard.BlogEntry;
import de.anomic.http.httpHeader; import de.anomic.http.httpHeader;
import de.anomic.plasma.plasmaSwitchboard; import de.anomic.plasma.plasmaSwitchboard;
import de.anomic.server.serverFileUtils; import de.anomic.server.serverFileUtils;
@ -79,7 +79,7 @@ public class BlogComments {
public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch env) { public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch env) {
plasmaSwitchboard switchboard = (plasmaSwitchboard) env; plasmaSwitchboard switchboard = (plasmaSwitchboard) env;
serverObjects prop = new serverObjects(); serverObjects prop = new serverObjects();
blogBoard.entry page = null; blogBoard.BlogEntry page = null;
boolean hasRights = switchboard.verifyAuthentication(header, true); boolean hasRights = switchboard.verifyAuthentication(header, true);
if (hasRights) prop.put("mode_admin", "1"); if (hasRights) prop.put("mode_admin", "1");
@ -158,7 +158,7 @@ public class BlogComments {
subject = StrSubject.getBytes(); subject = StrSubject.getBytes();
} }
String commentID = String.valueOf(System.currentTimeMillis()); String commentID = String.valueOf(System.currentTimeMillis());
entry blogEntry = switchboard.blogDB.read(pagename); BlogEntry blogEntry = switchboard.blogDB.read(pagename);
blogEntry.addComment(commentID); blogEntry.addComment(commentID);
switchboard.blogDB.write(blogEntry); switchboard.blogDB.write(blogEntry);
switchboard.blogCommentDB.write(switchboard.blogCommentDB.newEntry(commentID, subject, author, ip, date, content)); switchboard.blogCommentDB.write(switchboard.blogCommentDB.newEntry(commentID, subject, author, ip, date, content));

@ -49,9 +49,12 @@ import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.text.ParseException; import java.text.ParseException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.TreeSet;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
@ -64,6 +67,7 @@ import org.xml.sax.SAXException;
import de.anomic.kelondro.kelondroBase64Order; import de.anomic.kelondro.kelondroBase64Order;
import de.anomic.kelondro.kelondroDyn; import de.anomic.kelondro.kelondroDyn;
import de.anomic.kelondro.kelondroException;
import de.anomic.kelondro.kelondroMapObjects; import de.anomic.kelondro.kelondroMapObjects;
import de.anomic.kelondro.kelondroNaturalOrder; import de.anomic.kelondro.kelondroNaturalOrder;
import de.anomic.server.serverDate; import de.anomic.server.serverDate;
@ -74,7 +78,7 @@ public class blogBoard {
public static final int keyLength = 64; public static final int keyLength = 64;
private static final int recordSize = 512; private static final int recordSize = 512;
private kelondroMapObjects datbase = null; kelondroMapObjects datbase = null;
public blogBoard(File actpath, long preloadTime) { public blogBoard(File actpath, long preloadTime) {
new File(actpath.getParent()).mkdir(); new File(actpath.getParent()).mkdir();
@ -109,16 +113,16 @@ public class blogBoard {
return wikiBoard.guessAuthor(ip); return wikiBoard.guessAuthor(ip);
} }
public entry newEntry(String key, byte[] subject, byte[] author, String ip, Date date, byte[] page, ArrayList<String> comments, String commentMode) { public BlogEntry newEntry(String key, byte[] subject, byte[] author, String ip, Date date, byte[] page, ArrayList<String> comments, String commentMode) {
return new entry(normalize(key), subject, author, ip, date, page, comments, commentMode); return new BlogEntry(normalize(key), subject, author, ip, date, page, comments, commentMode);
} }
public class entry { public class BlogEntry {
String key; String key;
HashMap<String, String> record; HashMap<String, String> record;
public entry(String nkey, byte[] subject, byte[] author, String ip, Date date, byte[] page, ArrayList<String> comments, String commentMode) { public BlogEntry(String nkey, byte[] subject, byte[] author, String ip, Date date, byte[] page, ArrayList<String> comments, String commentMode) {
record = new HashMap<String, String>(); record = new HashMap<String, String>();
key = nkey; key = nkey;
if (key.length() > keyLength) key = key.substring(0, keyLength); if (key.length() > keyLength) key = key.substring(0, keyLength);
@ -137,11 +141,13 @@ public class blogBoard {
if (commentMode == null) record.put("commentMode", "1"); if (commentMode == null) record.put("commentMode", "1");
else record.put("commentMode", commentMode); else record.put("commentMode", commentMode);
// TODO: implement this function
record.put("privacy", "public");
wikiBoard.setAuthor(ip, new String(author)); wikiBoard.setAuthor(ip, new String(author));
//System.out.println("DEBUG: setting author " + author + " for ip = " + ip + ", authors = " + authors.toString());
} }
private entry(String key, HashMap<String, String> record) { private BlogEntry(String key, HashMap<String, String> record) {
this.key = key; this.key = key;
this.record = record; this.record = record;
if (this.record.get("comments")==null) this.record.put("comments", listManager.collection2string(new ArrayList<String>())); if (this.record.get("comments")==null) this.record.put("comments", listManager.collection2string(new ArrayList<String>()));
@ -237,9 +243,12 @@ public class blogBoard {
public int getCommentMode(){ public int getCommentMode(){
return Integer.parseInt(record.get("commentMode")); return Integer.parseInt(record.get("commentMode"));
} }
public boolean isPublic() {
return true;
}
} }
public String write(entry page) { public String write(BlogEntry page) {
// writes a new page and returns key // writes a new page and returns key
try { try {
datbase.set(page.key, page.record); datbase.set(page.key, page.record);
@ -249,16 +258,16 @@ public class blogBoard {
} }
} }
public entry read(String key) { public BlogEntry read(String key) {
return read(key, datbase); return read(key, datbase);
} }
private entry read(String key, kelondroMapObjects base) { private BlogEntry read(String key, kelondroMapObjects base) {
key = normalize(key); key = normalize(key);
if (key.length() > keyLength) key = key.substring(0, keyLength); if (key.length() > keyLength) key = key.substring(0, keyLength);
HashMap<String, String> record = base.getMap(key); HashMap<String, String> record = base.getMap(key);
if (record == null) return newEntry(key, "".getBytes(), "anonymous".getBytes(), "127.0.0.1", new Date(), "".getBytes(), null, null); if (record == null) return newEntry(key, "".getBytes(), "anonymous".getBytes(), "127.0.0.1", new Date(), "".getBytes(), null, null);
return new entry(key, record); return new BlogEntry(key, record);
} }
public boolean importXML(String input) { public boolean importXML(String input) {
@ -348,5 +357,92 @@ public class blogBoard {
public Iterator<String> keys(boolean up) throws IOException { public Iterator<String> keys(boolean up) throws IOException {
return datbase.keys(up, false); return datbase.keys(up, false);
} }
/**
* Comparator to sort objects of type Blog according to their timestamps
*/
public class BlogComparator implements Comparator<String> {
private boolean newestFirst;
/**
* @param newestFirst newest first, or oldest first?
*/
public BlogComparator(boolean newestFirst){
this.newestFirst=newestFirst;
}
public int compare(String obj1, String obj2) {
BlogEntry bm1=read(obj1);
BlogEntry bm2=read(obj2);
if(bm1==null || bm2==null)
return 0; //XXX: i think this should not happen? maybe this needs further tracing of the bug
if(this.newestFirst){
if(Long.valueOf(bm2.timestamp()) - Long.valueOf(bm1.timestamp()) >0) return 1;
return -1;
}
if(Long.valueOf(bm1.timestamp()) - Long.valueOf(bm2.timestamp()) >0) return 1;
return -1;
}
}
public Iterator<String> getBlogIterator(boolean priv){
TreeSet<String> set=new TreeSet<String>(new BlogComparator(false));
Iterator<BlogEntry> it=blogIterator(true);
BlogEntry bm;
while(it.hasNext()){
bm=(BlogEntry)it.next();
if(priv || bm.isPublic()){
set.add(bm.key());
}
}
return set.iterator();
}
public Iterator<BlogEntry> blogIterator(boolean up){
try {
return new BlogIterator(up);
} catch (IOException e) {
return new HashSet<BlogEntry>().iterator();
}
}
/**
* Subclass of blogBoard, which provides the blogIterator object-type
*/
public class BlogIterator implements Iterator<BlogEntry> {
Iterator<String> blogIter;
blogBoard.BlogEntry nextEntry;
public BlogIterator(boolean up) throws IOException {
//flushBookmarkCache(); //XXX: this will cost performance
this.blogIter = blogBoard.this.datbase.keys(up, false);
this.nextEntry = null;
}
public boolean hasNext() {
try {
return this.blogIter.hasNext();
} catch (kelondroException e) {
//resetDatabase();
return false;
}
}
public BlogEntry next() {
try {
return read((String) this.blogIter.next());
} catch (kelondroException e) {
//resetDatabase();
return null;
}
}
public void remove() {
if (this.nextEntry != null) {
try {
Object blogKey = this.nextEntry.key();
if (blogKey != null) delete((String) blogKey);
} catch (kelondroException e) {
//resetDatabase();
}
}
}
}
} }

Loading…
Cancel
Save