1 /*
2 * Copyright 2015 Data Archiving and Networked Services (an institute of
3 * Koninklijke Nederlandse Akademie van Wetenschappen), King's College London,
4 * Georg-August-Universitaet Goettingen Stiftung Oeffentlichen Rechts
5 *
6 * Licensed under the EUPL, Version 1.1 or – as soon they will be approved by
7 * the European Commission - subsequent versions of the EUPL (the "Licence");
8 * You may not use this work except in compliance with the Licence.
9 * You may obtain a copy of the Licence at:
10 *
11 * https://joinup.ec.europa.eu/software/page/eupl
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the Licence is distributed on an "AS IS" basis,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the Licence for the specific language governing
17 * permissions and limitations under the Licence.
18 */
19
20 package eu.ehri.project.oaipmh;
21
22 import eu.ehri.project.api.Api;
23 import eu.ehri.project.exporters.dc.DublinCore11Exporter;
24 import eu.ehri.project.exporters.ead.Ead2002Exporter;
25 import eu.ehri.project.models.DocumentaryUnit;
26
27 import javax.xml.stream.XMLStreamWriter;
28
29 /**
30 * A function that renders XML to a stream writer depending on the
31 * given metadata prefix and item.
32 */
33 @FunctionalInterface
34 public interface OaiPmhRenderer {
35 void render(XMLStreamWriter sw, MetadataPrefix mdp, DocumentaryUnit item);
36
37 /**
38 * The default renderer, which handles OAI DC and EAD.
39 *
40 * @param api the Api instance
41 * @param langCode the language code to prefer
42 * @return a renderer object
43 */
44 static OaiPmhRenderer defaultRenderer(Api api, String langCode) {
45 return (w, mp, item) -> {
46 if (MetadataPrefix.ead.equals(mp)) {
47 new Ead2002Exporter(api).export(w, item, langCode);
48 } else {
49 new DublinCore11Exporter(api).export(w, item, langCode);
50 }
51 };
52 }
53 }