package edu.isi.karma.kr2rml.planning; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import edu.isi.karma.controller.command.selection.SuperSelection; import edu.isi.karma.kr2rml.PredicateObjectMap; import edu.isi.karma.kr2rml.URIFormatter; import edu.isi.karma.kr2rml.exception.HNodeNotFoundKarmaException; import edu.isi.karma.kr2rml.mapping.KR2RMLMapping; import edu.isi.karma.kr2rml.mapping.KR2RMLMappingColumnNameHNodeTranslator; import edu.isi.karma.kr2rml.template.ColumnTemplateTerm; import edu.isi.karma.kr2rml.template.ConstantTemplateTermSetPopulatorPlan; import edu.isi.karma.kr2rml.template.PartiallyPopulatedTermSet; import edu.isi.karma.kr2rml.template.PopulatedTemplateTermSet; import edu.isi.karma.kr2rml.template.TemplateTerm; import edu.isi.karma.kr2rml.template.TemplateTermSet; import edu.isi.karma.kr2rml.template.TemplateTermSetPopulator; import edu.isi.karma.kr2rml.writer.KR2RMLRDFWriter; import edu.isi.karma.rep.HNodePath; import edu.isi.karma.rep.RepFactory; import edu.isi.karma.rep.Row; public class ConstantPredicateObjectMappingPlan extends PredicateObjectMappingPlan { private static Logger LOG = LoggerFactory.getLogger(ConstantPredicateObjectMappingPlan.class); public ConstantPredicateObjectMappingPlan(TemplateTermSet subjectMapTemplate,PredicateObjectMap pom, KR2RMLMapping kr2rmlMapping,Map<ColumnTemplateTerm, HNodePath> subjectTermsToPaths, URIFormatter uriFormatter, RepFactory factory, KR2RMLMappingColumnNameHNodeTranslator translator, SuperSelection sel) { super(kr2rmlMapping, uriFormatter, factory, translator, sel); this.pom = pom; objectTemplateTermSetPopulator = new TemplateTermSetPopulator(pom.getObject().getTemplate(), new StringBuilder(), uriFormatter, false, true); try { generateInternal(subjectMapTemplate, pom, subjectTermsToPaths); } catch (HNodeNotFoundKarmaException e) { LOG.error("Unable to generate plan!", e); } } protected void generateInternal(TemplateTermSet subjectMapTemplate, PredicateObjectMap pom, Map<ColumnTemplateTerm, HNodePath> subjectTermsToPaths) throws HNodeNotFoundKarmaException { this.pom = pom; combinedSubjectObjectTermsToPaths = new HashMap<>(); combinedSubjectObjectTermsToPaths.putAll(subjectTermsToPaths); this.isLiteral = true; TemplateTermSet literalTemplate = pom.getObject().getRdfLiteralType(); literalTemplateValue = null; if(literalTemplate != null) literalTemplateValue = generateStringValueForTemplate(literalTemplate); TemplateTermSet languageTemplate = pom.getObject().getLanguage(); literalLanguage = null; if(languageTemplate != null) literalLanguage = generateStringValueForTemplate(languageTemplate); generatePredicatesForPom(pom); } protected String generateStringValueForTemplate( TemplateTermSet objMapTemplate) { StringBuilder sb = new StringBuilder(); for(TemplateTerm term : objMapTemplate.getAllTerms()) { sb.append(term.getTemplateTermValue()); } return sb.toString(); } @Override public Map<PopulatedTemplateTermSet, List<PartiallyPopulatedTermSet>> execute(Row r, List<PopulatedTemplateTermSet> subjects) { Map<PopulatedTemplateTermSet, List<PartiallyPopulatedTermSet>> subjectsToObjects = new ConstantTemplateTermSetPopulatorPlan(this.selection).execute(r, subjects); return subjectsToObjects; } @Override protected void outputTriple(KR2RMLRDFWriter outWriter, PopulatedTemplateTermSet subject, PopulatedTemplateTermSet predicate, PopulatedTemplateTermSet object) { if(objectTemplateTermSetPopulator.getTerms().isSingleUriString()) { outWriter.outputTripleWithURIObject(pom, subject.getURI(), predicate.getURI(), uriFormatter.getExpandedAndNormalizedUri(object.getURI())); } else { outWriter.outputTripleWithLiteralObject(pom, subject.getURI(), predicate.getURI(), object.getURI(), literalTemplateValue, literalLanguage); } } }