001// Copyright 2009 The Apache Software Foundation
002//
003// Licensed under the Apache License, Version 2.0 (the "License");
004// you may not use this file except in compliance with the License.
005// You may obtain a copy of the License at
006//
007//     http://www.apache.org/licenses/LICENSE-2.0
008//
009// Unless required by applicable law or agreed to in writing, software
010// distributed under the License is distributed on an "AS IS" BASIS,
011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012// See the License for the specific language governing permissions and
013// limitations under the License.
014
015package org.apache.tapestry5.dom;
016
017import org.apache.tapestry5.internal.TapestryInternalUtils;
018
019import java.util.Map;
020
021/**
022 * An attribute within an {@link org.apache.tapestry5.dom.Element}. Each attribute has a namespace URI, a local name
023 * within the namespace, and a value.
024 *
025 * @since 5.1.0.2
026 */
027public class Attribute
028{
029    private final Element element;
030
031    private final String namespace;
032
033    private final String name;
034
035    String value;
036
037    Attribute nextAttribute;
038
039    Attribute(Element element, String namespace, String name, String value, Attribute nextAttribute)
040    {
041        this.element = element;
042        this.namespace = namespace;
043        this.name = name;
044        this.value = value;
045        this.nextAttribute = nextAttribute;
046    }
047
048    public String getName()
049    {
050        return name;
051    }
052
053    public String getNamespace()
054    {
055        return namespace;
056    }
057
058    public String getValue()
059    {
060        return value;
061    }
062
063    void render(MarkupModel model, StringBuilder builder, Map<String, String> namespaceURIToPrefix)
064    {
065        builder.append(' ');
066        builder.append(element.toPrefixedName(namespaceURIToPrefix, namespace, name));
067        builder.append('=');
068        builder.append(model.getAttributeQuote());
069        model.encodeQuoted(value, builder);
070        builder.append(model.getAttributeQuote());
071    }
072
073    boolean matches(String namespace, String name)
074    {
075        return TapestryInternalUtils.isEqual(this.namespace, namespace) &&
076                this.name.equalsIgnoreCase(name);
077    }
078}