package org.molgenis.ui.converter;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.rio.Rio;
import org.molgenis.security.core.runas.RunAsSystem;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.stereotype.Component;
import java.io.IOException;
import static org.eclipse.rdf4j.rio.RDFFormat.TURTLE;
import static org.molgenis.ui.converter.RDFMediaType.APPLICATION_TRIG;
import static org.molgenis.ui.converter.RDFMediaType.TEXT_TURTLE;
@Component
public class RdfConverter extends AbstractHttpMessageConverter<Model>
{
public RdfConverter()
{
super(TEXT_TURTLE, APPLICATION_TRIG);
}
@Override
protected boolean supports(Class<?> aClass)
{
return Model.class.isAssignableFrom(aClass);
}
@Override
protected Model readInternal(Class<? extends Model> aClass, HttpInputMessage httpInputMessage)
throws IOException, HttpMessageNotReadableException
{
throw new HttpMessageNotReadableException("RDF support is readonly!");
}
@Override
@RunAsSystem
protected void writeInternal(Model model, HttpOutputMessage httpOutputMessage)
throws IOException, HttpMessageNotWritableException
{
Rio.write(model, httpOutputMessage.getBody(), TURTLE);
httpOutputMessage.getBody().close();
}
}