blob: 0ae85560380b5832e734b370ea25b81dbf31be40 [file] [log] [blame]
package org.apache.maven.archetype.common.util;
/*
* Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions, and the disclaimer that follows
* these conditions in the documentation and/or other materials
* provided with the distribution.
*
* 3. The name "JDOM" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact <request_AT_jdom_DOT_org>.
*
* 4. Products derived from this software may not be called "JDOM", nor
* may "JDOM" appear in their name, without prior written permission
* from the JDOM Project Management <request_AT_jdom_DOT_org>.
*
* In addition, we request (but do not require) that you include in the
* end-user documentation provided with the redistribution and/or in the
* software itself an acknowledgement equivalent to the following:
* "This product includes software developed by the
* JDOM Project (http://www.jdom.org/)."
* Alternatively, the acknowledgment may be graphical using the logos
* available at http://www.jdom.org/images/logos.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the JDOM Project and was originally
* created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
* Brett McLaughlin <brett_AT_jdom_DOT_org>. For more information
* on the JDOM Project, please see <http://www.jdom.org/>.
*/
import org.jdom.Namespace;
import java.util.Stack;
/**
* A non-public utility class used by <code>{@link XMLOutputter}</code>
* to manage namespaces in a JDOM Document during output.
*
* @author Elliotte Rusty Harolde
* @author Fred Trimble
* @author Brett McLaughlin
*/
class NamespaceStack
{
/** The prefixes available */
private Stack<String> prefixes;
/** The URIs available */
private Stack<String> uris;
/** This creates the needed storage. */
NamespaceStack()
{
prefixes = new Stack<>();
uris = new Stack<>();
}
/**
* This will add a new <code>{@link Namespace}</code>
* to those currently available.
*
* @param ns <code>Namespace</code> to add.
*/
public void push( Namespace ns )
{
prefixes.push( ns.getPrefix() );
uris.push( ns.getURI() );
}
/**
* This will remove the topmost (most recently added)
* <code>{@link Namespace}</code>, and return its prefix.
*
* @return <code>String</code> - the popped namespace prefix.
*/
public String pop()
{
String prefix = prefixes.pop();
uris.pop();
return prefix;
}
/**
* This returns the number of available namespaces.
*
* @return <code>int</code> - size of the namespace stack.
*/
public int size()
{
return prefixes.size();
}
/**
* Given a prefix, this will return the namespace URI most
* rencently (topmost) associated with that prefix.
*
* @param prefix <code>String</code> namespace prefix.
* @return <code>String</code> - the namespace URI for that prefix.
*/
public String getURI( String prefix )
{
int index = prefixes.lastIndexOf( prefix );
if ( index == -1 )
{
return null;
}
String uri = uris.elementAt( index );
return uri;
}
/**
* This will print out the size and current stack, from the
* most recently added <code>{@link Namespace}</code> to
* the "oldest," all to <code>System.out</code>.
*/
@Override
public String toString()
{
StringBuilder buf = new StringBuilder();
String sep = System.lineSeparator();
buf.append( "Stack: " + prefixes.size() + sep );
for ( int i = 0; i < prefixes.size(); i++ )
{
buf.append( prefixes.elementAt( i ) + "&" + uris.elementAt( i ) + sep );
}
return buf.toString();
}
}