001/* 002 * SPDX-License-Identifier: Apache-2.0 003 * 004 * Copyright 2024-2026 The Enola <https://enola.dev> Authors 005 * 006 * Licensed under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * https://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package dev.enola.rdf.io; 019 020import dev.enola.common.convert.ConversionException; 021import dev.enola.common.convert.ConverterInto; 022import dev.enola.common.io.resource.WritableResource; 023 024import org.eclipse.rdf4j.model.Namespace; 025import org.eclipse.rdf4j.model.NamespaceAware; 026import org.eclipse.rdf4j.model.Statement; 027 028import java.io.IOException; 029 030/** 031 * Writes RDFJ4j {@link Statement}s (like {@link org.eclipse.rdf4j.model.Model}) into a {@link 032 * WritableResource}. 033 */ 034public class RdfWriterConverter implements ConverterInto<Iterable<Statement>, WritableResource> { 035 036 @Override 037 public boolean convertInto(Iterable<Statement> from, WritableResource into) 038 throws ConversionException { 039 040 try { 041 var opt = WritableResourceRDFHandler.create(into); 042 if (opt.isEmpty()) return false; 043 044 try (var closeableRDFHandler = opt.get()) { 045 if (from instanceof NamespaceAware) { 046 for (Namespace ns : ((NamespaceAware) from).getNamespaces()) { 047 closeableRDFHandler.handleNamespace(ns.getPrefix(), ns.getName()); 048 } 049 } 050 for (var statement : from) closeableRDFHandler.handleStatement(statement); 051 052 return true; 053 } 054 055 } catch (IOException e) { 056 throw new ConversionException("WritableResourceRDFHandler.create failed: " + into, e); 057 } 058 } 059}