/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. 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.
*
*******************************************************************************/
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.1.1-b02-fcs
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2008.09.15 at 04:04:57 PM IDT
//
package org.apache.wink.common.model.atom;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.List;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Providers;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlMixed;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
import org.apache.wink.common.internal.model.AnyContentHandler;
import org.apache.wink.common.internal.model.ModelUtils;
import org.apache.wink.common.model.synd.SyndText;
import org.apache.wink.common.model.synd.SyndTextType;
/**
* Text Construct Per RFC4287
*
* <pre>
* A Text construct contains human-readable text, usually in small quantities. The content of Text
* constructs is Language-Sensitive.
*
* atomPlainTextConstruct =
* atomCommonAttributes,
* attribute type { "text" | "html" }?,
* text
*
* atomXHTMLTextConstruct =
* atomCommonAttributes,
* attribute type { "xhtml" },
* xhtmlDiv
*
* atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct
*
* o The "type" Attribute
*
* Text constructs MAY have a "type" attribute. When present, the value MUST be one of "text",
* "html", or "xhtml". If the "type" attribute is not provided, Atom Processors MUST behave as
* though it were present with a value of "text". Unlike the atom:content element defined in Section
* 4.1.3, MIME media types [MIMEREG] MUST NOT be used as values for the "type" attribute on Text
* constructs.
*
* o Text
*
* Example atom:title with text content:
*
* ... <title type="text"> Less: < </title> ...
*
* If the value is "text", the content of the Text construct MUST NOT contain child elements. Such
* text is intended to be presented to humans in a readable fashion. Thus, Atom Processors MAY
* collapse white space (including line breaks) and display the text using typographic techniques
* such as justification and proportional fonts.
*
* o HTML
*
* Example atom:title with HTML content:
*
* ... <title type="html"> Less: <em> < </em> </title> ...
*
* If the value of "type" is "html", the content of the Text construct MUST NOT contain child
* elements and SHOULD be suitable for handling as HTML [HTML]. Any markup within MUST be escaped;
* for example, "<br>
* " as "<br>". HTML markup within SHOULD be such that it could validly appear directly within an
* HTML <DIV> element, after unescaping. Atom Processors that display such content MAY use that
* markup to aid in its display.
*
*
* o XHTML
*
* Example atom:title with XHTML content:
*
* ... <title type="xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"> <xhtml:div> Less: <xhtml:em>
* < </xhtml:em> </xhtml:div> </title> ...
*
* If the value of "type" is "xhtml", the content of the Text construct MUST be a single XHTML div
* element [XHTML] and SHOULD be suitable for handling as XHTML. The XHTML div element itself MUST
* NOT be considered part of the content. Atom Processors that display the content MAY use the
* markup to aid in displaying it. The escaped versions of characters such as "&" and ">" represent
* those characters, not markup.
*
*
* Examples of valid XHTML content:
*
* ... <summary type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> This is <b>XHTML</b>
* content. </div> </summary> ... <summary type="xhtml"> <xhtml:div
* xmlns:xhtml="http://www.w3.org/1999/xhtml"> This is <xhtml:b>XHTML</xhtml:b> content.
* </xhtml:div> </summary> ...
*
* The following example assumes that the XHTML namespace has been bound to the "xh" prefix earlier
* in the document:
*
* ... <summary type="xhtml"> <xh:div> This is <xh:b>XHTML</xh:b> content. </xh:div> </summary> ...
* </pre>
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "atomText", propOrder = {"any"})
public class AtomText extends AtomCommonAttributes {
@XmlTransient
private List<Object> any;
@XmlAttribute
protected AtomTextType type;
@XmlTransient
private String savedValue = null;
@XmlMixed
@XmlAnyElement(lax = true, value = AnyContentHandler.class)
List<Object> getAny() {
ModelUtils.fixAnyContent(any, type == null ? null : type.name());
return any;
}
void setAny(List<Object> any) {
this.any = any;
}
/**
* Create an empty AtomText with no type and no value
*/
public AtomText() {
}
/**
* Create an AtomText with a type of AtomTextType.TEXT
*
* @param value the TEXT value
*/
public AtomText(String value) {
this(value, AtomTextType.text);
}
/**
* Create an AtomText with the specified value and type
*
* @param value
* @param type
*/
public AtomText(String value, AtomTextType type) {
setType(type);
setValue(value);
}
public AtomText(SyndText value) {
super(value);
if (value == null) {
return;
}
if (value.getType() != null) {
setType(AtomTextType.valueOf(value.getType().toString()));
}
setValue(value.getValue(Object.class));
}
public SyndText toSynd(SyndText value) {
if (value == null) {
return value;
}
super.toSynd(value);
if (getType() != null) {
value.setType(SyndTextType.valueOf(getType().toString()));
}
value.setValue(getValue(Object.class));
return value;
}
public void setValue(Object value) {
if (value != null) {
any = Arrays.asList(value);
} else {
any = null;
}
}
/**
* <p>
* Gets the content of the "atom:text" element as a String. The "type"
* attribute should be used to determine how to treat the content.
* <p>
* Pay attention that de-serialization occurs each time the method is
* called, so multiple calls to this method may effect the application
* performance.
*/
public String getValue() {
return getValue(String.class);
}
/**
* <p>
* Gets the content of the "atom:text" element serialized to provided class.
* The "type" attribute should be used to determine how to treat the
* content.
* <p>
* Pay attention that de-serialization occurs each time the method is
* called, so multiple calls to this method may effect the application
* performance.
*/
public <T> T getValue(Class<T> cls) {
try {
return getValue(cls,
cls,
null,
ModelUtils.EMPTY_ARRAY,
ModelUtils.EMPTY_STRING_MAP,
ModelUtils.determineMediaType(type == null ? null : type.name()));
} catch (IOException e) {
// should never happen
throw new WebApplicationException(e);
}
}
/**
* <p>
* Gets the content of the "atom:text" element serialized to provided class
* according to provided parameters.
* <p>
* Pay attention that de-serialization occurs each time the method is
* called, so multiple calls to this method may effect the application
* performance.
*/
public <T> T getValue(Class<T> cls,
Type genericType,
Providers providers,
Annotation[] annotations,
MultivaluedMap<String, String> httpHeaders,
MediaType mediaType) throws IOException {
return ModelUtils.readValue(getAny(),
cls,
providers,
genericType,
annotations,
httpHeaders,
mediaType);
}
/**
* Gets the value of type.
*
* @return possible object is {@link AtomTextType }
*/
public AtomTextType getType() {
return type;
}
/**
* Sets the value of type.
*
* @param value allowed object is {@link AtomTextType }
*/
public void setType(AtomTextType type) {
this.type = type;
}
/* package */void revertValue() {
setValue(savedValue);
savedValue = null;
}
/* package */String saveValue() {
this.savedValue = getValue();
setValue(null);
return this.savedValue;
}
}