package ecologylab.bigsemantics.actions; import java.io.IOException; import java.util.Map; import ecologylab.bigsemantics.documentparsers.DocumentParser; import ecologylab.bigsemantics.documentparsers.ParserBase; import ecologylab.bigsemantics.metadata.builtins.RichDocument; import ecologylab.bigsemantics.metadata.builtins.DocumentClosure; import ecologylab.bigsemantics.metametadata.MetaMetadata; import ecologylab.bigsemantics.metametadata.MetaMetadataSelector; import ecologylab.serialization.annotations.simpl_inherit; import ecologylab.serialization.annotations.simpl_tag; @simpl_inherit @simpl_tag(SemanticActionStandardMethods.RESELECT_METAMETADATA_AND_EXTRACT) public class ReselectAndExtractMetadataSemanticAction extends SemanticAction { @Override public String getActionName() { return SemanticActionStandardMethods.RESELECT_METAMETADATA_AND_EXTRACT; } @Override public void handleError() { // TODO Auto-generated method stub } @Override public Object perform(Object obj) throws IOException { RichDocument doc = (RichDocument) obj; MetaMetadata mmd = (MetaMetadata) doc.getMetaMetadata(); Map<MetaMetadataSelector, MetaMetadata> reselectMap = mmd.getReselectMap(); if (reselectMap != null) { for (MetaMetadataSelector selector : reselectMap.keySet()) { if (selector.reselect(doc)) { MetaMetadata newMmd = reselectMap.get(selector); DocumentParser newParser = DocumentParser.getByMmd(newMmd, sessionScope, doc.getOrConstructClosure(), documentParser.getDownloadController()); if (documentParser instanceof ParserBase && newParser instanceof ParserBase) { RichDocument newDoc = (RichDocument) newMmd.constructMetadata(); newDoc.setLocation(doc.getLocation()); ParserBase newParserBase = (ParserBase) newParser; org.w3c.dom.Document dom = ((ParserBase) documentParser).getDom(); newParserBase.parse(newDoc, newMmd, dom); DocumentClosure closure = doc.getOrConstructClosure(); closure.changeDocument(newDoc); return newDoc; } } } } return null; } }