/*
* JBoss, Home of Professional Open Source.
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership. Some portions may be licensed
* to Red Hat, Inc. under one or more contributor license agreements.
*
* 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 library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*/
package org.teiid.olingo.service;
import java.io.InputStreamReader;
import java.net.URI;
import javax.xml.stream.XMLStreamException;
import org.apache.olingo.commons.api.edm.provider.CsdlAnnotation;
import org.apache.olingo.commons.api.edm.provider.CsdlSchema;
import org.apache.olingo.commons.api.edm.provider.annotation.CsdlConstantExpression;
import org.apache.olingo.commons.api.edm.provider.annotation.CsdlConstantExpression.ConstantExpressionType;
import org.apache.olingo.commons.api.edmx.EdmxReference;
import org.apache.olingo.commons.api.edmx.EdmxReferenceInclude;
import org.apache.olingo.commons.api.ex.ODataException;
import org.apache.olingo.server.core.MetadataParser;
import org.apache.olingo.server.core.SchemaBasedEdmProvider;
public class TeiidEdmProvider extends SchemaBasedEdmProvider {
public TeiidEdmProvider(String baseUri, CsdlSchema schema,
String invalidXmlReplacementChar) throws XMLStreamException,
ODataException {
EdmxReference olingoRef = new EdmxReference(URI.create(baseUri+"/static/org.apache.olingo.v1.xml"));
EdmxReferenceInclude include = new EdmxReferenceInclude("org.apache.olingo.v1", "olingo-extensions");
olingoRef.addInclude(include);
addReference(olingoRef);
EdmxReference teiidRef = new EdmxReference(URI.create(baseUri+"/static/org.teiid.v1.xml"));
EdmxReferenceInclude teiidInclude = new EdmxReferenceInclude("org.teiid.v1", "teiid");
teiidRef.addInclude(teiidInclude);
addReference(teiidRef);
MetadataParser parser = new MetadataParser();
parser.parseAnnotations(true);
parser.useLocalCoreVocabularies(true);
parser.implicitlyLoadCoreVocabularies(true);
SchemaBasedEdmProvider provider = parser.buildEdmProvider(new InputStreamReader(
getClass().getClassLoader().getResourceAsStream("org.apache.olingo.v1.xml")));
addVocabularySchema("org.apache.olingo.v1", provider);
provider = parser.buildEdmProvider(new InputStreamReader(
getClass().getClassLoader().getResourceAsStream("org.teiid.v1.xml")));
addVocabularySchema("org.teiid.v1", provider);
// <Annotation Term="org.apache.olingo.v1.xml10-incompatible-char-replacement" String="xxx"/>
if (invalidXmlReplacementChar != null) {
CsdlAnnotation xmlCharReplacement = new CsdlAnnotation();
xmlCharReplacement.setTerm("org.apache.olingo.v1.xml10-incompatible-char-replacement");
xmlCharReplacement.setExpression(new CsdlConstantExpression(
ConstantExpressionType.String, invalidXmlReplacementChar));
schema.getAnnotations().add(xmlCharReplacement);
}
addSchema(schema);
}
}