/**
* Copyright 2010 JBoss Inc
*
* 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.eclipse.webdav.internal.kernel;
import java.util.Enumeration;
import org.eclipse.webdav.dom.QualifiedName;
import org.eclipse.webdav.internal.kernel.utils.Assert;
import org.w3c.dom.*;
public class ElementHelper implements WebDAVConstants {
// This W3C Document is the factory for Nodes
// produced by this class.
protected Document nodeFactory;
protected final static String DAV_PREFIX = "D"; //$NON-NLS-1$
protected final static String NS_SEPARATOR = ":"; //$NON-NLS-1$
protected final static String DAV_NS_ATTRIB = "xmlns" + NS_SEPARATOR + DAV_PREFIX; //$NON-NLS-1$
public ElementHelper() {
super();
IDocumentFactory factory = new DocumentFactory();
this.nodeFactory = factory.newDocument();
}
public String extractText(Element element) {
NodeList childNodes = element.getChildNodes();
Assert.isTrue(childNodes.getLength() == 1, Policy.bind("error.requireElementWithSingleChild")); //$NON-NLS-1$
Node child = childNodes.item(0);
Assert.isTrue(child instanceof Text, Policy.bind("error.extractFromElementWithoutText")); //$NON-NLS-1$
return ((Text) child).getData();
}
public Element newDAVElement(QualifiedName name) {
Assert.isTrue(name.getQualifier().equals(DAV_URI), Policy.bind("error.davElementsNeedQualifier")); //$NON-NLS-1$
Element element = nodeFactory.createElement(DAV_PREFIX + NS_SEPARATOR + name.getLocalName());
element.setAttribute(DAV_NS_ATTRIB, DAV_URI);
return element;
}
/**
* Answer a DOM <code>Element</code> that represents a set of <code>String</code>.
* <p>
* The set is represented by a single <code>Element</code> whose name is
* given as the <code>setName</code> argument. Each member of the set is
* a child <code>Element</code> named <code>memberName</code> that has
* text taken from the <code>memberEnum</code> an <code>Enumeration</code>
* of <code>String</code>.
*/
public Element newDAVElementSet(QualifiedName setName, QualifiedName memberName, Enumeration memberEnum) {
Element setElement = newDAVElement(setName);
while (memberEnum.hasMoreElements()) {
String member = (String) memberEnum.nextElement();
Element memberElement = newDAVTextElement(memberName, member);
setElement.appendChild(memberElement);
}
return setElement;
}
public Element newDAVProperty(QualifiedName name, String value) {
Element element = newDAVElement(name);
element.appendChild(nodeFactory.createTextNode(value));
return element;
}
public Element newDAVProperty(QualifiedName name, Element value) {
Element element = newDAVElement(name);
element.appendChild(value);
return element;
}
public Element newDAVTextElement(QualifiedName name, String value) {
Element element = newDAVElement(name);
element.appendChild(nodeFactory.createTextNode(value));
return element;
}
public Element newTextElement(String name, String value) {
Element element = nodeFactory.createElement(name);
element.appendChild(nodeFactory.createTextNode(value));
return element;
}
}