001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.juneau.rest.server.rdf.config;
018
019import org.apache.juneau.commons.bean.*;
020import org.apache.juneau.marshall.*;
021import org.apache.juneau.marshall.html.*;
022import org.apache.juneau.marshall.jena.*;
023import org.apache.juneau.marshall.json.*;
024import org.apache.juneau.marshall.json5.*;
025import org.apache.juneau.marshall.msgpack.*;
026import org.apache.juneau.marshall.oapi.*;
027import org.apache.juneau.marshall.plaintext.*;
028import org.apache.juneau.marshall.serializer.*;
029import org.apache.juneau.marshall.soap.*;
030import org.apache.juneau.marshall.uon.*;
031import org.apache.juneau.marshall.urlencoding.*;
032import org.apache.juneau.marshall.xml.*;
033import org.apache.juneau.rest.server.*;
034import org.apache.juneau.rest.server.config.*;
035import org.apache.juneau.rest.server.servlet.*;
036
037/**
038 * Identical to {@link BasicUniversalConfig} but includes RDF marshalling support.
039 *
040 * <p>
041 *    Default settings defined:
042 * </p>
043 * <ul class='spaced-list'>
044 *    <li class='ja'>{@link Rest}:
045 *       <ul>
046 *          <li class='jma'>{@link Rest#serializers() serializers}:
047 *             <ul class='javatree'>
048 *                <li class='jc'>{@link HtmlDocSerializer}
049 *                <li class='jc'>{@link HtmlStrippedDocSerializer}
050 *                <li class='jc'>{@link HtmlSchemaDocSerializer}
051 *                <li class='jc'>{@link JsonSerializer}
052 *                <li class='jc'>{@link Json5Serializer}
053 *                <li class='jc'>{@link JsonSchemaSerializer}
054 *                <li class='jc'>{@link XmlDocSerializer}
055 *                <li class='jc'>{@link UonSerializer}
056 *                <li class='jc'>{@link UrlEncodingSerializer}
057 *                <li class='jc'>{@link OpenApiSerializer}
058 *                <li class='jc'>{@link MsgPackSerializer}
059 *                <li class='jc'>{@link SoapXmlSerializer}
060 *                <li class='jc'>{@link PlainTextSerializer}
061 *                <li class='jc'>{@link RdfXmlSerializer}
062 *                <li class='jc'>{@link RdfXmlAbbrevSerializer}
063 *                <li class='jc'>{@link TurtleSerializer}
064 *                <li class='jc'>{@link NTripleSerializer}
065 *                <li class='jc'>{@link N3Serializer}
066 *                <li class='jc'>{@link JsonLdSerializer}
067 *                <li class='jc'>{@link NQuadsSerializer}
068 *                <li class='jc'>{@link TriGSerializer}
069 *                <li class='jc'>{@link TriXSerializer}
070 *                <li class='jc'>{@link RdfJsonSerializer}
071 *                <li class='jc'>{@link RdfThriftSerializer}
072 *                <li class='jc'>{@link RdfProtoSerializer}
073 *             </ul>
074 *          </li>
075 *          <li class='jma'>{@link Rest#parsers() parsers}:
076 *             <ul class='javatree'>
077 *                <li class='jc'>{@link JsonParser}
078 *                <li class='jc'>{@link Json5Parser}
079 *                <li class='jc'>{@link XmlParser}
080 *                <li class='jc'>{@link HtmlParser}
081 *                <li class='jc'>{@link UonParser}
082 *                <li class='jc'>{@link UrlEncodingParser}
083 *                <li class='jc'>{@link OpenApiParser}
084 *                <li class='jc'>{@link MsgPackParser}
085 *                <li class='jc'>{@link PlainTextParser}
086 *                <li class='jc'>{@link RdfXmlParser}
087 *                <li class='jc'>{@link TurtleParser}
088 *                <li class='jc'>{@link NTripleParser}
089 *                <li class='jc'>{@link N3Parser}
090 *                <li class='jc'>{@link JsonLdParser}
091 *                <li class='jc'>{@link NQuadsParser}
092 *                <li class='jc'>{@link TriGParser}
093 *                <li class='jc'>{@link TriXParser}
094 *                <li class='jc'>{@link RdfJsonParser}
095 *                <li class='jc'>{@link RdfThriftParser}
096 *                <li class='jc'>{@link RdfProtoParser}
097 *             </ul>
098 *          </li>
099 *          <li class='jma'>{@link Rest#config() config}:  <js>"$S{juneau.configFile,SYSTEM_DEFAULT}"</js>
100 *    </ul>
101 * </li>
102 *    <li class='ja'>{@link MarshalledConfig}:
103 *       <ul>
104 *          <li class='jma'>{@link BeanConfig#ignoreUnknownBeanProperties() ignoreUnknownBeanProperties}:  <js>"true"</js>
105 *       </ul>
106 *    </li>
107 *    <li class='ja'>{@link SerializerConfig}:
108 *       <ul>
109 *          <li class='jma'>{@link SerializerConfig#uriResolution() uriResolution}:  <js>"ROOT_RELATIVE"</js>
110 *       </ul>
111 *    </li>
112 *    <li class='ja'>{@link HtmlDocConfig}:
113 *       <ul>
114 *          <li class='jma'>{@link HtmlDocConfig#header() header}:  <js>"&lt;h1&gt;$RS{title}&lt;/h1&gt;&lt;h2&gt;$RS{operationSummary,description}&lt;/h2&gt;$C{REST/header}"</js>
115 *          <li class='jma'>{@link HtmlDocConfig#navlinks() navlinks}:  <js>"up: request:/.."</js>
116 *          <li class='jma'>{@link HtmlDocConfig#stylesheet() stylesheet}:  <js>"$C{REST/theme,servlet:/htdocs/themes/devops.css}"</js>
117 *          <li class='jma'>{@link HtmlDocConfig#head() head}:  <js>"$C{REST/head}"</js>
118 *          <li class='jma'>{@link HtmlDocConfig#footer() footer}:  <js>"$C{REST/footer}"</js>
119 *          <li class='jma'>{@link HtmlDocConfig#nowrap() nowrap}:  <js>"true"</js>
120 *       </ul>
121 *    </li>
122 * </ul>
123 *
124 * <p>
125 *    This annotation can be applied to REST resource classes to define common default configurations:
126 * </p>
127 * <p class='bjava'>
128 *    <jc>// Used on a top-level resource.</jc>
129 *    <ja>@Rest</ja>
130 *    <jk>public class</jk> MyResource <jk>extends</jk> RestServlet <jk>implements</jk> BasicUniversalJenaConfig { ... }
131 * </p>
132 * <p class='bjava'>
133 *    <jc>// Used on a child resource.</jc>
134 *    <ja>@Rest</ja>
135 *    <jk>public class</jk> MyResource <jk>extends</jk> RestResource <jk>implements</jk> BasicUniversalJenaConfig { ... }
136 * </p>
137 *
138 * <p>
139 *    Note that the framework will aggregate annotations defined on all classes in the class hierarchy with
140 *    values defined on child classes overriding values defined on parent classes.  That allows any values defined
141 *    on this interface to be overridden by annotations defined on the implemented class.
142 * </p>
143 *
144 * <h5 class='section'>See Also:</h5><ul>
145 *    <ul class='javatreec'>
146 *       <li class='jc'>{@link BasicRestServlet}
147 *       <li class='jc'>{@link BasicRestServletGroup}
148 *       <li class='jc'>{@link BasicRestResource}
149 *       <li class='jc'>{@link BasicRestResourceGroup}
150 * </ul>
151 *    <li class='link'>{doc jrs.AnnotatedClasses}
152 * </ul>
153 */
154// @formatter:off
155@Rest(
156   serializers={
157      RdfXmlSerializer.class,
158      RdfXmlAbbrevSerializer.class,
159      TurtleSerializer.class,
160      NTripleSerializer.class,
161      N3Serializer.class,
162      JsonLdSerializer.class,
163      NQuadsSerializer.class,
164      TriGSerializer.class,
165      TriXSerializer.class,
166      RdfJsonSerializer.class,
167      RdfThriftSerializer.class,
168      RdfProtoSerializer.class
169   },
170   parsers={
171      RdfXmlParser.class,
172      TurtleParser.class,
173      NTripleParser.class,
174      N3Parser.class,
175      JsonLdParser.class,
176      NQuadsParser.class,
177      TriGParser.class,
178      TriXParser.class,
179      RdfJsonParser.class,
180      RdfThriftParser.class,
181      RdfProtoParser.class
182   }
183)
184public interface BasicUniversalJenaConfig extends BasicUniversalConfig {}