/* * Copyright (c) 2013-2015 Josef Hardi <josef.hardi@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.obidea.semantika.mapping.parser.termalxml; import java.net.URI; import com.obidea.semantika.expression.base.ITerm; import com.obidea.semantika.mapping.exception.MappingParserException; public class SubjectMapElementHandler extends AbstractMappingElementHandler { private URI mSubjectUri; private ITerm mSubjectMapValue; public SubjectMapElementHandler(TermalXmlParserHandler handler) { super(handler); } @Override protected void decideDefaultTermType() { mTermType = R2RmlVocabulary.IRI.getUri(); } @Override public void startElement(String name) throws MappingParserException { super.startElement(name); } @Override public void endElement() throws MappingParserException { processSubjectMap(); getParentElement().handleChild(this); } @Override public void attribute(String name, String value) throws MappingParserException { if (name.equals(R2RmlVocabulary.CLASS.getQName())) { setSubjectUri(getUri(value)); } else if (name.equals(R2RmlVocabulary.COLUMN.getQName())) { setTermMap(TermMap.COLUMN_VALUE); setValue(value); } else if (name.equals(R2RmlVocabulary.TEMPLATE.getQName())) { setTermMap(TermMap.TEMPLATE_VALUE); setValue(value); } else if (name.equals(R2RmlVocabulary.SUBJECT.getQName())) { setTermMap(TermMap.CONSTANT_VALUE); setValue(value); } else if (name.equals(R2RmlVocabulary.TERM_TYPE.getQName())) { setTermType(getUri(value).toString()); } else if (name.equals(R2RmlVocabulary.DATAYPE.getQName())) { setDatatype(getUri(value).toString()); } else { throw unknownXmlAttributeException(name); } } private void processSubjectMap() throws MappingParserException { switch (getTermMap()) { case COLUMN_VALUE: setSubjectMapValue(getColumnTerm(getValue(), getTermType(), getDatatype())); break; case CONSTANT_VALUE: setSubjectMapValue(getLiteralTerm(getValue(), getTermType(), getDatatype())); break; case TEMPLATE_VALUE: setSubjectMapValue(getTemplateTerm(getValue(), getTermType(), getDatatype())); break; } } private void setSubjectUri(URI classUri) throws ClassNotFoundException, PrefixNotFoundException { checkClassSignature(classUri); mSubjectUri = classUri; } public URI getSubjectUri() { return mSubjectUri; } private void setSubjectMapValue(ITerm subjectTerm) { mSubjectMapValue = subjectTerm; } public ITerm getSubjectMapValue() { return mSubjectMapValue; } /* * Private utility methods */ private void checkClassSignature(URI uri) throws ClassNotFoundException { if (uri == null) { return; // if input is null then nothing to check } if (isStrictParsing()) { if (getOntology().containClass(uri)) { return; } throw classNotFoundException(uri); } } }