org.osaf.caldav4j.xml.OutputsDOMBase.java Source code

Java tutorial

Introduction

Here is the source code for org.osaf.caldav4j.xml.OutputsDOMBase.java

Source

/*
 * 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);
    }
}