- general improvements on importers, especially on auto tagging - added get_tags (needed for tag clouds etc.) - improved flexigrid support - added YMarks.html (not fully working) that will eventually replace Bookmarks.html git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7691 6c8d7289-2bf4-0310-a012-ef5d649a1542pull/1/head
parent
e3d19d0a90
commit
e7c2ea193b
@ -0,0 +1,205 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>YaCy '#[user]#''s Bookmarks</title>
|
||||
#%env/templates/metas.template%#
|
||||
<link media="screen" type="text/css" href="yacy/ui/css/base.css" rel="stylesheet" />
|
||||
<link media="screen" type="text/css" href="/yacy/ui/css/jquery.flexigrid.css" rel="stylesheet" />
|
||||
</head>
|
||||
<body id="ymarks_body">
|
||||
#%env/templates/header.template%#
|
||||
<script src="/yacy/ui/js/jquery-flexigrid.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
HTMLenc = function(s) {
|
||||
return $('<div/>').text(s).html();
|
||||
}
|
||||
$(document).ready(function() {
|
||||
var height=document.documentElement.clientHeight - 180;
|
||||
$('#ymarks').flexigrid({
|
||||
url: '/api/ymarks/get_ymark.json',
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
colModel: [
|
||||
{display: 'Hash', name : 'hash', width : 50, sortable : false, align: 'center', hide: true},
|
||||
{display: 'Public', name : 'public', width : 25, sortable : true, align: 'center'},
|
||||
{display: 'Title', name : 'title', width : 400, sortable : true, align: 'left'},
|
||||
{display: 'Tags', name : 'tags', width : 160, sortable : false, align: 'left'},
|
||||
{display: 'Folders', name : 'folders', width : 160, sortable : false, align: 'left', hide: false},
|
||||
{display: 'Date', name : 'date', width : 100, sortable : true, align: 'left'}
|
||||
],
|
||||
buttons: [
|
||||
{name: 'Add', bclass: 'bookmark', onpress: bm_action},
|
||||
{name: 'Crawl', bclass: 'crawl', onpress: bm_action},
|
||||
{name: 'Edit', bclass: 'edit', onpress: bm_action},
|
||||
{name: 'Delete', bclass: 'delete', onpress: bm_action},
|
||||
{separator: true},
|
||||
{name: 'RSS', bclass: 'rss', onpress: bm_action},
|
||||
{name: 'XBEL', bclass: 'xml', onpress: bm_action},
|
||||
{name: 'XML', bclass: 'xml', onpress: bm_action},
|
||||
{separator: true},
|
||||
{name: 'Add', bclass: 'addTag', onpress: tag_action},
|
||||
{name: 'Rename', bclass: 'editTag', onpress: tag_action},
|
||||
{separator: true},
|
||||
{name: 'Help', bclass: 'help', onpress: bm_action},
|
||||
],
|
||||
searchitems : [
|
||||
{display: 'Tags', name : 'tags'},
|
||||
{display: 'Folders', name : 'folders'},
|
||||
{display: 'Title', name : 'title'},
|
||||
],
|
||||
useRp: true,
|
||||
rp: 15,
|
||||
sortname: "title",
|
||||
sortorder: "asc",
|
||||
usepager: true,
|
||||
striped: true,
|
||||
nowrap: false,
|
||||
height: height,
|
||||
query: ".*",
|
||||
qtype: "title"
|
||||
});
|
||||
|
||||
/* Init Sidebar_1 */
|
||||
$("#side1").accordion({
|
||||
autoHeight: false,
|
||||
clearStyle: true,
|
||||
header: "h3"
|
||||
});
|
||||
loadTagCloud();
|
||||
$("#side1").accordion("activate", 0);
|
||||
});
|
||||
|
||||
function loadTagCloud() {
|
||||
$("#tagcloud *").remove();
|
||||
$("#sidebar-2-1").toggleClass("ui.loading");
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/api/ymarks/get_tags.xml?top=25&sort=alpha",
|
||||
dataType: "xml",
|
||||
cache: false,
|
||||
success: function(xml) {
|
||||
$(xml).find('tag').each(function(){
|
||||
var count = $(this).attr('count');
|
||||
var tag = $(this).attr('tag');
|
||||
var size = ((count/20)+0.3);
|
||||
if (size < 1) {size = 1;}
|
||||
$('<a style="font-size:'+size+'em"></a>')
|
||||
.html(HTMLenc(tag)+' ')
|
||||
.appendTo('#tagcloud')
|
||||
}); //close each(
|
||||
$("#sidebar-1-1").toggleClass("ui.loading");
|
||||
}
|
||||
}); //close $.ajax(
|
||||
};
|
||||
|
||||
function bm_action(com,grid) {
|
||||
if (com=='XBEL') {
|
||||
var qtype = "tags";
|
||||
if (qtag.startsWith("/")) qtype = "folders";
|
||||
window.document.location.href = '/api/bookmarks/get_bookmarks.xml?display=xbel&qtype='+qtype+'&query='+qtag;
|
||||
}
|
||||
else if (com=='RSS') {
|
||||
window.document.location.href = '/Bookmarks.rss?qtype=tags&query='+qtag;
|
||||
}
|
||||
else if (com=='XML') {
|
||||
window.document.location.href = '/api/bookmarks/get_bookmarks.xml?tag='+qtag;
|
||||
}
|
||||
else if (com=='Delete') {
|
||||
var check = confirm('Delete ' + $('.trSelected',grid).length + ' bookmark(s)?');
|
||||
if(check == true) {
|
||||
$('.trSelected',grid).each(function(){
|
||||
var url = "/api/bookmarks/posts/delete_p.xml?login=&urlhash="+$(this).find('td :first').text();
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: url,
|
||||
dataType: 'xml'
|
||||
}); // close $.ajax(
|
||||
}); //close each(
|
||||
loadTagCloud();
|
||||
reloadBM();
|
||||
}
|
||||
}
|
||||
else if (com=='Add') {
|
||||
$('#bmaddform').resetForm();
|
||||
$("#bm_url").blur(function() {
|
||||
var url = $("input[name='bm_url']").getValue();
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: "/api/util/getpageinfo_p.xml?url="+url,
|
||||
dataType: "xml",
|
||||
success: function(xml) {
|
||||
var title = $(xml).find('title').text();
|
||||
$("input[name='bm_title']").setValue(title);
|
||||
var desc = $(xml).find('desc').text();
|
||||
$("textarea[name='bm_desc']").setValue(desc);
|
||||
tags = "";
|
||||
$(xml).find('tag').each(function(){
|
||||
tags = tags + "," + $(this).attr('name');
|
||||
});
|
||||
$("input[name='bm_tags']").setValue(tags);
|
||||
}
|
||||
});
|
||||
});
|
||||
$("#bmadd").dialog('open');
|
||||
}
|
||||
else if (com=='Edit') {
|
||||
if ($('.trSelected',grid).length > 1) {
|
||||
alert("Edit of more than one selected bookmark is currently not supportet!");
|
||||
return false;
|
||||
}
|
||||
$("input[name='bm_url']").setValue($('.trSelected',grid).find('.url').text());
|
||||
$("input[name='bm_title']").setValue($('.trSelected',grid).find('h3.linktitle').text().trim());
|
||||
$("textarea[name='bm_desc']").setValue($('.trSelected',grid).find('p.desc').text().trim());
|
||||
$("input[name='bm_tags']").setValue($('.trSelected',grid).find('p.tags').text().trim().replace(/,\s/g,","));
|
||||
$("input[name='bm_path']").setValue($('.trSelected',grid).find('p.folders').text().replace(/,\s/g,","));
|
||||
$("select[name='bm_public']").setValue($('.trSelected',grid).find('img').attr('alt'));
|
||||
$("#bmadd").dialog('open');
|
||||
}
|
||||
}
|
||||
function tag_action(com,grid) {
|
||||
if (com=='Add') {
|
||||
flex = grid;
|
||||
$('#tagaddform').resetForm();
|
||||
$("#tagadd").dialog('open');
|
||||
} else {
|
||||
$('#tageditform').resetForm();
|
||||
$("#tagedit").dialog('open');
|
||||
}
|
||||
};
|
||||
//]]>
|
||||
</script>
|
||||
<div class="SubMenu">
|
||||
<h3>Bookmarks</h3>
|
||||
<!-- SubMenu -->
|
||||
<ul class="SubMenu">
|
||||
#(login)#<li><a href="YMarks.html" class="MenuItemLink">Login</a></li>::#(/login)#
|
||||
<li><a href="/api/ymarks/test_treeview.html" class="MenuItemLink lock">TreeView</a></li>
|
||||
<li><a href="/api/ymarks/test_import.html" class="MenuItemLink lock">Import Bookmarks</a></li>
|
||||
<li><a href="/api/ymarks/get_xbel.xml" class="MenuItemLink lock">Bookmarks (XBEL)</a></li>
|
||||
</ul>
|
||||
<p/>
|
||||
</div>
|
||||
<div id="sidebar" class="sidebar" style="float: right;">
|
||||
<div id="side1">
|
||||
<h3 id="sidebar-1-1"><a href="#">Bookmark TagCloud</a></h3>
|
||||
<div>
|
||||
<p id="tagcloud"></p>
|
||||
</div>
|
||||
<h3 id="sidebar-1-2"><a href="#">Test</a></h3>
|
||||
<div>
|
||||
<p id="test">texttext</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="side2"></div>
|
||||
</div>
|
||||
<!-- Display Bookmarks Table -->
|
||||
<div style="margin-top: 25px;">
|
||||
<table id="ymarks" summary="YaCy Bookmarks">
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
#%env/templates/footer.template%#
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,27 @@
|
||||
import net.yacy.cora.protocol.RequestHeader;
|
||||
import de.anomic.data.UserDB;
|
||||
import de.anomic.data.ymark.YMarkTables;
|
||||
import de.anomic.search.Switchboard;
|
||||
import de.anomic.server.serverObjects;
|
||||
import de.anomic.server.serverSwitch;
|
||||
|
||||
public class YMarks {
|
||||
public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env) {
|
||||
final Switchboard sb = (Switchboard) env;
|
||||
final serverObjects prop = new serverObjects();
|
||||
final UserDB.Entry user = sb.userDB.getUser(header);
|
||||
final boolean isAdmin = (sb.verifyAuthentication(header, true));
|
||||
final boolean isAuthUser = user!= null && user.hasRight(UserDB.AccessRight.BOOKMARK_RIGHT);
|
||||
|
||||
if(isAdmin || isAuthUser) {
|
||||
prop.put("login", 1);
|
||||
String bmk_user = (isAuthUser ? user.getUserName() : YMarkTables.USER_ADMIN);
|
||||
prop.putHTML("user", bmk_user.substring(0,1).toUpperCase() + bmk_user.substring(1));
|
||||
|
||||
} else {
|
||||
prop.put("login", 0);
|
||||
}
|
||||
|
||||
return prop;
|
||||
}
|
||||
}
|
@ -0,0 +1,104 @@
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.CollationKey;
|
||||
import java.text.Collator;
|
||||
import java.util.Iterator;
|
||||
import java.util.TreeMap;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import net.yacy.cora.protocol.RequestHeader;
|
||||
import de.anomic.data.UserDB;
|
||||
import de.anomic.data.ymark.YMarkEntry;
|
||||
import de.anomic.data.ymark.YMarkTables;
|
||||
import de.anomic.data.ymark.YMarkTag;
|
||||
import de.anomic.data.ymark.YMarkUtil;
|
||||
import de.anomic.search.Switchboard;
|
||||
import de.anomic.server.serverObjects;
|
||||
import de.anomic.server.serverSwitch;
|
||||
|
||||
public class get_tags {
|
||||
|
||||
final static String TAG = "tag";
|
||||
final static String TOP = "top";
|
||||
final static String SORT = "sort";
|
||||
final static String SIZE = "size";
|
||||
final static String ALPHA = "alpha";
|
||||
|
||||
|
||||
private static Switchboard sb = null;
|
||||
private static serverObjects prop = null;
|
||||
|
||||
public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env) {
|
||||
sb = (Switchboard) env;
|
||||
prop = new serverObjects();
|
||||
|
||||
final UserDB.Entry user = sb.userDB.getUser(header);
|
||||
final boolean isAdmin = (sb.verifyAuthentication(header, true));
|
||||
final boolean isAuthUser = user!= null && user.hasRight(UserDB.AccessRight.BOOKMARK_RIGHT);
|
||||
|
||||
if(isAdmin || isAuthUser) {
|
||||
final String bmk_user = (isAuthUser ? user.getUserName() : YMarkTables.USER_ADMIN);
|
||||
Integer top = Integer.MAX_VALUE;
|
||||
Boolean sortAlpha = true;
|
||||
Iterator<YMarkTag> tit = null;
|
||||
TreeSet<YMarkTag> tags = null;
|
||||
int count = 0;
|
||||
YMarkTag t;
|
||||
|
||||
if (post != null && post.containsKey(TAG)) {
|
||||
if (!post.get(TAG).isEmpty()) {
|
||||
final String[] tagArray = YMarkUtil.cleanTagsString(post.get(TAG)).split(YMarkUtil.TAGS_SEPARATOR);
|
||||
try {
|
||||
tags = new TreeSet<YMarkTag>(sb.tables.bookmarks.getTags(sb.tables.bookmarks.getBookmarksByTag(bmk_user, tagArray)).values());
|
||||
} catch (IOException e) {
|
||||
return prop;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
tags = new TreeSet<YMarkTag>(sb.tables.bookmarks.getTags(bmk_user).values());
|
||||
} catch (IOException e) {
|
||||
return prop;
|
||||
}
|
||||
}
|
||||
|
||||
if (post != null && post.containsKey(TOP)) {
|
||||
top = post.getInt(TOP, Integer.MAX_VALUE);
|
||||
}
|
||||
|
||||
if (post != null && post.containsKey(SORT)) {
|
||||
if (SIZE.equals(post.get(SORT))) {
|
||||
sortAlpha = false;
|
||||
}
|
||||
}
|
||||
|
||||
if(sortAlpha) {
|
||||
final TreeMap<CollationKey, YMarkTag> sort = new TreeMap<CollationKey, YMarkTag>();
|
||||
final Collator collator = Collator.getInstance();
|
||||
collator.setStrength(Collator.SECONDARY);
|
||||
tit = tags.iterator();
|
||||
while(tit.hasNext() && count < top) {
|
||||
t = tit.next();
|
||||
sort.put(collator.getCollationKey(t.name()), t);
|
||||
count++;
|
||||
}
|
||||
tit = sort.values().iterator();
|
||||
} else {
|
||||
tit = tags.iterator();
|
||||
}
|
||||
|
||||
count = 0;
|
||||
while (tit.hasNext() && count < top) {
|
||||
t = tit.next();
|
||||
if(!t.name().equals(YMarkEntry.BOOKMARK.TAGS.deflt())) {
|
||||
prop.putXML("tags_" + count + "_name", t.name());
|
||||
prop.put("tags_" + count + "_count", t.size());
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
prop.put("tags", count);
|
||||
}
|
||||
return prop;
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
<?xml version='1.0' encoding="UTF-8" standalone='yes'?>
|
||||
<tags>
|
||||
#{tags}#<tag count="#[count]#" tag="#[name]#"/>
|
||||
#{/tags}#
|
||||
</tags>
|
@ -0,0 +1,192 @@
|
||||
package de.anomic.data.ymark;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import java.util.TreeSet;
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
|
||||
import net.yacy.cora.document.UTF8;
|
||||
import net.yacy.document.Condenser;
|
||||
import net.yacy.document.Document;
|
||||
import net.yacy.document.LibraryProvider;
|
||||
import net.yacy.document.WordTokenizer;
|
||||
import net.yacy.document.Parser.Failure;
|
||||
import net.yacy.kelondro.data.meta.DigestURI;
|
||||
import net.yacy.kelondro.data.word.Word;
|
||||
import net.yacy.kelondro.index.RowSpaceExceededException;
|
||||
import net.yacy.kelondro.logging.Log;
|
||||
import net.yacy.repository.LoaderDispatcher;
|
||||
import de.anomic.crawler.CrawlProfile;
|
||||
import de.anomic.crawler.retrieval.Response;
|
||||
|
||||
public class YMarkAutoTagger implements Runnable, Thread.UncaughtExceptionHandler {
|
||||
|
||||
public final static String SPACE = " ";
|
||||
public final static String POISON = "";
|
||||
|
||||
private final ArrayBlockingQueue<String> bmkQueue;
|
||||
private final YMarkTables ymarks;
|
||||
private final String bmk_user;
|
||||
private final LoaderDispatcher loader;
|
||||
|
||||
private boolean merge;
|
||||
|
||||
public YMarkAutoTagger(final ArrayBlockingQueue<String> bmkQueue, final LoaderDispatcher loader, final YMarkTables ymarks, final String bmk_user, final boolean merge) {
|
||||
this.bmkQueue = bmkQueue;
|
||||
this.ymarks = ymarks;
|
||||
this.bmk_user = bmk_user;
|
||||
this.loader = loader;
|
||||
this.merge = merge;
|
||||
}
|
||||
|
||||
public YMarkAutoTagger(final LoaderDispatcher loader, final YMarkTables ymarks, final String bmk_user) {
|
||||
this.bmkQueue = new ArrayBlockingQueue<String>(1);
|
||||
this.ymarks = ymarks;
|
||||
this.bmk_user = bmk_user;
|
||||
this.loader = loader;
|
||||
this.merge = true;
|
||||
}
|
||||
|
||||
private Document loadDocument(final String url) {
|
||||
DigestURI uri;
|
||||
Response response;
|
||||
try {
|
||||
uri = new DigestURI(url);
|
||||
} catch (MalformedURLException e) {
|
||||
Log.logWarning(YMarkTables.BOOKMARKS_LOG, "loadDocument failed due to malformed url: "+url);
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
response = loader.load(loader.request(uri, true, false), CrawlProfile.CacheStrategy.IFEXIST, Long.MAX_VALUE, true);
|
||||
} catch (IOException e) {
|
||||
Log.logWarning(YMarkTables.BOOKMARKS_LOG, "loadDocument failed due to IOException for url: "+url);
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return Document.mergeDocuments(response.url(), response.getMimeType(), response.parse());
|
||||
} catch (Failure e) {
|
||||
Log.logWarning(YMarkTables.BOOKMARKS_LOG, "loadDocument failed due to a parser failure for url: "+url);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String autoTag(final String url, final int max, final TreeMap<String, YMarkTag> tags) {
|
||||
final Document document = loadDocument(url);
|
||||
final TreeSet<YMarkTag> topwords = new TreeSet<YMarkTag>();
|
||||
// final TreeMap<String, YMarkTag> pairs = new TreeMap<String, YMarkTag>();
|
||||
|
||||
String token;
|
||||
// StringBuilder pair = new StringBuilder(64);
|
||||
|
||||
if(document != null) {
|
||||
//get words from document
|
||||
final Map<String, Word> words = new Condenser(document, true, true, LibraryProvider.dymLib).words();
|
||||
|
||||
// generate potential tags from document title, description and subject
|
||||
final int bufferSize = document.dc_title().length() + document.dc_description().length() + document.dc_subject(' ').length() + 32;
|
||||
final StringBuilder buffer = new StringBuilder(bufferSize);
|
||||
buffer.append(document.dc_title());
|
||||
buffer.append(document.dc_description());
|
||||
buffer.append(document.dc_subject(' '));
|
||||
final Enumeration<String> tokens = new WordTokenizer(new ByteArrayInputStream(UTF8.getBytes(buffer.toString())), LibraryProvider.dymLib);
|
||||
|
||||
int count = 0;
|
||||
|
||||
// loop through potential tag and rank them
|
||||
while(tokens.hasMoreElements()) {
|
||||
count = 0;
|
||||
token = tokens.nextElement();
|
||||
|
||||
/*
|
||||
pair.delete(0, pair.indexOf(SPACE)+1);
|
||||
if(pair.length() > 1)
|
||||
pair.append(SPACE);
|
||||
pair.append(token);
|
||||
|
||||
if(pair.indexOf(SPACE) > 1 && pairs.containsKey(pair.toString())) {
|
||||
pairs.get(pair.toString()).inc();
|
||||
} else {
|
||||
pairs.put(pair.toString(), new YMarkTag(pair.toString()));
|
||||
}
|
||||
*/
|
||||
|
||||
// check if the token appears in the text
|
||||
if (words.containsKey(token)) {
|
||||
Word word = words.get(token);
|
||||
// token appears in text and matches an existing bookmark tag
|
||||
if (tags.containsKey(token)) {
|
||||
count = word.occurrences() * tags.get(token).size() * 100;
|
||||
}
|
||||
// token appears in text and has more than 3 characters
|
||||
if (token.length()>3) {
|
||||
count = word.occurrences() * 100;
|
||||
}
|
||||
topwords.add(new YMarkTag(token, count));
|
||||
}
|
||||
}
|
||||
count = 0;
|
||||
buffer.setLength(0);
|
||||
for(YMarkTag tag : topwords) {
|
||||
if(count < max) {
|
||||
if(tag.size() > 100) {
|
||||
buffer.append(tag.name());
|
||||
buffer.append(YMarkUtil.TAGS_SEPARATOR);
|
||||
count++;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
String clean = YMarkUtil.cleanTagsString(buffer.toString());
|
||||
return clean;
|
||||
}
|
||||
return new String();
|
||||
}
|
||||
|
||||
public void run() {
|
||||
Log.logInfo(YMarkTables.BOOKMARKS_LOG, "autoTagger run()");
|
||||
Thread.currentThread().setUncaughtExceptionHandler(this);
|
||||
String url = null;
|
||||
String tagString;
|
||||
Iterator<String> tit;
|
||||
try {
|
||||
final TreeMap<String, YMarkTag> tags = this.ymarks.getTags(bmk_user);
|
||||
Log.logInfo(YMarkTables.BOOKMARKS_LOG, "autoTagger queue size: "+bmkQueue.size());
|
||||
while((url = bmkQueue.take()) != POISON) {
|
||||
tagString = this.autoTag(url, 5, tags);
|
||||
|
||||
// update tags
|
||||
this.ymarks.addTags(this.bmk_user, url, tagString, this.merge);
|
||||
|
||||
// update tags
|
||||
tit = YMarkUtil.keysStringToSet(tagString).iterator();
|
||||
while(tit.hasNext()) {
|
||||
final String tag = tit.next();
|
||||
if(tags.containsKey(tag)) {
|
||||
tags.get(tag).inc();
|
||||
} else {
|
||||
tags.put(tag, new YMarkTag(tag));
|
||||
}
|
||||
}
|
||||
}
|
||||
Log.logInfo(YMarkTables.BOOKMARKS_LOG, "autoTagger has been poisoned");
|
||||
} catch (InterruptedException e) {
|
||||
Log.logException(e);
|
||||
} catch (IOException e) {
|
||||
Log.logWarning(YMarkTables.BOOKMARKS_LOG.toString(), "autoTagger - IOException for URL: "+url);
|
||||
} catch (RowSpaceExceededException e) {
|
||||
Log.logException(e);
|
||||
} finally {
|
||||
}
|
||||
}
|
||||
|
||||
public void uncaughtException(Thread t, Throwable e) {
|
||||
Log.logWarning(YMarkTables.BOOKMARKS_LOG, "I caught an uncaughtException in thread "+t.getName());
|
||||
Log.logException(e);
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package de.anomic.data.ymark;
|
||||
|
||||
public class YMarkTag implements Comparable<YMarkTag>{
|
||||
private String name;
|
||||
private int size;
|
||||
|
||||
public YMarkTag(final String tag) {
|
||||
this.name = tag.toLowerCase();
|
||||
this.size = 1;
|
||||
}
|
||||
|
||||
public YMarkTag(final String tag, final int size) {
|
||||
this.name = tag.toLowerCase();
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
public int inc() {
|
||||
return this.size++;
|
||||
}
|
||||
|
||||
public int dec() {
|
||||
if(this.size > 0)
|
||||
this.size--;
|
||||
return this.size;
|
||||
}
|
||||
|
||||
public String name() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public int size() {
|
||||
return this.size;
|
||||
}
|
||||
|
||||
public int compareTo(YMarkTag tag) {
|
||||
if(this.name.equals(tag.name()))
|
||||
return 0;
|
||||
if(tag.size() < this.size)
|
||||
return -1;
|
||||
else if(tag.size() > this.size)
|
||||
return 1;
|
||||
else
|
||||
return this.name.compareTo(tag.name());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in new issue