001/* 002 * Licensed to DuraSpace under one or more contributor license agreements. 003 * See the NOTICE file distributed with this work for additional information 004 * regarding copyright ownership. 005 * 006 * DuraSpace licenses this file to you under the Apache License, 007 * Version 2.0 (the "License"); you may not use this file except in 008 * compliance with the License. You may obtain a copy of the License at 009 * 010 * http://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 org.fcrepo.event.serialization; 019 020import static java.nio.charset.StandardCharsets.UTF_8; 021import static org.apache.jena.rdf.model.ModelFactory.createDefaultModel; 022import static org.fcrepo.kernel.api.observer.OptionalValues.BASE_URL; 023 024import java.io.ByteArrayInputStream; 025 026import org.apache.jena.rdf.model.Model; 027import org.fcrepo.kernel.api.observer.FedoraEvent; 028 029/** 030 * A basic serialization API for Fedora events 031 * @author acoburn 032 * @author dbernstein 033 */ 034public interface EventSerializer { 035 036 /** 037 * Convert an event to an Rdf Model 038 * @param evt the Fedora event 039 * @return an RDF model representing the event 040 */ 041 static Model toModel(final FedoraEvent evt) { 042 final EventSerializer serializer = new JsonLDSerializer(); 043 final String json = serializer.serialize(evt); 044 final Model model = createDefaultModel(); 045 final String baseUrl = evt.getInfo().get(BASE_URL); 046 model.read(new ByteArrayInputStream(json.getBytes(UTF_8)), baseUrl + evt.getPath(), "JSON-LD"); 047 return model; 048 } 049 050 /** 051 * Serialize a FedoraEvent into a JSON String 052 * @param evt the Fedora event 053 * @return a JSON string 054 */ 055 String serialize(final FedoraEvent evt); 056}