Author: apfelmaennchen Date: 2008-01-23 23:19:23 +0100 (Wed, 23 Jan 2008) New Revision: 4381
Added: trunk/htroot/xml/bookmarks/xbel/ trunk/htroot/xml/bookmarks/xbel/xbel.java trunk/htroot/xml/bookmarks/xbel/xbel.xml Log: added XBEL Export for YaCy Bookmarks. Tags are strored as <metadata owner="Mozilla" ShortcutURL="tag1,tag2"/> Added: trunk/htroot/xml/bookmarks/xbel/xbel.java =================================================================== --- trunk/htroot/xml/bookmarks/xbel/xbel.java 2008-01-23 21:23:17 UTC (rev 4380) +++ trunk/htroot/xml/bookmarks/xbel/xbel.java 2008-01-23 22:19:23 UTC (rev 4381) @@ -0,0 +1,127 @@ +package xml.bookmarks.xbel; + +import java.util.Iterator; +import java.util.Set; +import java.util.TreeSet; + +import de.anomic.data.bookmarksDB; +import de.anomic.data.userDB; +import de.anomic.data.bookmarksDB.Tag; +import de.anomic.http.httpHeader; +import de.anomic.plasma.plasmaSwitchboard; +import de.anomic.server.serverObjects; +import de.anomic.server.serverSwitch; + +public class xbel { + + private static serverObjects prop; + private static plasmaSwitchboard switchboard; + private static userDB.Entry user; + private static boolean isAdmin; + + public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch env) { + + int count = 0; + String username=""; + Iterator it = null; + bookmarksDB.Tag tag; + Set<String> folders = new TreeSet<String>(); + String path = ""; + + prop = new serverObjects(); + switchboard = (plasmaSwitchboard) env; + isAdmin=switchboard.verifyAuthentication(header, true); + + if(isAdmin) { + + //----------------------- + // create folder list + //----------------------- + + it = switchboard.bookmarksDB.getTagIterator(isAdmin); + while(it.hasNext()){ + tag=(Tag) it.next(); + if (tag.getFriendlyName().startsWith("/")) { + path = tag.getFriendlyName(); + path = cleanPathString(path); + while(path.length() > 0){ + folders.add(path); + path = path.replaceAll("(/.[^/]*$)", ""); + } + } + } + + folders.add("\uffff"); + it = folders.iterator(); + + count = recurseFolders(it,"/",0,true,""); + prop.put("xbel", count); + + } + return prop; // return from serverObjects respond() + + } + + private static int recurseFolders(Iterator<String> it, String root, int count, boolean next, String prev){ + String fn=""; + bookmarksDB.Bookmark bookmark; + + if(next) fn = it.next().toString(); + else fn = prev; + + if(fn.equals("\uffff")) { + int i = prev.replaceAll("[^/]","").length(); + while(i>0){ + prop.put("xbel_"+count+"_elements", "</folder>"); + count++; + i--; + } + return count; + } + + if(fn.startsWith(root)){ + prop.put("xbel_"+count+"_elements", "<folder id=\">"+bookmarksDB.tagHash(fn)+"\">"); + count++; + prop.put("xbel_"+count+"_elements", "<title>"+fn.replaceFirst(root+"/*","")+"</title>"); + count++; + Iterator bit=switchboard.bookmarksDB.getBookmarksIterator(fn, isAdmin); + while(bit.hasNext()){ + bookmark=switchboard.bookmarksDB.getBookmark((String)bit.next()); + prop.put("xbel_"+count+"_elements", "<bookmark id=\""+bookmark.getUrlHash()+"\" href=\""+bookmark.getUrl()+"\">"); + count++; + prop.put("xbel_"+count+"_elements", "<title>"+bookmark.getTitle()+"</title>"); + count++; + prop.put("xbel_"+count+"_elements", "<info><metadata owner=\"Mozilla\" ShortcutURL=\""+bookmark.getTagsString().replaceAll("/.*,", "")+"\"/></info>"); + count++; + prop.put("xbel_"+count+"_elements", "<desc>"+bookmark.getDescription()+"</desc>"); + count++; + prop.put("xbel_"+count+"_elements", "</bookmark>"); + count++; + } + if(it.hasNext()){ + count = recurseFolders(it, fn, count, true, fn); + } + } else { + prop.put("xbel_"+count+"_elements", "</folder>"); + count++; + root = root.replaceAll("(/.[^/]*$)", ""); + if(root.equals("")) root = "/"; + count = recurseFolders(it, root, count, false, fn); + } + return count; + } + private static String cleanPathString(String pathString){ + + // get rid of double and trailing slashes + while(pathString.endsWith("/")){ + pathString = pathString.substring(0, pathString.length() -1); + } + while(pathString.contains("/,")){ + pathString = pathString.replaceAll("/,", ","); + } + while(pathString.contains("//")){ + pathString = pathString.replaceAll("//", "/"); + } + return pathString; + } +} \ No newline at end of file Added: trunk/htroot/xml/bookmarks/xbel/xbel.xml =================================================================== --- trunk/htroot/xml/bookmarks/xbel/xbel.xml 2008-01-23 21:23:17 UTC (rev 4380) +++ trunk/htroot/xml/bookmarks/xbel/xbel.xml 2008-01-23 22:19:23 UTC (rev 4381) @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE xbel PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML" "http://pyxml.sourceforge.net/topics/dtds/xbel-1.0.dtd"> +<xbel> + <folder> + <title>YaCy Bookmark Folder</title> + #{xbel}# + #[elements]# + #{/xbel}# + </folder> +</xbel> \ No newline at end of file _______________________________________________ YaCy-svn mailing list YaCy-svn@lists.berlios.de https://lists.berlios.de/mailman/listinfo/yacy-svn