/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.netconf.md.sal.rest.schema; import java.io.IOException; import java.io.OutputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import java.util.concurrent.ExecutionException; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyWriter; import javax.ws.rs.ext.Provider; import org.opendaylight.restconf.common.schema.SchemaExportContext; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; @Provider @Produces({ YangConstants.RFC6020_YANG_MEDIA_TYPE }) public class SchemaExportContentYangBodyWriter implements MessageBodyWriter { @Override public boolean isWriteable(final Class type, final Type genericType, final Annotation[] annotations, final MediaType mediaType) { return type.equals(SchemaExportContext.class); } @Override public long getSize(final SchemaExportContext context, final Class type, final Type genericType, final Annotation[] annotations, final MediaType mediaType) { return -1; } @Override public void writeTo(final SchemaExportContext context, final Class type, final Type genericType, final Annotation[] annotations, final MediaType mediaType, final MultivaluedMap httpHeaders, final OutputStream entityStream) throws IOException, WebApplicationException { final RevisionSourceIdentifier sourceId = RevisionSourceIdentifier.create(context.getModule().getName(), context.getModule().getQNameModule().getRevision()); final YangTextSchemaSource yangTextSchemaSource; try { yangTextSchemaSource = context.getSourceProvider().getSource(sourceId).get(); } catch (InterruptedException | ExecutionException e) { throw new WebApplicationException("Unable to retrieve source from SourceProvider.", e); } yangTextSchemaSource.copyTo(entityStream); } }