All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.abdera.model.Content Maven / Gradle / Ivy

There is a newer version: 2024.11.18751.20241128T090041Z-241100
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  The ASF licenses this file to You
 * under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.  For additional information regarding
 * copyright in this work, please see the NOTICE file in the top level
 * directory of this distribution.
 */
package org.apache.abdera.model;

import javax.activation.DataHandler;
import javax.activation.MimeType;
import org.apache.abdera.util.MimeTypeHelper;
import org.apache.abdera.i18n.iri.IRI;

/**
 *  

* Represents an atom:content element. *

*

* Atom has a very clearly defined and extremely flexible content model. The model allows for five basic types of * content: *

*
    *
  • Text, consisting of content that is to be interpreted as plain text with no markup. For instance, * <content type="text">&lt;content&gt;</content> is interpreted as literal characer "<" * followed by the word "content", followed by the literal character ">".
  • *
  • HTML, consisting of content that is to be interpreted as escaped HTML markup. For instance, * <content type="html">&lt;b&gt;content&lt;/b&gt;</content> is interpreted as the * word "content" surrounded by the HTML <b> and </b> tags.
  • *
  • XHTML, consisting of well-formed XHTML content wrapped in an XHTML div element. For instance, * <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><b>Content</b></div></content> * .
  • *
  • XML, consisting of well-formed XML content. For instance, * <content type="application/xml"><a xmlns="..."><b><c/></b></a></content>. The * content could, alternatively, be linked to via the src attribute, * <content type="application/xml" src="http://example.org/foo.xml"/>.
  • *
  • Media, consisting of content conforming to any MIME media type. *
      *
    • Text media types are encoded literally, e.g. * <content type="text/calendar">BEGIN:VCALENDAR...</content>.
    • *
    • Other media types are encoded as Base64 strings, e.g. * <content type="image/jpeg">{Base64}</content>.
    • *
    • Alternatively, media content may use the src attribute, * <content type="text/calendar" src="http://example.org/foo.cal"/>, * <content type="image/jpeg" src="http://example.org/foo.jpg" />
    • *
    *
  • *
*

* Per RFC4287: *

* *
 *   The "atom:content" element either contains or links to the content of
 *   the entry.  The content of atom:content is Language-Sensitive.
 *
 *   atomInlineTextContent =
 *      element atom:content {
 *         atomCommonAttributes,
 *         attribute type { "text" | "html" }?,
 *         (text)*
 *      }
 *
 *   atomInlineXHTMLContent =
 *      element atom:content {
 *         atomCommonAttributes,
 *         attribute type { "xhtml" },
 *         xhtmlDiv
 *      }
 *   atomInlineOtherContent =
 *      element atom:content {
 *         atomCommonAttributes,
 *         attribute type { atomMediaType }?,
 *         (text|anyElement)*
 *      }
 *
 *   atomOutOfLineContent =
 *      element atom:content {
 *         atomCommonAttributes,
 *         attribute type { atomMediaType }?,
 *         attribute src { atomUri },
 *         empty
 *      }
 *
 *   atomContent = atomInlineTextContent
 *    | atomInlineXHTMLContent
 *    | atomInlineOtherContent
 *    | atomOutOfLineContent
 *
 *  
* * @deprecated This API is deprecated as Apache Abdera is a retired project since 2017. */ @Deprecated(since = "2021-07-29") public interface Content extends Element { /** * Used to identify the type of content */ public enum Type { /** * Plain text * */ TEXT, /** * Escaped HTML * */ HTML, /** * Welformed XHTML * */ XHTML, /** * Welformed XML * */ XML, /** * Base64-encoded Binary * */ MEDIA; /** * Return an appropriate Type given the specified @type attribute value */ public static Type typeFromString(String val) { Type type = TEXT; if (val != null) { if (val.equalsIgnoreCase("text")) type = TEXT; else if (val.equalsIgnoreCase("html")) type = HTML; else if (val.equalsIgnoreCase("xhtml")) type = XHTML; else if (MimeTypeHelper.isXml(val)) type = XML; else { type = MimeTypeHelper.isMimeType(val) ? MEDIA : null; } } return type; } } /** * Returns the Content Type * * @return The Content Type */ Type getContentType(); /** * Set the Content Type * * @param type The Content Type */ Content setContentType(Type type); /** * Return the value element or null if type="text", type="html" or type is some non-XML media type * * @return The first child element of the atom:content element or null */ T getValueElement(); /** * Set the value element of the content. If the value is a Div, the type attribute will be set to type="xhtml", * otherwise, the attribute will be set to type="application/xml" * * @param value The element to set */ Content setValueElement(T value); /** * RFC4287: On the atom:content element, the value of the "type" attribute MAY be one of "text", "html", or "xhtml". * Failing that, it MUST conform to the syntax of a MIME media type, but MUST NOT be a composite type. If neither * the type attribute nor the src attribute is provided, Atom Processors MUST behave as though the type attribute * were present with a value of "text". * * @return null if type = text, html or xhtml, otherwise a media type */ MimeType getMimeType(); /** * RFC4287: On the atom:content element, the value of the "type" attribute MAY be one of "text", "html", or "xhtml". * Failing that, it MUST conform to the syntax of a MIME media type, but MUST NOT be a composite type. If neither * the type attribute nor the src attribute is provided, Atom Processors MUST behave as though the type attribute * were present with a value of "text". * * @param type The media type * @throws MimeTypeParseException if the media type is malformed */ Content setMimeType(String type); /** *

* RFC4287: atom:content MAY have a "src" attribute, whose value MUST be an IRI reference. If the "src" attribute is * present, atom:content MUST be empty. Atom Processors MAY use the IRI to retrieve the content and MAY choose to * ignore remote content or to present it in a different manner than local content. *

*

* If the "src" attribute is present, the "type" attribute SHOULD be provided and MUST be a MIME media type, rather * than "text", "html", or "xhtml". *

* * @return The IRI value of the src attribute or null if none * @throws IRISyntaxException if the src attribute value is malformed */ IRI getSrc(); /** * Returns the fully qualified URI form of the content src attribute. * * @return The IRI value of the src attribute resolved against the in-scope Base URI * @throws IRISyntaxException if the src attribute value is malformed */ IRI getResolvedSrc(); /** *

* RFC4287: atom:content MAY have a "src" attribute, whose value MUST be an IRI reference. If the "src" attribute is * present, atom:content MUST be empty. Atom Processors MAY use the IRI to retrieve the content and MAY choose to * ignore remote content or to present it in a different manner than local content. *

*

* If the "src" attribute is present, the "type" attribute SHOULD be provided and MUST be a MIME media type, rather * than "text", "html", or "xhtml". *

* * @param src The IRI to use as the src attribute value for the content * @throws IRISyntaxException if the src value is malformed */ Content setSrc(String src); /** * Attempts to Base64 decode the string value of the content element. * * @return A DataHandler or null * @throws UnsupportedOperationException if type = text, html, xhtml, or any application/*+xml, or text/* type */ DataHandler getDataHandler(); /** * Sets the string value of the content element by Base64 encoding the specifed byte array. * * @param dataHandler The DataHandler for the binary content requiring Base64 encoding * @throws UnsupportedOperationException if type = text, html, xhtml, or any application/*+xml, or text/* type */ Content setDataHandler(DataHandler dataHandler); /** * Returns the string value of this atom:content element * * @return The string value */ String getValue(); /** * Set the string value of the atom:content element * * @param value The string value */ Content setValue(String value); /** * Return the string value of the atom:content element with the enclosing div tag if type="xhtml" * * @return The div wrapped value */ String getWrappedValue(); /** * Set the string value of the atom:content with the enclosing div tag * * @param wrappedValue The string value with the wrapping div tag */ Content setWrappedValue(String wrappedValue); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy