/******************************************************************************* * Copyright (c) 2006-2008, Cloudsmith Inc. * The code, documentation and other materials contained herein have been * licensed under the Eclipse Public License - v 1.0 by the copyright holder * listed above, as the Initial Contributor under such license. The text of * such license is available at www.eclipse.org. ******************************************************************************/ package org.eclipse.buckminster.opml.model; import org.eclipse.buckminster.opml.IBody; import org.eclipse.buckminster.opml.IHead; import org.eclipse.buckminster.opml.IOPML; import org.eclipse.buckminster.opml.builder.OPMLBuilder; import org.eclipse.buckminster.sax.UUIDKeyed; import org.eclipse.buckminster.sax.Utils; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; /** * @author Thomas Hallgren * */ public class OPML extends UUIDKeyed implements IOPML { public static final String OPML_NAMESPACE = "http://opml.org/spec2"; //$NON-NLS-1$ public static final String OPML_PREFIX = "opml"; //$NON-NLS-1$ public static final String OPML_NS_RESOURCE = "/opml-2.0-ns.xsd"; //$NON-NLS-1$ public static final String ATTR_VERSION = "version"; //$NON-NLS-1$ public static final String TAG = "opml"; //$NON-NLS-1$ public static final int SEQUENCE_NUMBER = 1; private final Body m_body; private final Head m_head; private final String m_version; public OPML(OPMLBuilder builder) { m_version = builder.getVersion(); m_head = new Head(builder.getHeadBuilder()); m_body = new Body(builder.getBodyBuilder()); } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public Object getAdapter(Class adapter) { if(adapter.isAssignableFrom(OPMLBuilder.class)) { OPMLBuilder bld = new OPMLBuilder(); bld.initFrom(this); return bld; } return super.getAdapter(adapter); } public IBody getBody() { return m_body; } public String getDefaultTag() { return TAG; } public IHead getHead() { return m_head; } public String getVersion() { return m_version; } public void toSax(ContentHandler receiver) throws SAXException { receiver.startDocument(); toSax(receiver, "", "", TAG); //$NON-NLS-1$ //$NON-NLS-2$ receiver.endDocument(); } @Override protected void addAttributes(AttributesImpl attrs) throws SAXException { if(m_version != null) Utils.addAttribute(attrs, ATTR_VERSION, m_version); } @Override protected void emitElements(ContentHandler handler, String namespace, String prefix) throws SAXException { m_head.toSax(handler, namespace, prefix, m_head.getDefaultTag()); m_body.toSax(handler, namespace, prefix, m_body.getDefaultTag()); } @Override protected String getElementNamespace(String namespace) { return "".equals(namespace) ? "" : OPML_NAMESPACE; //$NON-NLS-1$ //$NON-NLS-2$ } @Override protected String getElementPrefix(String prefix) { return "".equals(prefix) ? "" : OPML_PREFIX; //$NON-NLS-1$ //$NON-NLS-2$ } }