Java tutorial
/* * Copyright 2005 Open Source Applications Foundation * * Licensed 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. */ package org.osaf.caldav4j.xml; import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osaf.caldav4j.exceptions.DOMValidationException; import org.w3c.dom.DOMException; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; public abstract class OutputsDOMBase implements OutputsDOM { private static final Log log = LogFactory.getLog(OutputsDOMBase.class); protected abstract String getElementName(); protected abstract String getNamespaceQualifier(); protected abstract String getNamespaceURI(); protected abstract Collection<? extends OutputsDOM> getChildren(); protected abstract Map<String, String> getAttributes(); protected String getQualifiedName() { return getNamespaceQualifier() + ":" + getElementName(); } protected abstract String getTextContent(); public void validate() throws DOMValidationException { return; } public Element outputDOM(Document document) throws DOMValidationException { Element e = document.createElementNS(getNamespaceURI(), getQualifiedName()); fillElement(e); return e; } public Document createNewDocument(DOMImplementation domImplementation) throws DOMException, DOMValidationException { validate(); Document d = domImplementation.createDocument(getNamespaceURI(), getQualifiedName(), null); Element root = (Element) d.getFirstChild(); fillElement(root); return d; } protected void fillElement(Element e) throws DOMValidationException { /* * Add children elements */ Collection<? extends OutputsDOM> children = getChildren(); if (children != null && children.size() != 0) { Iterator<? extends OutputsDOM> i = children.iterator(); while (i.hasNext()) { OutputsDOM node = (OutputsDOM) i.next(); Element childNode = node.outputDOM(e.getOwnerDocument()); e.appendChild(childNode); } } if (getTextContent() != null) { e.setTextContent(getTextContent()); } /* * Add Attributes */ Map attributes = getAttributes(); if (attributes != null && attributes.size() > 0) { Iterator<Entry> i = attributes.entrySet().iterator(); while (i.hasNext()) { Entry entry = i.next(); e.setAttribute(entry.getKey().toString(), entry.getValue().toString()); } } } /** * Convienience method for validating all the objects in a collection * @param c * @throws DOMValidationException */ protected void validate(Collection<? extends OutputsDOM> c) throws DOMValidationException { for (Iterator<? extends OutputsDOM> i = c.iterator(); i.hasNext();) { OutputsDOM o = (OutputsDOM) i.next(); o.validate(); } } protected void throwValidationException(String m) throws DOMValidationException { String message = getQualifiedName() + " - " + m; throw new DOMValidationException(message); } }