commit
46be4af5b9
@ -0,0 +1,163 @@
|
||||
package net.yacy.contentcontrol;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
|
||||
import net.yacy.kelondro.logging.Log;
|
||||
|
||||
import org.json.simple.parser.ContentHandler;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
public class SMWListImporter implements Runnable, ContentHandler{
|
||||
|
||||
// Importer Variables
|
||||
private final ArrayBlockingQueue<SMWListRow> listEntries;
|
||||
private final Reader importFile;
|
||||
|
||||
private SMWListRow row;
|
||||
private final JSONParser parser;
|
||||
|
||||
// Parser Variables
|
||||
private final StringBuilder value;
|
||||
private final StringBuilder key;
|
||||
private final HashMap<String,String> obj;
|
||||
|
||||
private Boolean isElement;
|
||||
|
||||
public SMWListImporter(final Reader importFile, final int queueSize) {
|
||||
this.listEntries = new ArrayBlockingQueue<SMWListRow>(queueSize);
|
||||
this.importFile = importFile;
|
||||
|
||||
this.row = new SMWListRow();
|
||||
|
||||
this.parser = new JSONParser();
|
||||
|
||||
this.value = new StringBuilder(128);
|
||||
this.key = new StringBuilder(16);
|
||||
this.obj = new HashMap<String,String>();
|
||||
|
||||
this.isElement = false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startJSON() throws ParseException, IOException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endJSON() throws ParseException, IOException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startArray() throws ParseException, IOException {
|
||||
final String key = this.key.toString();
|
||||
|
||||
if (key.equals("items")) {
|
||||
|
||||
this.isElement = true;
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean endArray() throws ParseException, IOException {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startObject() throws ParseException, IOException {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean endObject() throws ParseException, IOException {
|
||||
|
||||
if(this.isElement) {
|
||||
|
||||
for (Entry<String, String> e: this.obj.entrySet()) {
|
||||
this.row.add (e.getKey(), e.getValue());
|
||||
}
|
||||
try {
|
||||
this.listEntries.put(this.row);
|
||||
//this.count++;
|
||||
} catch (InterruptedException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
this.obj.clear();
|
||||
this.row = new SMWListRow();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startObjectEntry(String key) throws ParseException, IOException {
|
||||
this.key.setLength(0);
|
||||
this.key.append(key);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean primitive(Object value) throws ParseException, IOException {
|
||||
|
||||
this.value.setLength(0);
|
||||
if(value instanceof java.lang.String) {
|
||||
this.value.append((String)value);
|
||||
} else if(value instanceof java.lang.Boolean) {
|
||||
this.value.append(value);
|
||||
} else if(value instanceof java.lang.Number) {
|
||||
this.value.append(value);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean endObjectEntry() throws ParseException, IOException {
|
||||
|
||||
final String key = this.key.toString();
|
||||
final String value = this.value.toString();
|
||||
|
||||
this.obj.put(key, value);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Log.logInfo("SMWLISTSYNC", "Importer run()");
|
||||
this.parser.parse(this.importFile, this, true);
|
||||
|
||||
} catch (IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (ParseException e) {
|
||||
Log.logException(e);
|
||||
} finally {
|
||||
|
||||
try {
|
||||
Log.logInfo("SMWLISTSYNC", "Importer inserted poison pill in queue");
|
||||
this.listEntries.put(SMWListRow.POISON);
|
||||
} catch (InterruptedException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public SMWListRow take() {
|
||||
try {
|
||||
return this.listEntries.take();
|
||||
} catch (InterruptedException e) {
|
||||
Log.logException(e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,117 @@
|
||||
package net.yacy.contentcontrol;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.util.Iterator;
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
|
||||
import net.yacy.kelondro.logging.Log;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
public class SMWListImporterFormatObsolete implements Runnable{
|
||||
|
||||
private final ArrayBlockingQueue<SMWListRow> listEntries;
|
||||
private final Reader importFile;
|
||||
private final JSONParser parser;
|
||||
|
||||
public SMWListImporterFormatObsolete(final Reader importFile, final int queueSize) {
|
||||
this.listEntries = new ArrayBlockingQueue<SMWListRow>(queueSize);
|
||||
this.importFile = importFile;
|
||||
this.parser = new JSONParser();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Log.logInfo("SMWLISTSYNC", "Importer run()");
|
||||
Object obj = this.parser.parse(this.importFile);
|
||||
|
||||
JSONObject jsonObject = (JSONObject) obj;
|
||||
|
||||
JSONArray items = (JSONArray) jsonObject.get("items");
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<JSONObject> iterator = items.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
this.parseItem (iterator.next());
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (ParseException e) {
|
||||
Log.logException(e);
|
||||
} finally {
|
||||
|
||||
try {
|
||||
Log.logInfo("SMWLISTSYNC", "Importer inserted poison pill in queue");
|
||||
this.listEntries.put(SMWListRow.POISON);
|
||||
} catch (InterruptedException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void parseItem(JSONObject jsonObject) {
|
||||
|
||||
try {
|
||||
SMWListRow row = new SMWListRow();
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<String> iterator = jsonObject.keySet().iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
String entryKey = iterator.next();
|
||||
|
||||
Object value = jsonObject.get (entryKey);
|
||||
String valueKey = "";
|
||||
|
||||
if (value instanceof java.lang.String) {
|
||||
valueKey = value.toString();
|
||||
} else if (value instanceof JSONArray) {
|
||||
valueKey = jsonListAll ((JSONArray) value);
|
||||
}
|
||||
|
||||
row.add (entryKey, valueKey);
|
||||
}
|
||||
|
||||
this.listEntries.put(row);
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.logInfo("SMWLISTSYNC", "import of entry failed");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private String jsonListAll(JSONArray value) {
|
||||
String res = "";
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<Object> iterator = value.listIterator();
|
||||
while (iterator.hasNext()) {
|
||||
Object val = iterator.next();
|
||||
res += val.toString()+",";
|
||||
}
|
||||
|
||||
if (res.endsWith (",")) {
|
||||
res = res.substring (0, res.length()-1);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
public SMWListRow take() {
|
||||
try {
|
||||
return this.listEntries.take();
|
||||
} catch (InterruptedException e) {
|
||||
Log.logException(e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package net.yacy.contentcontrol;
|
||||
|
||||
import net.yacy.kelondro.blob.Tables;
|
||||
|
||||
public class SMWListRow {
|
||||
|
||||
private Tables.Data data;
|
||||
|
||||
public static final SMWListRow POISON = new SMWListRow();
|
||||
public static final SMWListRow EMPTY = new SMWListRow();
|
||||
|
||||
public SMWListRow() {
|
||||
this.data = new Tables.Data();
|
||||
}
|
||||
|
||||
public void add (String key, String value) {
|
||||
this.data.put(key, value);
|
||||
}
|
||||
|
||||
public Tables.Data getData() {
|
||||
return this.data;
|
||||
}
|
||||
|
||||
}
|
@ -1,212 +0,0 @@
|
||||
package net.yacy.data.ymark;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
|
||||
import net.yacy.kelondro.logging.Log;
|
||||
import net.yacy.search.Switchboard;
|
||||
|
||||
import org.json.simple.parser.ContentHandler;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
public class YMarkSMWJSONImporter implements Runnable, ContentHandler{
|
||||
|
||||
// Importer Variables
|
||||
private final ArrayBlockingQueue<YMarkEntry> bookmarks;
|
||||
private final Reader bmk_file;
|
||||
private final String RootFolder;
|
||||
private final StringBuilder folderstring;
|
||||
private YMarkEntry bmk;
|
||||
private final JSONParser parser;
|
||||
|
||||
//private boolean empty = true;
|
||||
//private int count = 0;
|
||||
|
||||
// Parser Variables
|
||||
private final StringBuilder value;
|
||||
private final StringBuilder key;
|
||||
//private final StringBuilder date;
|
||||
private final HashMap<String,String> obj;
|
||||
|
||||
private Boolean isBookmark;
|
||||
|
||||
public YMarkSMWJSONImporter(final Reader bmk_file, final int queueSize, final String root) {
|
||||
this.bookmarks = new ArrayBlockingQueue<YMarkEntry>(queueSize);
|
||||
this.bmk_file = bmk_file;
|
||||
this.RootFolder = root;
|
||||
this.folderstring = new StringBuilder(YMarkTables.BUFFER_LENGTH);
|
||||
this.folderstring.append(this.RootFolder);
|
||||
this.bmk = new YMarkEntry();
|
||||
|
||||
this.parser = new JSONParser();
|
||||
|
||||
this.value = new StringBuilder(128);
|
||||
this.key = new StringBuilder(16);
|
||||
//this.date = new StringBuilder(32);
|
||||
this.obj = new HashMap<String,String>();
|
||||
|
||||
this.isBookmark = false;
|
||||
//this.empty = true;
|
||||
//this.count = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startJSON() throws ParseException, IOException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endJSON() throws ParseException, IOException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startArray() throws ParseException, IOException {
|
||||
final String key = this.key.toString();
|
||||
|
||||
if(key.equals("items") ) {
|
||||
|
||||
this.isBookmark = true;
|
||||
//this.count = 0;
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean endArray() throws ParseException, IOException {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startObject() throws ParseException, IOException {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean endObject() throws ParseException, IOException {
|
||||
|
||||
if(this.isBookmark) {
|
||||
|
||||
if(this.obj.containsKey("category")) {
|
||||
String catstr = this.obj.get("category");
|
||||
|
||||
HashSet<String> tags = YMarkUtil.keysStringToSet (catstr);
|
||||
|
||||
HashSet<String> categories = YMarkUtil.keysStringToSet("");
|
||||
|
||||
for (String c: tags) {
|
||||
|
||||
c = c.split(":")[1];
|
||||
|
||||
c = c.replace("/", "_");
|
||||
c = c.replace(" ", "_");
|
||||
|
||||
if (!c.equals("") && (!c.equals(" "))) {
|
||||
categories.add ("sc:"+c);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!Switchboard.getSwitchboard().getConfig("contentcontrol.smwimport.defaultcategory", "").equals("")) {
|
||||
categories.add ("sc:"+Switchboard.getSwitchboard().getConfig("contentcontrol.smwimport.defaultcategory", ""));
|
||||
}
|
||||
|
||||
catstr = YMarkUtil.keySetToString(categories);
|
||||
|
||||
this.bmk.put(YMarkEntry.BOOKMARK.TAGS.key(), catstr);
|
||||
}
|
||||
|
||||
if(this.obj.containsKey("article_has_average_rating")) {
|
||||
this.bmk.put(YMarkEntry.BOOKMARK.STARRATING.key(),this.obj.get("article_has_average_rating"));
|
||||
}
|
||||
|
||||
this.bmk.put(YMarkEntry.BOOKMARK.TITLE.key(),this.obj.get("label"));
|
||||
this.bmk.put(YMarkEntry.BOOKMARK.URL.key(),this.obj.get("url"));
|
||||
if(this.obj.containsKey("filter")) {
|
||||
this.bmk.put(YMarkEntry.BOOKMARK.FILTER.key(),this.obj.get("filter"));
|
||||
} else {
|
||||
this.bmk.put(YMarkEntry.BOOKMARK.FILTER.key(),"");
|
||||
}
|
||||
try {
|
||||
this.bookmarks.put(this.bmk);
|
||||
//this.count++;
|
||||
} catch (InterruptedException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
this.obj.clear();
|
||||
this.bmk = new YMarkEntry();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startObjectEntry(String key) throws ParseException, IOException {
|
||||
this.key.setLength(0);
|
||||
this.key.append(key);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean primitive(Object value) throws ParseException, IOException {
|
||||
|
||||
this.value.setLength(0);
|
||||
if(value instanceof java.lang.String) {
|
||||
this.value.append((String)value);
|
||||
} else if(value instanceof java.lang.Boolean) {
|
||||
this.value.append(value);
|
||||
} else if(value instanceof java.lang.Number) {
|
||||
this.value.append(value);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean endObjectEntry() throws ParseException, IOException {
|
||||
|
||||
final String key = this.key.toString();
|
||||
final String value = this.value.toString();
|
||||
|
||||
this.obj.put(key, value);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Log.logInfo(YMarkTables.BOOKMARKS_LOG, "SMWJSON Importer run()");
|
||||
//this.empty = true;
|
||||
this.parser.parse(this.bmk_file, this, true);
|
||||
|
||||
} catch (IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (ParseException e) {
|
||||
Log.logException(e);
|
||||
} finally {
|
||||
|
||||
try {
|
||||
Log.logInfo(YMarkTables.BOOKMARKS_LOG, "SMWJSON Importer inserted poison pill in queue");
|
||||
this.bookmarks.put(YMarkEntry.POISON);
|
||||
} catch (InterruptedException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public YMarkEntry take() {
|
||||
try {
|
||||
return this.bookmarks.take();
|
||||
} catch (InterruptedException e) {
|
||||
Log.logException(e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in new issue