You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yacy_search_server/source/net/yacy/kelondro/data/meta/URIReferenceNode.java

85 lines
2.5 KiB

/**
* URIReferenceNode
* Copyright 2012 by Michael Peter Christen
* First released 5.4.2012 at http://yacy.net
*
* This file is part of YaCy Content Integration
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program in the file lgpl21.txt
* If not, see <http://www.gnu.org/licenses/>.
*/
package net.yacy.kelondro.data.meta;
import java.net.MalformedURLException;
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import net.yacy.cora.date.ISO8601Formatter;
import net.yacy.cora.document.ASCII;
public class URIReferenceNode extends HashMap<String, byte[]> implements URIReference {
private static final long serialVersionUID = -1580155759116466570L;
private byte[] hash;
public URIReferenceNode(DigestURI uri, Date date) {
this.hash = uri.hash();
this.put(MetadataVocabulary.url.name(), ASCII.getBytes(uri.toNormalform(true, false)));
this.put(MetadataVocabulary.moddate.name(), ASCII.getBytes(ISO8601Formatter.FORMATTER.format(date)));
}
@Override
public byte[] hash() {
return this.hash;
}
@Override
public Date moddate() {
byte[] x = this.get(MetadataVocabulary.moddate.name());
try {
return x == null ? null : ISO8601Formatter.FORMATTER.parse(ASCII.String(x));
} catch (ParseException e) {
return null;
}
}
@Override
public DigestURI url() {
byte[] x = this.get(MetadataVocabulary.moddate.name());
try {
return x == null ? null : new DigestURI(ASCII.String(x), this.hash);
} catch (MalformedURLException e) {
return null;
}
}
@Override
public boolean matches(Pattern matcher) {
byte[] x = this.get(MetadataVocabulary.moddate.name());
if (x == null) return false;
return matcher.matcher(ASCII.String(x)).matches();
}
@Override
public Map<String, byte[]> toMap() {
return this;
}
}