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

Antwort per Email an