dates Table for bookmarksdb(needed for del.icio.us api)

Files in DATA/DATA
Migration: move bookmarks.db from SETTINGS in DATA

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@1270 6c8d7289-2bf4-0310-a012-ef5d649a1542
This commit is contained in:
allo 2005-12-30 12:34:44 +00:00
parent 11fe95832e
commit 9cce3c5709
2 changed files with 127 additions and 7 deletions

View File

@ -44,7 +44,9 @@ package de.anomic.data;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@ -61,8 +63,10 @@ import de.anomic.server.logging.serverLog;
public class bookmarksDB {
kelondroMap tagsTable;
kelondroMap bookmarksTable;
kelondroMap datesTable;
public bookmarksDB(File bookmarksFile, File tagsFile, int bufferkb){
public bookmarksDB(File bookmarksFile, File tagsFile, File datesFile, int bufferkb){
//bookmarks
//check if database exists
if(bookmarksFile.exists()){
try {
@ -72,13 +76,15 @@ public class bookmarksDB {
//database reset :-((
bookmarksFile.delete();
bookmarksFile.getParentFile().mkdirs();
this.bookmarksTable = new kelondroMap(new kelondroDyn(bookmarksFile, bufferkb * 1024, 128, 256, true));
//urlHash is 12 bytes long
this.bookmarksTable = new kelondroMap(new kelondroDyn(bookmarksFile, bufferkb * 1024, 12, 256, true));
}
}else{
//new database
bookmarksFile.getParentFile().mkdirs();
this.bookmarksTable = new kelondroMap(new kelondroDyn(bookmarksFile, bufferkb * 1024, 128, 256, true));
this.bookmarksTable = new kelondroMap(new kelondroDyn(bookmarksFile, bufferkb * 1024, 12, 256, true));
}
//tags
//check if database exists
if(tagsFile.exists()){
try {
@ -88,16 +94,36 @@ public class bookmarksDB {
//reset database
tagsFile.delete();
tagsFile.getParentFile().mkdirs();
// max. 128 byte long tags
this.tagsTable = new kelondroMap(new kelondroDyn(tagsFile, bufferkb * 1024, 128, 256, true));
rebuildTags();
}
}else{
//new database
tagsFile.getParentFile().mkdirs();
this.tagsTable = new kelondroMap(new kelondroDyn(tagsFile, bufferkb * 1024, 128, 256, true));
rebuildTags();
}
// dates
//check if database exists
if(datesFile.exists()){
try {
//open it
this.datesTable=new kelondroMap(new kelondroDyn(datesFile, 1024*bufferkb));
} catch (IOException e) {
//reset database
datesFile.delete();
datesFile.getParentFile().mkdirs();
//YYYY-MM-DDTHH:mm:ssZ = 20 byte. currently used: YYYY-MM-DD = 10 bytes
this.datesTable = new kelondroMap(new kelondroDyn(datesFile, bufferkb * 1024, 20, 256, true));
rebuildDates();
}
}else{
//new database
datesFile.getParentFile().mkdirs();
this.datesTable = new kelondroMap(new kelondroDyn(datesFile, bufferkb * 1024, 20, 256, true));
rebuildDates();
}
}
public void close(){
try {
@ -106,6 +132,9 @@ public class bookmarksDB {
try {
tagsTable.close();
} catch (IOException e) {}
try {
datesTable.close();
} catch (IOException e) {}
}
public int bookmarksSize(){
return bookmarksTable.size();
@ -167,6 +196,24 @@ public class bookmarksDB {
}
serverLog.logInfo("BOOKMARKS", "Rebuilt "+tagsTable.size()+" tags using your "+bookmarksTable.size()+" bookmarks.");
}
public void rebuildDates(){
serverLog.logInfo("BOOKMARKS", "rebuilding dates.db from bookmarks.db...");
Iterator it=bookmarkIterator(true);
Bookmark bookmark;
String date;
bookmarksDate bmDate;
while(it.hasNext()){
bookmark=(Bookmark) it.next();
date = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date(bookmark.getTimeStamp()));
bmDate=getDate(date);
if(bmDate==null){
bmDate=new bookmarksDate(date);
}
bmDate.add(bookmark.getUrlHash());
bmDate.setDatesTable();
}
serverLog.logInfo("BOOKMARKS", "Rebuilt "+datesTable.size()+" dates using your "+bookmarksTable.size()+" bookmarks.");
}
public Tag getTag(String tagName){
Map map;
try {
@ -177,6 +224,17 @@ public class bookmarksDB {
return null;
}
}
public bookmarksDate getDate(String date){
Map map;
try {
map=datesTable.get(date);
if(map==null) return null;
return new bookmarksDate(date, map);
} catch (IOException e) {
return null;
}
}
public boolean renameTag(String oldName, String newName){
Tag tag=getTag(oldName);
if (tag != null) {
@ -346,6 +404,67 @@ public class bookmarksDB {
return string2vector(((String)this.mem.get(URL_HASHES))).size();
}
}
class bookmarksDate{
public static final String URL_HASHES="urlHashes";
private Map mem;
String date;
public bookmarksDate(String mydate){
date=mydate;
mem=new HashMap();
mem.put(URL_HASHES, "");
}
public bookmarksDate(String mydate, Map map){
date=mydate;
mem=map;
}
public bookmarksDate(String mydate, Vector entries){
date=mydate;
mem=new HashMap();
mem.put(URL_HASHES, vector2string(entries));
}
public void add(String urlHash){
String urlHashes = (String)mem.get(URL_HASHES);
Vector list;
if(urlHashes != null && !urlHashes.equals("")){
list=string2vector(urlHashes);
}else{
list=new Vector();
}
if(!list.contains(urlHash) && !urlHash.equals("")){
list.add(urlHash);
}
this.mem.put(URL_HASHES, vector2string(list));
/*if(urlHashes!=null && !urlHashes.equals("") ){
if(urlHashes.indexOf(urlHash) <0){
this.mem.put(URL_HASHES, urlHashes+","+urlHash);
}
}else{
this.mem.put(URL_HASHES, urlHash);
}*/
}
public void delete(String urlHash){
Vector list=string2vector((String) this.mem.get(URL_HASHES));
if(list.contains(urlHash)){
list.remove(urlHash);
}
this.mem.put(URL_HASHES, vector2string(list));
}
public void setDatesTable(){
try {
if(this.size() >0){
bookmarksDB.this.datesTable.set(getDateString(), mem);
}else{
bookmarksDB.this.datesTable.remove(getDateString());
}
} catch (IOException e) {}
}
public String getDateString(){
return date;
}
public int size(){
return string2vector(((String)this.mem.get(URL_HASHES))).size();
}
}
/**
* Subclass, which stores the bookmark
*

View File

@ -434,9 +434,10 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser
//Init bookmarks DB
this.log.logConfig("Loading Bookmarks DB");
File bookmarksFile = new File(getRootPath(), "DATA/SETTINGS/bookmarks.db");
File tagsFile = new File(getRootPath(), "DATA/SETTINGS/tags.db");
this.bookmarksDB = new bookmarksDB(bookmarksFile, tagsFile, 512);
File bookmarksFile = new File(getRootPath(), "DATA/DATA/bookmarks.db");
File tagsFile = new File(getRootPath(), "DATA/DATA/bookmarkTags.db");
File datesFile = new File(getRootPath(), "DATA/DATA/bookmarkDates.db");
this.bookmarksDB = new bookmarksDB(bookmarksFile, tagsFile, datesFile, 512);
this.log.logConfig("Loaded Bookmarks DB from files "+ bookmarksFile.getName()+ ", "+tagsFile.getName());
this.log.logConfig(this.bookmarksDB.tagsSize()+" Tag, "+this.bookmarksDB.bookmarksSize()+" Bookmarks");