blob: 8cfebc88b80181169db5bde9cee124566c0e2f61 [file] [log] [blame]
package de.ids_mannheim.korap.resource.rewrite;
import com.fasterxml.jackson.databind.JsonNode;
import de.ids_mannheim.korap.config.*;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface;
import de.ids_mannheim.korap.resources.Document;
import de.ids_mannheim.korap.user.User;
/**
* @author hanl
* @date 12/11/2015
*/
//todo : test
public class DocMatchRewrite extends KustvaktCacheable implements RewriteTask.IterableRewritePath,
BeanInjectable {
private ResourceOperationIface<Document> docDao;
public DocMatchRewrite () {
super("documents", "key:doc");
}
@Override
public void insertBeans (ContextHolder beans) {
this.docDao = BeansFactory.getTypeFactory().getTypeInterfaceBean(
beans.getResourceProviders(), Document.class);
}
//todo: benchmark: see if retrieval and and get docs for all ids at once is better --> outside this rewrite handler
@Override
public JsonNode rewriteResult (KoralNode node) throws KustvaktException {
Document doc;
if (this.docDao == null)
throw new RuntimeException("Document dao must be set!");
if (node.has(Attributes.TEXT_SIGLE)) {
String textSigle = node.get(Attributes.TEXT_SIGLE);
Object o = this.getCacheValue(textSigle);
if (o == null) {
doc = docDao.findbyId(textSigle, null);
if (doc != null)
this.storeInCache(textSigle, doc);
}
else
doc = (Document) o;
if (doc != null && doc.isDisabled())
node.removeNode(new KoralNode.RewriteIdentifier(
Attributes.TEXT_SIGLE, doc.getPersistentID()));
}
return node.rawNode();
}
@Override
public String path () {
return "matches";
}
@Override
public JsonNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
User user) {
return null;
}
}