blob: aa64b443c20c65da70d6d81aa8a12479d44fec62 [file] [log] [blame]
package org.codehaus.jackson.jaxb;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.annotation.*;
import org.w3c.dom.Element;
/**
* <p>Represents an atom:content element.</p>
* <p/>
* <p>Per RFC4287:</p>
* <p/>
* <pre>
* The "atom:content" element either contains or links to the content of
* the entry. The content of atom:content is Language-Sensitive.
* <p/>
* atomInlineTextContent =
* element atom:content {
* atomCommonAttributes,
* attribute type { "text" | "html" }?,
* (text)*
* }
* <p/>
* atomInlineXHTMLContent =
* element atom:content {
* atomCommonAttributes,
* attribute type { "xhtml" },
* xhtmlDiv
* }
* atomInlineOtherContent =
* element atom:content {
* atomCommonAttributes,
* attribute type { atomMediaType }?,
* (text|anyElement)*
* }
* <p/>
* atomOutOfLineContent =
* element atom:content {
* atomCommonAttributes,
* attribute type { atomMediaType }?,
* attribute src { atomUri },
* empty
* }
* <p/>
* atomContent = atomInlineTextContent
* | atomInlineXHTMLContent
* | atomInlineOtherContent
* | atomOutOfLineContent
* <p/>
* </pre>
*
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision$
*/
@XmlRootElement(name = "content")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Content extends CommonAttributes
{
private String type;
private MediaType mediaType;
private String text;
private Element element;
private URI src;
private List<Object> value;
protected Object jaxbObject;
@XmlAnyElement
@XmlMixed
public List<Object> getValue()
{
return value;
}
public void setValue(List<Object> value)
{
this.value = value;
}
@XmlAttribute
public URI getSrc()
{
return src;
}
public void setSrc(URI src)
{
this.src = src;
}
/**
* Mime type of the content
*/
@XmlTransient
public MediaType getType()
{
if (mediaType == null)
{
if (type.equals("html")) mediaType = MediaType.TEXT_HTML_TYPE;
else if (type.equals("text")) mediaType = MediaType.TEXT_PLAIN_TYPE;
else if (type.equals("xhtml")) mediaType = MediaType.APPLICATION_XHTML_XML_TYPE;
else mediaType = MediaType.valueOf(type);
}
return mediaType;
}
public void setType(MediaType type)
{
mediaType = type;
if (type.equals(MediaType.TEXT_PLAIN_TYPE)) this.type = "text";
else if (type.equals(MediaType.TEXT_HTML_TYPE)) this.type = "html";
else if (type.equals(MediaType.APPLICATION_XHTML_XML_TYPE)) this.type = "xhtml";
else this.type = type.toString();
}
@XmlAttribute(name = "type")
public String getRawType()
{
return type;
}
public void setRawType(String type)
{
this.type = type;
}
/**
* If content is text, return it as a String. Otherwise, if content is not text this will return null.
*/
@XmlTransient
public String getText()
{
if (value == null) return null;
if (value.size() == 0) return null;
if (text != null) return text;
StringBuffer buf = new StringBuffer();
for (Object obj : value)
{
if (obj instanceof String) buf.append(obj.toString());
}
text = buf.toString();
return text;
}
/**
* Set content as text
*
* @param text
*/
public void setText(String text)
{
if (value == null) value = new ArrayList<Object>();
if (this.text != null && value != null) value.clear();
this.text = text;
value.add(text);
}
/**
* Get content as an XML Element if the content is XML. Otherwise, this will just return null.
*/
@XmlTransient
public Element getElement()
{
if (value == null) return null;
if (element != null) return element;
for (Object obj : value)
{
if (obj instanceof Element)
{
element = (Element) obj;
return element;
}
}
return null;
}
/**
* Set the content to an XML Element
*
* @param element
*/
public void setElement(Element element)
{
if (value == null) value = new ArrayList<Object>();
if (this.element != null && value != null) value.clear();
this.element = element;
value.add(element);
}
}