%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/waritko/yacy/source/net/yacy/data/ymark/
Upload File :
Create Path :
Current File : //home/waritko/yacy/source/net/yacy/data/ymark/YMarkEntry.java

// YMarkEntry.java
// (C) 2011 by Stefan Förster, sof@gmx.de, Norderstedt, Germany
// first published 2011 on http://yacy.net
//
// This is a part of YaCy, a peer-to-peer based web search engine
//
// $LastChangedDate$
// $LastChangedRevision$
// $LastChangedBy$
//
// LICENSE
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

package net.yacy.data.ymark;

import java.net.MalformedURLException;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

import net.yacy.cora.document.id.DigestURL;
import net.yacy.cora.util.ConcurrentLog;
import net.yacy.crawler.data.CrawlProfile;
import net.yacy.document.content.DCEntry;
import net.yacy.kelondro.blob.Tables;
import net.yacy.search.Switchboard;

public class YMarkEntry extends TreeMap<String, String> {

    private static final long serialVersionUID = 2179622977348536148L;

    public static final YMarkEntry POISON = new YMarkEntry();
    public static final YMarkEntry EMPTY = new YMarkEntry();
    public static final String BOOKMARKS_ID = "id";
    public static final String BOOKMARKS_REF = "ref";
    public static final String FOLDERS_IMPORTED = "/imported";

    public static enum BOOKMARK {
    	//             key                 dc_attrb            dflt            html_attrb          xbel_attrb      json_attrb      type			index	separator
    	URL            ("url",             "dc:identifier",    "",             "href",             "href",         "uri",          "link",		false,	YMarkUtil.EMPTY_STRING),
    	TITLE          ("title",           "dc:title",         "",             "",                 "",             "title",        "meta",		false,	YMarkUtil.EMPTY_STRING),
    	DESC           ("desc",            "dc:description",   "",             "",                 "",             "",             "comment",	false,	YMarkUtil.EMPTY_STRING),
    	DATE_ADDED     ("date_added",      "",                 "",             "add_date",         "added",        "dateAdded",    "date",		false,	YMarkUtil.EMPTY_STRING),
    	DATE_MODIFIED  ("date_modified",   "",                 "",             "last_modified",    "modified",     "lastModified", "date",		false,	YMarkUtil.EMPTY_STRING),
    	DATE_VISITED   ("date_visited",    "",                 "",             "last_visited",     "visited",      "",             "date",		false,	YMarkUtil.EMPTY_STRING),
    	PUBLIC         ("public",          "",                 "false",        "private",          "yacy:public",  "",             "lock",		false,	YMarkUtil.EMPTY_STRING),
    	TAGS           ("tags",            "dc:subject",       "unsorted",     "shortcuturl",      "yacy:tags",    "keyword",      "tag",		true,	YMarkUtil.TAGS_SEPARATOR),
    	VISITS         ("visits",          "",                 "0",            "",                 "yacy:visits",  "",             "stat",		false,	YMarkUtil.EMPTY_STRING),
    	FOLDERS        ("folders",         "",                 "/unsorted",    "",                 "",             "",             "folder",	true,	YMarkUtil.TAGS_SEPARATOR),
    	FILTER         ("filter",          "",                 "",             "",                 "yacy:filter",  "",             "filter",    false,  YMarkUtil.EMPTY_STRING),
    	OAI            ("oai",             "",                 "",             "",                 "yacy:oai",     "",             "oai",       false,  YMarkUtil.EMPTY_STRING),
    	URLHASH        ("urlhash",         "",                 "",             "",                 "yacy:urlhash", "",             "urlhash",   false,  YMarkUtil.EMPTY_STRING),
    	STARRATING     ("starrating",      "",                 "",             "",                 "yacy:starrating", "",          "stat",      false,  YMarkUtil.EMPTY_STRING);

    	private String key;
    	private String dc_attrb;
    	private String dflt;
    	private String html_attrb;
    	private String xbel_attrb;
    	private String json_attrb;
    	private String type;
    	private boolean index;
    	private String seperator;

        private static final Map<String,BOOKMARK> lookup = new HashMap<String,BOOKMARK>();
        private static final Map<String,String> indexColumns = new HashMap<String,String>();
        static {
        	for(BOOKMARK b : EnumSet.allOf(BOOKMARK.class)) {
        		lookup.put(b.key, b);
        		if(b.index) {
        			indexColumns.put(b.key, b.seperator);
        		}
        	}
        }

        private static StringBuilder buffer = new StringBuilder(25);

    	private BOOKMARK(final String k, final String d, final String s, final String a, final String x, final String j, final String t, final boolean index, final String separator) {
    		this.key = k;
    		this.dc_attrb = d;
    		this.dflt = s;
    		this.html_attrb = a;
    		this.xbel_attrb = x;
    		this.json_attrb = j;
    		this.type = t;
    		this.index = index;
    		this.seperator = separator;
    	}
    	public static Map<String,String> indexColumns() {
    		return Collections.unmodifiableMap(indexColumns);
    	}
    	public static BOOKMARK get(String key) {
            return lookup.get(key);
    	}
    	public static boolean contains(String key) {
    		return lookup.containsKey(key);
    	}
    	public String key() {
    		return this.key;
    	}
    	public String deflt() {
    		return  this.dflt;
    	}
    	public String html_attrb() {
    		return this.html_attrb;
    	}
    	public String xbel_attrb() {
    		return this.xbel_attrb;
    	}
        public String json_attrb() {
            return this.json_attrb;
        }
        public String dc_attrb() {
            return this.dc_attrb;
        }
    	public String xbel() {
    		buffer.setLength(0);
    		buffer.append('"');
    		buffer.append('\n');
    		buffer.append(' ');
    		buffer.append(this.xbel_attrb);
    		buffer.append('=');
    		buffer.append('"');
    		return buffer.toString();
    	}
    	public String type() {
    		return this.type;
    	}
    	public boolean index() {
    		return this.index;
    	}
    	public String seperator() {
    		return this.seperator;
    	}

    }

    public YMarkEntry() {
    	this(true);
    }

    public YMarkEntry(final boolean setDefaults) {
        super();
        if(setDefaults) {
            setCurrentTimeMillis(BOOKMARK.DATE_ADDED);
            setCurrentTimeMillis(BOOKMARK.DATE_MODIFIED);
            setDefaults();
        }
    }

    public YMarkEntry(final DCEntry dc) {
        super();
    	for (BOOKMARK b : BOOKMARK.values()) {
            if (dc.getMap().containsKey(b.dc_attrb)) {
                this.put(b.key(), dc.get(b.dc_attrb));
            }
        }
        setCurrentTimeMillis(BOOKMARK.DATE_ADDED);
        setCurrentTimeMillis(BOOKMARK.DATE_MODIFIED);
        setDefaults();
    }

    public YMarkEntry(final Tables.Row bmk_row) {
        super();
    	for (BOOKMARK b : BOOKMARK.values()) {
            if(bmk_row.containsKey(b.key())) {
                this.put(b.key(), bmk_row.get(b.key(), b.deflt()));
            }
        }
    }

    private void setCurrentTimeMillis(BOOKMARK b) {
        switch(b) {
        	case DATE_ADDED:
        	case DATE_MODIFIED:
        	case DATE_VISITED:
        		this.put(b.key(), String.valueOf(System.currentTimeMillis()));
    		    break;
            default:
    			break;
        }
    }

    public void setDefaults() {
        for (BOOKMARK b : BOOKMARK.values()) {
            if(!b.deflt().isEmpty() && !this.containsKey(b.key())) {
                this.put(b.key(), b.deflt());
            }
        }
    }

    public byte[] getUrlHash() {
    	if(this.containsKey(YMarkEntry.BOOKMARK.URL.key()))
			try {
				return YMarkUtil.getBookmarkId(this.get(YMarkEntry.BOOKMARK.URL.key()));
			} catch (final MalformedURLException e) {
				ConcurrentLog.warn(YMarkTables.BOOKMARKS_LOG, "getUrlHash - MalformedURLException for YMarkEntry: "+this.get(YMarkEntry.BOOKMARK.URL.key()));
			}
    	return null;
    }

    public DCEntry getDCEntry() {
        final DCEntry dc = new DCEntry();
        for (BOOKMARK b : BOOKMARK.values()) {
            if(!b.dc_attrb.isEmpty() && this.containsKey(b.key())) {
                dc.getMap().put(b.dc_attrb, new String[]{this.get(b.key())});
            }
        }
        return dc;
    }

    public Tables.Data getData() {
        final Tables.Data data = new Tables.Data();
        for (BOOKMARK b : BOOKMARK.values()) {
            if(this.containsKey(b.key()) && this.get(b.key()) != null) {
                data.put(b.key(), this.get(b.key()));
            } else {
                data.put(b.key(), b.deflt());
            }
        }
        return data;
    }

    public void crawl(final YMarkCrawlStart.CRAWLSTART type, final boolean medialink, final Switchboard sb) throws MalformedURLException {
		final DigestURL url = new DigestURL(this.get(BOOKMARK.URL.key()));
		switch(type) {
			case SINGLE:
				YMarkCrawlStart.crawlStart(sb, url, CrawlProfile.MATCH_ALL_STRING, CrawlProfile.MATCH_NEVER_STRING, 0, true, medialink);
				break;
			case ONE_LINK:
				YMarkCrawlStart.crawlStart(sb, url, CrawlProfile.MATCH_ALL_STRING, CrawlProfile.MATCH_NEVER_STRING, 1, true, medialink);
				break;
			case FULL_DOMAIN:
				YMarkCrawlStart.crawlStart(sb, url, CrawlProfile.mustMatchFilterFullDomain(url), CrawlProfile.MATCH_NEVER_STRING, 99, false, medialink);
				break;
			default:
				break;
		}
    }
}

Zerion Mini Shell 1.0