From a79728b97d20c21ffbb4577f87aac6add93da48e Mon Sep 17 00:00:00 2001 From: apfelmaennchen Date: Sun, 17 Oct 2010 09:58:50 +0000 Subject: [PATCH] some updates to experimental bookmark code... git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7254 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- htroot/api/ymarks/add_ymark.java | 87 +++++-------------------- htroot/api/ymarks/delete_ymark.java | 56 +++++++++------- htroot/api/ymarks/get_ymark.java | 77 ++++++++++++---------- htroot/api/ymarks/get_ymark.xml | 2 +- source/de/anomic/data/WorkTables.java | 59 ++++++++++++++++- source/de/anomic/data/YMarkStatics.java | 50 +++++++++----- 6 files changed, 186 insertions(+), 145 deletions(-) diff --git a/htroot/api/ymarks/add_ymark.java b/htroot/api/ymarks/add_ymark.java index 67b04002b..375b94fdd 100644 --- a/htroot/api/ymarks/add_ymark.java +++ b/htroot/api/ymarks/add_ymark.java @@ -29,13 +29,13 @@ public class add_ymark { final boolean isAuthUser = user!= null && user.hasRight(userDB.Entry.BOOKMARK_RIGHT); if(isAdmin || isAuthUser) { - final String bmk_table = (isAuthUser ? user.getUserName() : "admin")+"_"+YMarkStatics.TABLE_BOOKMARKS_BASENAME; - final String tag_table = (isAuthUser ? user.getUserName() : "admin")+"_"+YMarkStatics.TABLE_TAGS_BASENAME; + final String bmk_table = (isAuthUser ? user.getUserName() : YMarkStatics.TABLE_BOOKMARKS_USER_ADMIN)+YMarkStatics.TABLE_BOOKMARKS_BASENAME; + final String tag_table = (isAuthUser ? user.getUserName() : YMarkStatics.TABLE_BOOKMARKS_USER_ADMIN)+YMarkStatics.TABLE_TAGS_BASENAME; byte[] urlHash = null; if(post.containsKey(YMarkStatics.TABLE_BOOKMARKS_COL_URL)) { try { - urlHash = YMarkStatics.getBookmarkId(post.get(YMarkStatics.TABLE_BOOKMARKS_COL_URL,"")); + urlHash = YMarkStatics.getBookmarkId(post.get(YMarkStatics.TABLE_BOOKMARKS_COL_URL,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT)); } catch (MalformedURLException e) { Log.logException(e); } @@ -62,12 +62,12 @@ public class add_ymark { if (bmk_row == null) { // create and insert new entry Data data = new Data(); - final String tagsString = YMarkStatics.cleanTagsString(post.get(YMarkStatics.TABLE_BOOKMARKS_COL_TAGS,"")); + final String tagsString = YMarkStatics.cleanTagsString(post.get(YMarkStatics.TABLE_BOOKMARKS_COL_TAGS,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT)); final byte[] date = DateFormatter.formatShortMilliSecond(new Date()).getBytes(); - data.put(YMarkStatics.TABLE_BOOKMARKS_COL_URL, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_URL,"").getBytes()); - data.put(YMarkStatics.TABLE_BOOKMARKS_COL_TITLE, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_TITLE,"").getBytes()); - data.put(YMarkStatics.TABLE_BOOKMARKS_COL_DESC, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_DESC,"").getBytes()); + data.put(YMarkStatics.TABLE_BOOKMARKS_COL_URL, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_URL,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT).getBytes()); + data.put(YMarkStatics.TABLE_BOOKMARKS_COL_TITLE, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_TITLE,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT).getBytes()); + data.put(YMarkStatics.TABLE_BOOKMARKS_COL_DESC, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_DESC,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT).getBytes()); data.put(YMarkStatics.TABLE_BOOKMARKS_COL_PUBLIC, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_PUBLIC,"false").getBytes()); data.put(YMarkStatics.TABLE_BOOKMARKS_COL_TAGS, tagsString.getBytes()); data.put(YMarkStatics.TABLE_BOOKMARKS_COL_DATE_ADDED, date); @@ -76,20 +76,20 @@ public class add_ymark { sb.tables.insert(bmk_table, urlHash, data); - final String[] tagArray = tagsString.split(","); + final String[] tagArray = tagsString.split(YMarkStatics.TABLE_TAGS_SEPARATOR); for (final String tag : tagArray) { - updateTagTable(tag_table, tag, new String(urlHash), YMarkStatics.TABLE_TAGS_ACTION_ADD); + sb.tables.updateTAGTable(tag_table, tag, urlHash, YMarkStatics.TABLE_TAGS_ACTION_ADD); } } else { // modify and update existing entry - bmk_row.put(YMarkStatics.TABLE_BOOKMARKS_COL_TITLE, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_TITLE,bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_TITLE,"")).getBytes()); - bmk_row.put(YMarkStatics.TABLE_BOOKMARKS_COL_DESC, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_DESC,bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_DESC,"")).getBytes()); - bmk_row.put(YMarkStatics.TABLE_BOOKMARKS_COL_PUBLIC, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_PUBLIC,bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_PUBLIC,"false")).getBytes()); + bmk_row.put(YMarkStatics.TABLE_BOOKMARKS_COL_TITLE, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_TITLE,bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_TITLE,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT)).getBytes()); + bmk_row.put(YMarkStatics.TABLE_BOOKMARKS_COL_DESC, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_DESC,bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_DESC,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT)).getBytes()); + bmk_row.put(YMarkStatics.TABLE_BOOKMARKS_COL_PUBLIC, post.get(YMarkStatics.TABLE_BOOKMARKS_COL_PUBLIC,bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_PUBLIC,YMarkStatics.TABLE_BOOKMARKS_COL_PUBLIC_FALSE)).getBytes()); - final String tagsString = YMarkStatics.cleanTagsString(post.get(YMarkStatics.TABLE_BOOKMARKS_COL_TAGS,"")); - HashSetold_tagSet = YMarkStatics.getTagSet(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_TAGS,""), false); + final String tagsString = YMarkStatics.cleanTagsString(post.get(YMarkStatics.TABLE_BOOKMARKS_COL_TAGS,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT)); + HashSetold_tagSet = YMarkStatics.getTagSet(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_TAGS,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT), false); HashSetnew_tagSet = YMarkStatics.getTagSet(tagsString, false); bmk_row.put(YMarkStatics.TABLE_BOOKMARKS_COL_TAGS, tagsString.getBytes()); @@ -105,14 +105,14 @@ public class add_ymark { new_tagSet.removeAll(old_tagSet); tagIter = new_tagSet.iterator(); while(tagIter.hasNext()) { - updateTagTable(tag_table, tagIter.next(), new String(urlHash), YMarkStatics.TABLE_TAGS_ACTION_ADD); + sb.tables.updateTAGTable(tag_table, tagIter.next(), urlHash, YMarkStatics.TABLE_TAGS_ACTION_ADD); } new_tagSet = YMarkStatics.getTagSet(tagsString, false); old_tagSet.removeAll(new_tagSet); tagIter=old_tagSet.iterator(); while(tagIter.hasNext()) { - updateTagTable(tag_table, tagIter.next(), new String(urlHash), YMarkStatics.TABLE_TAGS_ACTION_REMOVE); + sb.tables.updateTAGTable(tag_table, tagIter.next(), urlHash, YMarkStatics.TABLE_TAGS_ACTION_REMOVE); } } } catch (IOException e) { @@ -120,60 +120,9 @@ public class add_ymark { } prop.put("result", "1"); } else { - prop.put("AUTHENTICATE","Authentication required!"); + prop.put(YMarkStatics.TABLE_BOOKMARKS_USER_AUTHENTICATE,YMarkStatics.TABLE_BOOKMARKS_USER_AUTHENTICATE_MSG); } // return rewrite properties return prop; - } - - private static boolean updateTagTable(final String tag_table, final String tag, final String urlHash, final int action) { - Tables.Row tag_row = null; - final byte[] tagHash = YMarkStatics.getTagHash(tag); - HashSeturlSet = new HashSet(); - try { - tag_row = sb.tables.select(tag_table, tagHash); - if(tag_row == null) { - switch (action) { - case YMarkStatics.TABLE_TAGS_ACTION_ADD: - urlSet.add(urlHash); - break; - default: - return false; - } - Data tagEntry = new Data(); - tagEntry.put(YMarkStatics.TABLE_TAGS_COL_TAG, tag.getBytes()); - tagEntry.put(YMarkStatics.TABLE_TAGS_COL_URLS, YMarkStatics.keySetToBytes(urlSet)); - sb.tables.insert(tag_table, tagHash, tagEntry); - return true; - } else { - urlSet = YMarkStatics.keysStringToKeySet(new String(tag_row.get(YMarkStatics.TABLE_TAGS_COL_URLS))); - if(urlSet.contains(urlHash)) - Log.logInfo(YMarkStatics.TABLE_BOOKMARKS_LOG, "ok, urlHash found!"); - switch (action) { - case YMarkStatics.TABLE_TAGS_ACTION_ADD: - urlSet.add(urlHash); - break; - case YMarkStatics.TABLE_TAGS_ACTION_REMOVE: - urlSet.remove(urlHash); - if(urlSet.isEmpty()) { - sb.tables.delete(tag_table, tagHash); - return true; - } - break; - default: - return false; - } - tag_row.put(YMarkStatics.TABLE_TAGS_COL_URLS, YMarkStatics.keySetToBytes(urlSet)); - sb.tables.update(tag_table, tag_row); - return true; - } - } catch (IOException e) { - Log.logException(e); - } catch (RowSpaceExceededException e) { - Log.logException(e); - } - return false; - } - - + } } diff --git a/htroot/api/ymarks/delete_ymark.java b/htroot/api/ymarks/delete_ymark.java index fb887ea1a..c2cfad5c0 100644 --- a/htroot/api/ymarks/delete_ymark.java +++ b/htroot/api/ymarks/delete_ymark.java @@ -1,7 +1,8 @@ import java.io.IOException; -import java.net.MalformedURLException; import net.yacy.cora.protocol.RequestHeader; +import net.yacy.kelondro.blob.Tables; +import net.yacy.kelondro.index.RowSpaceExceededException; import net.yacy.kelondro.logging.Log; import de.anomic.data.YMarkStatics; import de.anomic.data.userDB; @@ -11,8 +12,11 @@ import de.anomic.server.serverSwitch; public class delete_ymark { + + private static Switchboard sb = null; + public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env) { - final Switchboard sb = (Switchboard) env; + sb = (Switchboard) env; final serverObjects prop = new serverObjects(); final userDB.Entry user = sb.userDB.getUser(header); @@ -20,31 +24,39 @@ public class delete_ymark { final boolean isAuthUser = user!= null && user.hasRight(userDB.Entry.BOOKMARK_RIGHT); if(isAdmin || isAuthUser) { - final String bmk_table = (isAuthUser ? user.getUserName() : "admin")+"_"+YMarkStatics.TABLE_BOOKMARKS_BASENAME; - final String tag_table = (isAuthUser ? user.getUserName() : "admin")+"_"+YMarkStatics.TABLE_TAGS_BASENAME; + final String bmk_table = (isAuthUser ? user.getUserName() : YMarkStatics.TABLE_BOOKMARKS_USER_ADMIN)+YMarkStatics.TABLE_BOOKMARKS_BASENAME; + final String tag_table = (isAuthUser ? user.getUserName() : YMarkStatics.TABLE_BOOKMARKS_USER_ADMIN)+YMarkStatics.TABLE_TAGS_BASENAME; - byte[] pk = null; - - if(post.containsKey(YMarkStatics.TABLE_BOOKMARKS_COL_ID)) { - pk = post.get(YMarkStatics.TABLE_BOOKMARKS_COL_ID).getBytes(); - } else if(post.containsKey(YMarkStatics.TABLE_BOOKMARKS_COL_URL)) { - try { - pk = YMarkStatics.getBookmarkId(post.get(YMarkStatics.TABLE_BOOKMARKS_COL_URL)); - } catch (MalformedURLException e) { - Log.logException(e); - } - } else { - prop.put("result", "0"); - return prop; - } - assert pk != null; + byte[] urlHash = null; + try { - sb.tables.delete(bmk_table,pk); - prop.put("result", "1"); + if(post.containsKey(YMarkStatics.TABLE_BOOKMARKS_COL_ID)) { + urlHash = post.get(YMarkStatics.TABLE_BOOKMARKS_COL_ID).getBytes(); + } else if(post.containsKey(YMarkStatics.TABLE_BOOKMARKS_COL_URL)) { + urlHash = YMarkStatics.getBookmarkId(post.get(YMarkStatics.TABLE_BOOKMARKS_COL_URL)); + } else { + prop.put("result", "0"); + return prop; + } + Tables.Row bmk_row = null; + bmk_row = sb.tables.select(bmk_table, urlHash); + if(bmk_row != null) { + final String tagsString = bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_TAGS,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT); + final String[] tagArray = tagsString.split(YMarkStatics.TABLE_TAGS_SEPARATOR); + for (final String tag : tagArray) { + sb.tables.updateTAGTable(tag_table, tag, urlHash,YMarkStatics.TABLE_TAGS_ACTION_REMOVE); + } + } + sb.tables.delete(bmk_table,urlHash); + prop.put("result", "1"); } catch (IOException e) { Log.logException(e); + } catch (RowSpaceExceededException e) { + Log.logException(e); } - } + } else { + prop.put(YMarkStatics.TABLE_BOOKMARKS_USER_AUTHENTICATE,YMarkStatics.TABLE_BOOKMARKS_USER_AUTHENTICATE_MSG); + } // return rewrite properties return prop; } diff --git a/htroot/api/ymarks/get_ymark.java b/htroot/api/ymarks/get_ymark.java index c03380ead..75aee74d8 100644 --- a/htroot/api/ymarks/get_ymark.java +++ b/htroot/api/ymarks/get_ymark.java @@ -1,8 +1,5 @@ import java.io.IOException; -import java.net.MalformedURLException; -import java.util.HashSet; import java.util.Iterator; -import java.util.Set; import net.yacy.cora.protocol.RequestHeader; import net.yacy.kelondro.blob.Tables; @@ -24,40 +21,50 @@ public class get_ymark { final boolean isAdmin = (sb.verifyAuthentication(header, true)); final boolean isAuthUser = user!= null && user.hasRight(userDB.Entry.BOOKMARK_RIGHT); - final String bmk_table = (isAuthUser ? user.getUserName() : "admin")+"_"+YMarkStatics.TABLE_BOOKMARKS_BASENAME; - final String tag_table = (isAuthUser ? user.getUserName() : "admin")+"_"+YMarkStatics.TABLE_TAGS_BASENAME; - - if(post.containsKey(YMarkStatics.TABLE_TAGS_COL_TAG)) { - final byte[] tagHash = YMarkStatics.getTagHash(post.get(YMarkStatics.TABLE_TAGS_COL_TAG)); - Tables.Row tag_row = null; - try { - tag_row = sb.tables.select(tag_table, tagHash); - if (tag_row != null) { - final IteratorurlIter = (YMarkStatics.keysStringToKeySet(new String(tag_row.get(YMarkStatics.TABLE_TAGS_COL_URLS)))).iterator(); - int count = 0; - while(urlIter.hasNext()) { - final byte[] urlHash = urlIter.next().getBytes(); - Tables.Row bmk_row = null; - bmk_row = sb.tables.select(bmk_table, urlHash); - if (bmk_row != null) { - prop.putXML("bookmarks_"+count+"_link", new String(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_URL,""))); - prop.putXML("bookmarks_"+count+"_hash", new String(urlHash)); - prop.putXML("bookmarks_"+count+"_tags", new String(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_TAGS,""))); - count++; - } + if(isAdmin || isAuthUser) { + final String bmk_table = (isAuthUser ? user.getUserName() : YMarkStatics.TABLE_BOOKMARKS_USER_ADMIN)+YMarkStatics.TABLE_BOOKMARKS_BASENAME; + final String tag_table = (isAuthUser ? user.getUserName() : YMarkStatics.TABLE_BOOKMARKS_USER_ADMIN)+YMarkStatics.TABLE_TAGS_BASENAME; + + if(post.containsKey(YMarkStatics.TABLE_TAGS_COL_TAG)) { + final byte[] tagHash = YMarkStatics.getTagHash(post.get(YMarkStatics.TABLE_TAGS_COL_TAG)); + Tables.Row tag_row = null; + try { + tag_row = sb.tables.select(tag_table, tagHash); + if (tag_row != null) { + final IteratorurlIter = (YMarkStatics.keysStringToKeySet(new String(tag_row.get(YMarkStatics.TABLE_TAGS_COL_URLS)))).iterator(); + int count = 0; + while(urlIter.hasNext()) { + final byte[] urlHash = urlIter.next().getBytes(); + Tables.Row bmk_row = null; + bmk_row = sb.tables.select(bmk_table, urlHash); + if (bmk_row != null) { + prop.putXML("bookmarks_"+count+"_id", new String(urlHash)); + prop.putXML("bookmarks_"+count+"_url", new String(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_URL,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT))); + prop.putXML("bookmarks_"+count+"_title", new String(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_TITLE,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT))); + prop.putXML("bookmarks_"+count+"_desc", new String(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_DESC,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT))); + prop.putXML("bookmarks_"+count+"_added", new String(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_DATE_ADDED,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT))); + prop.putXML("bookmarks_"+count+"_modified", new String(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_DATE_MODIFIED,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT))); + prop.putXML("bookmarks_"+count+"_visited", new String(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_DATE_VISITED,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT))); + prop.putXML("bookmarks_"+count+"_public", new String(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_PUBLIC,YMarkStatics.TABLE_BOOKMARKS_COL_PUBLIC_FALSE))); + prop.putXML("bookmarks_"+count+"_tags", new String(bmk_row.get(YMarkStatics.TABLE_BOOKMARKS_COL_TAGS,YMarkStatics.TABLE_BOOKMARKS_COL_DEFAULT))); + count++; + } + } + prop.put("bookmarks", count); } - prop.put("bookmarks", count); - } - else { - prop.put("result", "0"); - return prop; + else { + prop.put("result", "0"); + return prop; + } + } catch (IOException e) { + Log.logException(e); + } catch (RowSpaceExceededException e) { + Log.logException(e); } - } catch (IOException e) { - Log.logException(e); - } catch (RowSpaceExceededException e) { - Log.logException(e); - } - } + } + } else { + prop.put(YMarkStatics.TABLE_BOOKMARKS_USER_AUTHENTICATE,YMarkStatics.TABLE_BOOKMARKS_USER_AUTHENTICATE_MSG); + } // return rewrite properties return prop; } diff --git a/htroot/api/ymarks/get_ymark.xml b/htroot/api/ymarks/get_ymark.xml index 17317d3d2..626679d3b 100644 --- a/htroot/api/ymarks/get_ymark.xml +++ b/htroot/api/ymarks/get_ymark.xml @@ -1,6 +1,6 @@ #{bookmarks}# - + #{/bookmarks}# \ No newline at end of file diff --git a/source/de/anomic/data/WorkTables.java b/source/de/anomic/data/WorkTables.java index 0032808b4..cbcdd5f59 100644 --- a/source/de/anomic/data/WorkTables.java +++ b/source/de/anomic/data/WorkTables.java @@ -31,6 +31,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; @@ -277,5 +278,61 @@ public class WorkTables extends Tables { row.put(WorkTables.TABLE_API_COL_DATE_NEXT_EXEC, new Date(d)); } - + /** + * YMark function that updates the tag index + * @param tag_table is the user specific tag index + * @param tag is a single tag + * @param url is the url has as returned by DigestURI.hash() + * @param action is either add (1) or remove (2) + * @return + */ + public int updateTAGTable(final String tag_table, final String tag, final byte[] url, final int action) { + Tables.Row tag_row = null; + final byte[] tagHash = YMarkStatics.getTagHash(tag); + final String urlHash = new String(url); + HashSeturlSet = new HashSet(); + try { + tag_row = this.select(tag_table, tagHash); + if(tag_row == null) { + switch (action) { + case YMarkStatics.TABLE_TAGS_ACTION_ADD: + urlSet.add(urlHash); + break; + default: + return 0; + } + Data tagEntry = new Data(); + tagEntry.put(YMarkStatics.TABLE_TAGS_COL_TAG, tag.getBytes()); + tagEntry.put(YMarkStatics.TABLE_TAGS_COL_URLS, YMarkStatics.keySetToBytes(urlSet)); + this.insert(tag_table, tagHash, tagEntry); + return 1; + } else { + urlSet = YMarkStatics.keysStringToKeySet(new String(tag_row.get(YMarkStatics.TABLE_TAGS_COL_URLS))); + if(urlSet.contains(urlHash)) + Log.logInfo(YMarkStatics.TABLE_BOOKMARKS_LOG, "ok, urlHash found!"); + switch (action) { + case YMarkStatics.TABLE_TAGS_ACTION_ADD: + urlSet.add(urlHash); + break; + case YMarkStatics.TABLE_TAGS_ACTION_REMOVE: + urlSet.remove(urlHash); + if(urlSet.isEmpty()) { + this.delete(tag_table, tagHash); + return 1; + } + break; + default: + return 1; + } + tag_row.put(YMarkStatics.TABLE_TAGS_COL_URLS, YMarkStatics.keySetToBytes(urlSet)); + this.update(tag_table, tag_row); + return 1; + } + } catch (IOException e) { + Log.logException(e); + } catch (RowSpaceExceededException e) { + Log.logException(e); + } + return 0; + } } diff --git a/source/de/anomic/data/YMarkStatics.java b/source/de/anomic/data/YMarkStatics.java index 99c4aa422..6040b02ed 100644 --- a/source/de/anomic/data/YMarkStatics.java +++ b/source/de/anomic/data/YMarkStatics.java @@ -10,9 +10,16 @@ import net.yacy.kelondro.data.word.Word; public class YMarkStatics { - public final static String TABLE_BOOKMARKS_BASENAME = "bookmarks"; + public final static String TABLE_BOOKMARKS_BASENAME = "_bookmarks"; public final static String TABLE_BOOKMARKS_LOG = "BOOKMARKS"; + public final static String TABLE_BOOKMARKS_USER_ADMIN = "admin"; + public final static String TABLE_BOOKMARKS_USER_AUTHENTICATE = "AUTHENTICATE"; + public final static String TABLE_BOOKMARKS_USER_AUTHENTICATE_MSG = "Authentication required!"; + + public final static String TABLE_BOOKMARKS_URL_PROTOCOL_HTTP = "http://"; + public final static String TABLE_BOOKMARKS_URL_PROTOCOL_HTTPS = "https://"; + public final static String TABLE_BOOKMARKS_COL_ID = "id"; public final static String TABLE_BOOKMARKS_COL_URL = "url"; public final static String TABLE_BOOKMARKS_COL_TITLE = "title"; @@ -23,17 +30,23 @@ public class YMarkStatics { public final static String TABLE_BOOKMARKS_COL_PUBLIC = "public"; public final static String TABLE_BOOKMARKS_COL_TAGS = "tags"; - public final static String TABLE_TAGS_BASENAME = "tags"; - public final static String TABLE_TAGS_COL_ID = "id"; + public final static String TABLE_BOOKMARKS_COL_DEFAULT = ""; + public final static String TABLE_BOOKMARKS_COL_PUBLIC_TRUE = "true"; + public final static String TABLE_BOOKMARKS_COL_PUBLIC_FALSE = "false"; + + public final static String TABLE_TAGS_BASENAME = "_tags"; + public final static String TABLE_TAGS_SEPARATOR = ","; + + public final static String TABLE_TAGS_COL_ID = "id"; public final static String TABLE_TAGS_COL_TAG = "tag"; public final static String TABLE_TAGS_COL_URLS = "urls"; public final static int TABLE_TAGS_ACTION_ADD = 1; public final static int TABLE_TAGS_ACTION_REMOVE = 2; - + public final static byte[] getBookmarkId(String url) throws MalformedURLException { - if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://")) { - url="http://"+url; + if (!url.toLowerCase().startsWith(TABLE_BOOKMARKS_URL_PROTOCOL_HTTP) && !url.toLowerCase().startsWith(TABLE_BOOKMARKS_URL_PROTOCOL_HTTPS)) { + url=TABLE_BOOKMARKS_URL_PROTOCOL_HTTP+url; } return (new DigestURI(url, null)).hash(); } @@ -44,7 +57,7 @@ public class YMarkStatics { public final static HashSet getTagSet(final String tagsString, boolean clean) { HashSettagSet = new HashSet(); - final String[] tagArray = clean ? cleanTagsString(tagsString).split(",") : tagsString.split(","); + final String[] tagArray = clean ? cleanTagsString(tagsString).split(TABLE_TAGS_SEPARATOR) : tagsString.split(TABLE_TAGS_SEPARATOR); for (final String tag : tagArray) { tagSet.add(tag); } @@ -57,7 +70,7 @@ public class YMarkStatics { public final static HashSet getTagIdSet(final String tagsString, boolean clean) { HashSettagSet = new HashSet(); - final String[] tagArray = clean ? cleanTagsString(tagsString).split(",") : tagsString.split(","); + final String[] tagArray = clean ? cleanTagsString(tagsString).split(TABLE_TAGS_SEPARATOR) : tagsString.split(TABLE_TAGS_SEPARATOR); for (final String tag : tagArray) { tagSet.add(getTagHash(tag)); } @@ -70,16 +83,19 @@ public class YMarkStatics { public final static byte[] keySetToBytes(final HashSet urlSet) { final Iterator urlIter = urlSet.iterator(); - String urls = ""; + final + StringBuilder urls = new StringBuilder(); while(urlIter.hasNext()) { - urls = urls + "," + urlIter.next(); + urls.append(TABLE_TAGS_SEPARATOR); + urls.append(urlIter.next()); } - return cleanTagsString(urls).getBytes(); + urls.deleteCharAt(0); + return urls.toString().getBytes(); } public final static HashSet keysStringToKeySet(final String keysString) { HashSet keySet = new HashSet(); - final String[] keyArray = keysString.split(","); + final String[] keyArray = keysString.split(TABLE_TAGS_SEPARATOR); for (final String key : keyArray) { keySet.add(key); } @@ -88,17 +104,17 @@ public class YMarkStatics { public final static String cleanTagsString(String tagsString) { // get rid of heading, trailing and double commas since they are useless - while (tagsString.length() > 0 && tagsString.charAt(0) == ',') { + while (tagsString.length() > 0 && tagsString.charAt(0) == TABLE_TAGS_SEPARATOR.charAt(0)) { tagsString = tagsString.substring(1); } - while (tagsString.endsWith(",")) { + while (tagsString.endsWith(TABLE_TAGS_SEPARATOR)) { tagsString = tagsString.substring(0,tagsString.length() -1); } while (tagsString.contains(",,")){ - tagsString = tagsString.replaceAll(",,", ","); + tagsString = tagsString.replaceAll(",,", TABLE_TAGS_SEPARATOR); } // space characters following a comma are removed - tagsString = tagsString.replaceAll(",\\s+", ","); + tagsString = tagsString.replaceAll(",\\s+", TABLE_TAGS_SEPARATOR); return tagsString; } @@ -109,7 +125,7 @@ public class YMarkStatics { foldersString = foldersString.substring(0, foldersString.length() -1); } while (foldersString.contains("/,")){ - foldersString = foldersString.replaceAll("/,", ","); + foldersString = foldersString.replaceAll("/,", TABLE_TAGS_SEPARATOR); } while (foldersString.contains("//")){ foldersString = foldersString.replaceAll("//", "/");