YMark: code clean up and some small fixes

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7661 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
apfelmaennchen 14 years ago
parent 667e912b19
commit 62855f9567

@ -1,5 +1,6 @@
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.HashMap; import java.util.HashMap;
@ -33,29 +34,43 @@ public class import_ymark {
final boolean isAuthUser = user!= null && user.hasRight(UserDB.AccessRight.BOOKMARK_RIGHT); final boolean isAuthUser = user!= null && user.hasRight(UserDB.AccessRight.BOOKMARK_RIGHT);
Thread t; Thread t;
HashMap<String,String> bmk; HashMap<String,String> bmk;
ByteArrayInputStream byteIn = null; String root = YMarkTables.FOLDERS_IMPORTED;
InputStreamReader reader = null;
if(isAdmin || isAuthUser) { if(isAdmin || isAuthUser) {
String bmk_user = (isAuthUser ? user.getUserName() : YMarkTables.USER_ADMIN); String bmk_user = (isAuthUser ? user.getUserName() : YMarkTables.USER_ADMIN);
if(isAdmin && post.containsKey("table") && post.get("table").length() > 0) { if(isAdmin && post.containsKey("table") && post.get("table").length() > 0) {
bmk_user = post.get("table").substring(0, post.get("table").indexOf('_')); bmk_user = post.get("table").substring(0, post.get("table").indexOf('_'));
} }
if(post.containsKey("redirect") && post.get("redirect").length() > 0) {
prop.put("redirect_url", post.get("redirect"));
prop.put("redirect", "1");
}
if(post.containsKey("root") && post.get("root").length() > 0) {
root = post.get("root");
}
if(post.containsKey("bmkfile") && post.containsKey("importer")){ if(post.containsKey("bmkfile") && post.containsKey("importer")){
byteIn = new ByteArrayInputStream(UTF8.getBytes(post.get("bmkfile$file"))); try {
if(post.get("importer").equals("html") && byteIn != null) { reader = new InputStreamReader(new ByteArrayInputStream(UTF8.getBytes(post.get("bmkfile$file"))),"UTF-8");
final YMarkHTMLImporter htmlImporter = new YMarkHTMLImporter(byteIn, 10); } catch (UnsupportedEncodingException e1) {
Log.logException(e1);
// return rewrite properties
prop.put("result", "0");
return prop;
}
if(post.get("importer").equals("html") && reader != null) {
final YMarkHTMLImporter htmlImporter = new YMarkHTMLImporter(reader, 10, root);
t = new Thread(htmlImporter, "YMarks - HTML Importer"); t = new Thread(htmlImporter, "YMarks - HTML Importer");
t.start(); t.start();
while ((bmk = htmlImporter.take()) != YMarkTables.POISON) { while ((bmk = htmlImporter.take()) != YMarkTables.POISON) {
putBookmark(sb, bmk_user, bmk); putBookmark(sb, bmk_user, bmk);
} }
prop.put("result", "1"); prop.put("result", "1");
} else if(post.get("importer").equals("xbel") && byteIn != null) { } else if(post.get("importer").equals("xbel") && reader != null) {
final YMarkXBELImporter xbelImporter; final YMarkXBELImporter xbelImporter;
try { try {
//TODO: make RootFold //TODO: make RootFold
xbelImporter = new YMarkXBELImporter(byteIn, 100, YMarkTables.FOLDERS_IMPORTED); xbelImporter = new YMarkXBELImporter(reader, 10, root);
} catch (SAXException e) { } catch (SAXException e) {
//TODO: display an error message //TODO: display an error message
Log.logException(e); Log.logException(e);
@ -68,14 +83,9 @@ public class import_ymark {
putBookmark(sb, bmk_user, bmk); putBookmark(sb, bmk_user, bmk);
} }
prop.put("result", "1"); prop.put("result", "1");
} else if(post.get("importer").equals("json") && byteIn != null) { } else if(post.get("importer").equals("json") && reader != null) {
YMarkJSONImporter jsonImporter; YMarkJSONImporter jsonImporter;
try { jsonImporter = new YMarkJSONImporter(reader, 10, root);
jsonImporter = new YMarkJSONImporter(byteIn, 10);
} catch (UnsupportedEncodingException e) {
prop.put("result", "1");
return prop;
}
t = new Thread(jsonImporter, "YMarks - JSON Importer"); t = new Thread(jsonImporter, "YMarks - JSON Importer");
t.start(); t.start();
while ((bmk = jsonImporter.take()) != YMarkTables.POISON) { while ((bmk = jsonImporter.take()) != YMarkTables.POISON) {
@ -87,10 +97,6 @@ public class import_ymark {
} else { } else {
prop.put(YMarkTables.USER_AUTHENTICATE,YMarkTables.USER_AUTHENTICATE_MSG); prop.put(YMarkTables.USER_AUTHENTICATE,YMarkTables.USER_AUTHENTICATE_MSG);
} }
if(post.containsKey("redirect") && post.get("redirect").length() > 0) {
prop.put("redirect_url", post.get("redirect"));
prop.put("redirect", "1");
}
// return rewrite properties // return rewrite properties
return prop; return prop;
} }

@ -9,15 +9,31 @@
<legend>Import Bookmarks</legend> <legend>Import Bookmarks</legend>
<dl> <dl>
<dt> <dt>
<label for="importer">Importer:</label> <label for="importer">Bookmark File Format:</label>
</dt> </dt>
<dd> <dd>
<select name="importer" id="importer"> <input type="radio" name="importer" value="html" /> Netscape HTML,
<option value="xbel">XBEL Importer</option> <small>
<option value="html">Netscape HTML Importer</option> bookmark.htm (Firefox, IE, Safari, Opera)
<option value="json">Firefox JSON Importer</option> </small>
</select> <br />
<input type="radio" name="importer" value="json" /> Firefox JSON
<br />
<input type="radio" name="importer" value="xbel" /> XBEL,
<small>
<a href="http://pyxml.sourceforge.net/topics/xbel/">
XML Bookmark Exchange Language
</a>
</small>
</dd> </dd>
<br />
<dt>
<label for="root">Target Folder:</label>
</dt>
<dd>
<input type="text" name="root" id="root" value="/Imported Bookmarks" />
</dd>
<br />
<dt> <dt>
<label for="file">File:</label> <label for="file">File:</label>
</dt> </dt>

@ -27,11 +27,9 @@
package de.anomic.data.ymark; package de.anomic.data.ymark;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.Reader;
import java.io.InputStreamReader;
import java.util.HashMap; import java.util.HashMap;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import javax.swing.text.MutableAttributeSet; import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.HTML; import javax.swing.text.html.HTML;
@ -41,40 +39,46 @@ import javax.swing.text.html.parser.ParserDelegator;
import net.yacy.kelondro.logging.Log; import net.yacy.kelondro.logging.Log;
public class YMarkHTMLImporter extends HTMLEditorKit.ParserCallback implements Runnable { public class YMarkHTMLImporter extends HTMLEditorKit.ParserCallback implements Runnable {
// Importer Variables
private final ArrayBlockingQueue<HashMap<String,String>> bookmarks;
private final Reader bmk_file;
private final String RootFolder;
private final StringBuilder folderstring;
private HashMap<String,String> bmk;
private final ParserDelegator htmlParser;
// Statics
public static enum STATE { public static enum STATE {
NOTHING, NOTHING,
BOOKMARK, BOOKMARK,
FOLDER, FOLDER,
BMK_DESC, BMK_DESC,
FOLDER_DESC FOLDER_DESC
} }
public static final String MILLIS = "000";
private static final String MILLIS = "000"; // Parser variables
private STATE state;
private STATE state;
private HTML.Tag prevTag; private HTML.Tag prevTag;
private HashMap<String,String> bmk;
private StringBuilder folder;
private final InputStream input; public YMarkHTMLImporter(final Reader bmk_file, final int queueSize, final String root) {
private final BlockingQueue<HashMap<String,String>> bookmarks; this.bookmarks = new ArrayBlockingQueue<HashMap<String,String>>(queueSize);
private final ParserDelegator htmlParser; this.bmk_file = bmk_file;
this.RootFolder = root;
public YMarkHTMLImporter(final InputStream input, int queueSize) { this.folderstring = new StringBuilder(YMarkTables.FOLDER_BUFFER_SIZE);
this.state = STATE.NOTHING; this.folderstring.append(this.RootFolder);
this.bmk = new HashMap<String,String>();
this.htmlParser = new ParserDelegator();
this.state = STATE.NOTHING;
this.prevTag = null; this.prevTag = null;
this.bmk = new HashMap<String,String>();
this.folder = new StringBuilder(YMarkTables.FOLDER_BUFFER_SIZE);
this.folder.append(YMarkTables.FOLDERS_IMPORTED);
this.bookmarks = new ArrayBlockingQueue<HashMap<String,String>>(queueSize);
this.input = input;
this.htmlParser = new ParserDelegator();
} }
public void run() { public void run() {
try { try {
this.htmlParser.parse(new InputStreamReader(this.input,"UTF-8"), this, true); this.htmlParser.parse(this.bmk_file, this, true);
} catch (IOException e) { } catch (IOException e) {
Log.logException(e); Log.logException(e);
} finally { } finally {
@ -84,7 +88,7 @@ public class YMarkHTMLImporter extends HTMLEditorKit.ParserCallback implements R
Log.logException(e); Log.logException(e);
} }
try { try {
this.input.close(); this.bmk_file.close();
} catch (IOException e) { } catch (IOException e) {
Log.logException(e); Log.logException(e);
} }
@ -97,16 +101,16 @@ public class YMarkHTMLImporter extends HTMLEditorKit.ParserCallback implements R
break; break;
case BOOKMARK: case BOOKMARK:
this.bmk.put(YMarkTables.BOOKMARK.TITLE.key(), new String(data)); this.bmk.put(YMarkTables.BOOKMARK.TITLE.key(), new String(data));
this.bmk.put(YMarkTables.BOOKMARK.FOLDERS.key(), this.folder.toString()); this.bmk.put(YMarkTables.BOOKMARK.FOLDERS.key(), this.folderstring.toString());
this.bmk.put(YMarkTables.BOOKMARK.PUBLIC.key(), YMarkTables.BOOKMARK.PUBLIC.deflt()); this.bmk.put(YMarkTables.BOOKMARK.PUBLIC.key(), YMarkTables.BOOKMARK.PUBLIC.deflt());
this.bmk.put(YMarkTables.BOOKMARK.VISITS.key(), YMarkTables.BOOKMARK.VISITS.deflt()); this.bmk.put(YMarkTables.BOOKMARK.VISITS.key(), YMarkTables.BOOKMARK.VISITS.deflt());
break; break;
case FOLDER: case FOLDER:
this.folder.append(YMarkUtil.FOLDERS_SEPARATOR); this.folderstring.append(YMarkUtil.FOLDERS_SEPARATOR);
this.folder.append(data); this.folderstring.append(data);
break; break;
case FOLDER_DESC: case FOLDER_DESC:
Log.logInfo(YMarkTables.BOOKMARKS_LOG, "YMarksHTMLImporter - folder: "+this.folder+" desc: " + new String(data)); Log.logInfo(YMarkTables.BOOKMARKS_LOG, "YMarksHTMLImporter - folder: "+this.folderstring+" desc: " + new String(data));
break; break;
case BMK_DESC: case BMK_DESC:
this.bmk.put(YMarkTables.BOOKMARK.DESC.key(), new String(data)); this.bmk.put(YMarkTables.BOOKMARK.DESC.key(), new String(data));
@ -163,8 +167,8 @@ public class YMarkHTMLImporter extends HTMLEditorKit.ParserCallback implements R
state = STATE.FOLDER_DESC; state = STATE.FOLDER_DESC;
} else if (t == HTML.Tag.DL) { } else if (t == HTML.Tag.DL) {
//TODO: get rid of .toString.equals() //TODO: get rid of .toString.equals()
if(!this.folder.toString().equals(YMarkTables.FOLDERS_IMPORTED)) { if(!this.folderstring.toString().equals(YMarkTables.FOLDERS_IMPORTED)) {
folder.setLength(folder.lastIndexOf(YMarkUtil.FOLDERS_SEPARATOR)); folderstring.setLength(folderstring.lastIndexOf(YMarkUtil.FOLDERS_SEPARATOR));
} }
} else { } else {
state = STATE.NOTHING; state = STATE.NOTHING;

@ -1,10 +1,7 @@
package de.anomic.data.ymark; package de.anomic.data.ymark;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader; import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.util.HashMap; import java.util.HashMap;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ArrayBlockingQueue;
@ -15,38 +12,48 @@ import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException; import org.json.simple.parser.ParseException;
public class YMarkJSONImporter implements Runnable, ContentHandler{ public class YMarkJSONImporter implements Runnable, ContentHandler{
public final static String FOLDER = "text/x-moz-place-container";
public final static String BOOKMARK = "text/x-moz-place";
public final static String ANNOS = "annos";
public final static String TYPE = "type";
public final static String CHILDREN = "children";
private final static String MILLIS = "000";
private final JSONParser parser; // Importer Variables
private final ArrayBlockingQueue<HashMap<String,String>> bookmarks;
private final Reader bmk_file;
private final String RootFolder;
private final StringBuilder folderstring;
private HashMap<String,String> bmk;
private final JSONParser parser;
private final Reader json; // Statics
private final StringBuilder folderstring; public final static String FOLDER = "text/x-moz-place-container";
public final static String BOOKMARK = "text/x-moz-place";
public final static String ANNOS = "annos";
public final static String TYPE = "type";
public final static String CHILDREN = "children";
public final static String MILLIS = "000";
// Parser Variables
private final StringBuilder value; private final StringBuilder value;
private final StringBuilder key; private final StringBuilder key;
private final HashMap<String,String> obj; private final HashMap<String,String> obj;
private final ArrayBlockingQueue<HashMap<String,String>> bookmarks;
private HashMap<String,String> bmk;
private int depth; private int depth;
private Boolean isFolder; private Boolean isFolder;
private Boolean isBookmark; private Boolean isBookmark;
private Boolean isAnnos; private Boolean isAnnos;
public YMarkJSONImporter(final InputStream input, int queueSize) throws UnsupportedEncodingException { public YMarkJSONImporter(final Reader bmk_file, final int queueSize, final String root) {
this.parser = new JSONParser(); this.bookmarks = new ArrayBlockingQueue<HashMap<String,String>>(queueSize);
this.bookmarks = new ArrayBlockingQueue<HashMap<String,String>>(queueSize); this.bmk_file = bmk_file;
this.json = new InputStreamReader(input, "UTF-8"); this.RootFolder = root;
this.folderstring = new StringBuilder(256); this.folderstring = new StringBuilder(YMarkTables.FOLDER_BUFFER_SIZE);
this.key = new StringBuilder(16); this.folderstring.append(this.RootFolder);
this.value = new StringBuilder(128); this.bmk = new HashMap<String,String>();
this.parser = new JSONParser();
this.value = new StringBuilder(128);
this.key = new StringBuilder(16);
this.obj = new HashMap<String,String>(); this.obj = new HashMap<String,String>();
this.bmk = new HashMap<String,String>();
this.depth = 0; this.depth = 0;
this.isAnnos = false; this.isAnnos = false;
this.isBookmark = false; this.isBookmark = false;
this.isFolder = true; this.isFolder = true;
@ -154,7 +161,7 @@ public class YMarkJSONImporter implements Runnable, ContentHandler{
public void run() { public void run() {
try { try {
Log.logInfo(YMarkTables.BOOKMARKS_LOG, "JSON Importer run()"); Log.logInfo(YMarkTables.BOOKMARKS_LOG, "JSON Importer run()");
this.parser.parse(json, this, true); this.parser.parse(this.bmk_file, this, true);
} catch (IOException e) { } catch (IOException e) {
Log.logException(e); Log.logException(e);
} catch (ParseException e) { } catch (ParseException e) {

@ -202,24 +202,26 @@ public class YMarkTables {
this.patternBuilder.append(root); this.patternBuilder.append(root);
this.patternBuilder.append(p7); this.patternBuilder.append(p7);
this.patternBuilder.append(p8); this.patternBuilder.append(p8);
final Pattern r = Pattern.compile(this.patternBuilder.toString()); final Pattern r = Pattern.compile(this.patternBuilder.toString());
final Iterator<Tables.Row> bit = this.worktables.iterator(bmk_table, YMarkTables.BOOKMARK.FOLDERS.key(), r); final Iterator<Tables.Row> bit = this.worktables.iterator(bmk_table, YMarkTables.BOOKMARK.FOLDERS.key(), r);
final TreeSet<String> folders = new TreeSet<String>(); final TreeSet<String> folders = new TreeSet<String>();
final StringBuilder path = new StringBuilder(200); final StringBuilder path = new StringBuilder(200);
Tables.Row bmk_row = null; Tables.Row bmk_row = null;
while(bit.hasNext()) { while(bit.hasNext()) {
bmk_row = bit.next(); bmk_row = bit.next();
if(bmk_row.containsKey(BOOKMARK.FOLDERS.key())) { if(bmk_row.containsKey(BOOKMARK.FOLDERS.key())) {
final String[] folderArray = (new String(bmk_row.get(BOOKMARK.FOLDERS.key()),"UTF8")).split(YMarkUtil.TAGS_SEPARATOR); final String[] folderArray = (new String(bmk_row.get(BOOKMARK.FOLDERS.key()),"UTF8")).split(YMarkUtil.TAGS_SEPARATOR);
for (final String folder : folderArray) { for (final String folder : folderArray) {
if(folder.startsWith(root)) { if(folder.substring(0, root.length()+1).equals(root+'/')) {
if(!folders.contains(folder)) { if(!folders.contains(folder)) {
path.setLength(0); path.setLength(0);
path.append(folder); path.append(folder);
//TODO: get rid of .toString.equals() //TODO: get rid of .toString.equals()
while(path.length() > 0 && !path.toString().equals(root)){ while(path.length() > 0 && !path.toString().equals(root)){
folders.add(path.toString()); folders.add(path.toString());
path.setLength(path.lastIndexOf(YMarkUtil.FOLDERS_SEPARATOR)); path.setLength(path.lastIndexOf(YMarkUtil.FOLDERS_SEPARATOR));
} }
} }
} }

@ -27,7 +27,7 @@
package de.anomic.data.ymark; package de.anomic.data.ymark;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.Reader;
import java.text.ParseException; import java.text.ParseException;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -45,7 +45,16 @@ import org.xml.sax.helpers.XMLReaderFactory;
public class YMarkXBELImporter extends DefaultHandler implements Runnable { public class YMarkXBELImporter extends DefaultHandler implements Runnable {
public static enum XBEL { // Importer Variables
private final ArrayBlockingQueue<HashMap<String,String>> bookmarks;
private final Reader bmk_file;
private final String RootFolder;
private final StringBuilder folderstring;
private HashMap<String,String> bmk;
private final XMLReader xmlReader;
// Statics
public static enum XBEL {
NOTHING (""), NOTHING (""),
XBEL ("<xbel"), XBEL ("<xbel"),
TITLE ("<title"), TITLE ("<title"),
@ -86,47 +95,41 @@ public class YMarkXBELImporter extends DefaultHandler implements Runnable {
} }
} }
private HashMap<String,String> ref; // Parser Variables
private HashMap<String,String> bmk;
private XBEL outer_state; // BOOKMARK, FOLDER, NOTHING
private XBEL inner_state; // DESC, TITLE, INFO, ALIAS, (METADATA), NOTHING
private boolean parse_value;
private final HashMap<String,HashMap<String,String>> bmkRef; private final HashMap<String,HashMap<String,String>> bmkRef;
private final HashSet<HashMap<String,String>> aliasRef; private final HashSet<HashMap<String,String>> aliasRef;
private final StringBuilder buffer; private final StringBuilder buffer;
private final StringBuilder folder; private final StringBuilder folder;
private final StringBuilder foldersString;
private final InputSource input; private HashMap<String,String> ref;
private final ArrayBlockingQueue<HashMap<String,String>> bookmarks; private XBEL outer_state; // BOOKMARK, FOLDER, NOTHING
private final XMLReader xmlReader; private XBEL inner_state; // DESC, TITLE, INFO, ALIAS, (METADATA), NOTHING
private final String RootFolder; private boolean parse_value;
public YMarkXBELImporter (final InputStream input, int queueSize, String root) throws SAXException { public YMarkXBELImporter (final Reader bmk_file, final int queueSize, final String root) throws SAXException {
this.bmk = null; this.bookmarks = new ArrayBlockingQueue<HashMap<String,String>>(queueSize);
this.RootFolder = root; this.bmk_file = bmk_file;
this.RootFolder = root;
this.buffer = new StringBuilder(); this.folderstring = new StringBuilder(YMarkTables.FOLDER_BUFFER_SIZE);
this.foldersString = new StringBuilder(YMarkTables.FOLDER_BUFFER_SIZE); this.folderstring.append(this.RootFolder);
this.folder = new StringBuilder(YMarkTables.FOLDER_BUFFER_SIZE); this.bmk = new HashMap<String,String>();
this.folder.append(this.RootFolder); this.xmlReader = XMLReaderFactory.createXMLReader();
this.input = new InputSource(input);
this.bmkRef = new HashMap<String,HashMap<String,String>>();
this.aliasRef = new HashSet<HashMap<String,String>>();
this.bookmarks = new ArrayBlockingQueue<HashMap<String,String>>(queueSize);
this.xmlReader = XMLReaderFactory.createXMLReader();
this.xmlReader.setContentHandler(this); this.xmlReader.setContentHandler(this);
this.xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", false); this.xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
this.xmlReader.setFeature("http://xml.org/sax/features/namespaces", false); this.xmlReader.setFeature("http://xml.org/sax/features/namespaces", false);
this.xmlReader.setFeature("http://xml.org/sax/features/validation", false); this.xmlReader.setFeature("http://xml.org/sax/features/validation", false);
this.bmkRef = new HashMap<String,HashMap<String,String>>();
this.aliasRef = new HashSet<HashMap<String,String>>();
this.buffer = new StringBuilder();
this.folder = new StringBuilder(YMarkTables.FOLDER_BUFFER_SIZE);
this.folder.append(this.RootFolder);
} }
public void run() { public void run() {
try { try {
this.xmlReader.parse(this.input); this.xmlReader.parse(new InputSource(this.bmk_file));
} catch (SAXParseException e) { } catch (SAXParseException e) {
Log.logException(e); Log.logException(e);
} catch (SAXException e) { } catch (SAXException e) {
@ -295,19 +298,19 @@ public class YMarkXBELImporter extends DefaultHandler implements Runnable {
} }
private void UpdateBmkRef(final String id, final boolean url) { private void UpdateBmkRef(final String id, final boolean url) {
this.foldersString.setLength(0); this.folderstring.setLength(0);
if(this.bmkRef.containsKey(id)) { if(this.bmkRef.containsKey(id)) {
this.foldersString.append(this.bmkRef.get(id).get(YMarkTables.BOOKMARK.FOLDERS.key())); this.folderstring.append(this.bmkRef.get(id).get(YMarkTables.BOOKMARK.FOLDERS.key()));
this.foldersString.append(','); this.folderstring.append(',');
this.ref = this.bmkRef.get(id); this.ref = this.bmkRef.get(id);
} else { } else {
this.ref = new HashMap<String,String>(); this.ref = new HashMap<String,String>();
} }
this.foldersString.append(this.folder); this.folderstring.append(this.folder);
if(url) if(url)
this.ref.put(YMarkTables.BOOKMARK.URL.key(), this.bmk.get(YMarkTables.BOOKMARK.URL.key())); this.ref.put(YMarkTables.BOOKMARK.URL.key(), this.bmk.get(YMarkTables.BOOKMARK.URL.key()));
this.ref.put(YMarkTables.BOOKMARK.FOLDERS.key(), this.foldersString.toString()); this.ref.put(YMarkTables.BOOKMARK.FOLDERS.key(), this.folderstring.toString());
this.bmkRef.put(id, ref); this.bmkRef.put(id, ref);
} }
} }

Loading…
Cancel
Save