All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.webdav.dom.HrefSet Maven / Gradle / Ivy

Go to download

We build this plugin because eclipse no longer distributes it and Guvnor tools needs it.

There is a newer version: 7.48.0.Final
Show newest version
package org.eclipse.webdav.dom;

import java.util.Enumeration;
import java.util.NoSuchElementException;
import org.eclipse.webdav.Policy;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 * An element editor for sets of hrefs, for example, the WebDAV
 * predecessor-set element.
 * 

* Note: This class/interface is part of an interim API that is still under * development and expected to change significantly before reaching stability. * It is being made available at this early stage to solicit feedback from pioneering * adopters on the understanding that any code that uses this API will almost * certainly be broken (repeatedly) as the API evolves. *

*/ public class HrefSet extends ElementEditor { /** * Creates a new editor on the given href set element with the given * name. The element is assumed to be well formed. * * @param root an href element * @param name the name of the element that this editor is expected * to manipulate. * @throws MalformedElementException if there is reason to * believe that the element is not well formed */ public HrefSet(Element root, QualifiedName name) throws MalformedElementException { super(root, name.getLocalName()); ensure(DAV_NS.equals(name.getQualifier()), Policy.bind("ensure.mustHaveDAVQualifier")); //$NON-NLS-1$ } /** * Adds the given href to the end of the set of hrefs. If the href * already exists it is not added. * * @param href the href to add to the end of the set of hrefs */ public void addHref(String href) { String encodedHref = encodeHref(href); if (isDuplicate(encodedHref)) return; appendChild(root, "href", encodedHref); //$NON-NLS-1$ } /** * Creates a new href set element with the given name and sets it as * the root of the given document. Returns an editor on the new href set * element. The document must not be null, and must not * already have a root element. * * @param document the document that will become the root of a new * href set element * @return an element editor on a href set element */ public static HrefSet create(Document document, QualifiedName name) { Assert.isNotNull(document); Assert.isTrue(document.getOwnerDocument() == null); Assert.isNotNull(name); Assert.isTrue(DAV_NS.equals(name.getQualifier())); Element element = create(document, name.getLocalName()); try { return new HrefSet(element, name); } catch (MalformedElementException e) { Assert.isTrue(false, Policy.bind("assert.internalError")); //$NON-NLS-1$ return null; // Never reached. } } /** * Returns an Enumeration over the set of hrefs. * * @return an Enumeration of href Strings */ public Enumeration getHrefs() { final Element firstHref = getFirstChild(root, "href"); //$NON-NLS-1$ Enumeration e = new Enumeration() { Element currentHref = firstHref; public boolean hasMoreElements() { return currentHref != null; } public Object nextElement() { if (!hasMoreElements()) throw new NoSuchElementException(); String href = getFirstText(currentHref); currentHref = getNextSibling(currentHref, "href"); //$NON-NLS-1$ return decodeHref(href); } }; return e; } /** * Inserts the given newHref after the given refHref in the set of * hrefs. If newHref already exists it is not inserted. * * @param refHref the existing href * @param newHref the new href to be inserted after the existing href */ public void insertHrefAfter(String refHref, String newHref) { String refHrefEncoded = encodeHref(refHref); String newHrefEncoded = encodeHref(newHref); if (isDuplicate(newHrefEncoded)) return; Element child = getFirstChild(root, "href"); //$NON-NLS-1$ while (child != null) { if (refHrefEncoded.equals(getFirstText(child))) { Element nextSibling = getNextSibling(child, "href"); //$NON-NLS-1$ if (nextSibling == null) appendChild(root, "href", newHrefEncoded); //$NON-NLS-1$ else insertBefore(nextSibling, "href", newHrefEncoded); //$NON-NLS-1$ return; } child = getNextSibling(child, "href"); //$NON-NLS-1$ } Assert.isTrue(false, Policy.bind("assert.noHrefRef")); //$NON-NLS-1$ } /** * Inserts the given newHref before the given refHref in the set of * hrefs. If newHref already exists it is not inserted. * * @param refHref the existing href * @param newHref the new href to be inserted before the existing href */ public void insertHrefBefore(String newHref, String refHref) { String refHrefEncoded = encodeHref(refHref); String newHrefEncoded = encodeHref(newHref); if (isDuplicate(newHrefEncoded)) return; Element child = getFirstChild(root, "href"); //$NON-NLS-1$ while (child != null) { if (refHrefEncoded.equals(getFirstText(child))) { insertBefore(child, "href", newHrefEncoded); //$NON-NLS-1$ return; } child = getNextSibling(child, "href"); //$NON-NLS-1$ } Assert.isTrue(false, Policy.bind("assert.noHrefRef")); //$NON-NLS-1$ } protected boolean isDuplicate(String encodedHref) { Element child = getFirstChild(root, "href"); //$NON-NLS-1$ while (child != null) { if (encodedHref.equals(getFirstText(child))) return true; child = getNextSibling(child, "href"); //$NON-NLS-1$ } return false; } /** * Remove the given href from the set of hrefs. * * @param href the href to remove from the set of hrefs */ public void removeHref(String href) { String encodedHref = encodeHref(href); Element child = getFirstChild(root, "href"); //$NON-NLS-1$ while (child != null) { if (encodedHref.equals(getFirstText(child))) { root.removeChild(child); return; } child = getNextSibling(child, "href"); //$NON-NLS-1$ } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy