blob: 1ffdc2bfd98578a994797653a4c6183cd6658df0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.axiom.core;
/**
* Selects, creates or updates an attribute based on some match rule.
*/
public interface AttributeMatcher {
/**
* Check if the given attribute matches. The values of the <code>namespaceURI</code> and
* <code>name</code> parameters are those passed to
* {@link CoreElement#coreGetAttribute(AttributeMatcher, String, String)} or
* {@link CoreElement#coreSetAttribute(AttributeMatcher, String, String, String, String)}, or
* they are determined by the return values of {@link #getNamespaceURI(CoreAttribute)} and
* {@link #getName(CoreAttribute)} if
* {@link CoreElement#coreSetAttribute(AttributeMatcher, CoreAttribute, Semantics)}
* is used. It is
* not required that these parameters strictly represent the namespace URI and local name of the
* attribute. Their exact meaning is defined by the particular {@link AttributeMatcher}
* implementation.
*
* @param attr
* the attribute to check
* @param namespaceURI
* see above
* @param name
* see above
* @return <code>true</code> if the attribute matches, <code>false</code> otherwise
*/
boolean matches(CoreAttribute attr, String namespaceURI, String name);
/**
* Get the {@code namespaceURI} parameter for an existing attribute. This method is used by
* {@link CoreElement#coreSetAttribute(AttributeMatcher, CoreAttribute, Semantics)}
* which passes its return value as parameter to {@link #matches(CoreAttribute, String, String)}.
*
* @param attr the attribute
* @return the {@code namespaceURI} parameter to be passed to {@link #matches(CoreAttribute, String, String)}
*/
String getNamespaceURI(CoreAttribute attr);
/**
* Get the {@code name} parameter for an existing attribute. This method is used by
* {@link CoreElement#coreSetAttribute(AttributeMatcher, CoreAttribute, Semantics)}
* which passes its return value as parameter to {@link #matches(CoreAttribute, String, String)}.
*
* @param attr the attribute
* @return the {@code name} parameter to be passed to {@link #matches(CoreAttribute, String, String)}
*/
String getName(CoreAttribute attr);
/**
* Create a new attribute node. The values of the <code>namespaceURI</code>, <code>name</code>,
* <code>prefix</code> and <code>value</code> parameters are those passed to
* {@link CoreElement#coreSetAttribute(AttributeMatcher, String, String, String, String)}.
*
* @param element
* the instance to be used to invoke {@link CoreNode#coreCreateNode(Class)}
* @param namespaceURI
* see above
* @param name
* see above
* @param prefix
* see above
* @param value
* see above
* @return
* @throws CoreModelException
*/
CoreAttribute createAttribute(CoreElement element, String namespaceURI, String name, String prefix, String value) throws CoreModelException;
/**
* Update an existing attribute. The values of the <code>prefix</code> and <code>value</code>
* parameters are those passed to
* {@link CoreElement#coreSetAttribute(AttributeMatcher, String, String, String, String)}.
*
* @param attr
* the attribute to update
* @param prefix
* see above
* @param value
* see above
* @throws CoreModelException
*/
void update(CoreAttribute attr, String prefix, String value) throws CoreModelException;
}