    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}