// $Id$
// Author: Jean-Guilhem Rouel
// (c) COPYRIGHT MIT, ERCIM and Keio, 2005.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.selectors;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
/**
* Attribute
* Created: Sep 1, 2005 3:39:15 PM
*/
public abstract class AttributeSelector implements Selector {
private String prefix;
private String name;
private String modifier;
private String _prefixed_name = null;
private String _ending_string = null;
static final String[] allowed_modifier = {"i", "s"};
static final boolean isValidModifier(String modifier) {
for (String s : allowed_modifier) {
if (s.equals(modifier)) {
return true;
}
}
return false;
}
/**
* Creates a new empty attribute selector
*/
public AttributeSelector() {
}
/**
* Creates a new attribute selector given its name
*
* @param name the name of this attribute
*/
public AttributeSelector(String name) {
this(name, null, null);
}
/**
* Creates a new attribute selector given its name
*
* @param name the name of this attribute
*/
public AttributeSelector(String name, String prefix, String modifier) {
this.name = name;
this.prefix = prefix;
this.modifier = modifier;
}
public AttributeSelector(String name, String prefix) {
this(name, prefix, null);
}
/**
* Sets the name of this attribute selector
*
* @param name the name of this attribute
*/
public void setName(String name) {
this.name = name;
_prefixed_name = null;
}
/**
* @see Selector#getName()
*/
public String getName() {
return name;
}
/**
* Sets the namespace prefix of this attribute selector
*
* @param prefix the name of this attribute
*/
public void setPrefix(String prefix) {
this.prefix = prefix;
_prefixed_name = null;
}
public String getPrefix() {
return prefix;
}
/**
* Sets the modifier of this attribute selector
*
* @param modifier the name of this attribute
*/
public void setModifier(String modifier, ApplContext ac)
throws InvalidParamException {
if (!isValidModifier(modifier)) {
throw new InvalidParamException("value", modifier, getPrefixedName(), ac);
}
this.modifier = modifier;
}
public String getModifier() {
return modifier;
}
public abstract void applyAttribute(ApplContext ac, AttributeSelector attr);
public String getPrefixedName() {
if (_prefixed_name == null) {
if (prefix == null) {
_prefixed_name = name;
} else {
StringBuilder sb = new StringBuilder();
_prefixed_name = sb.append(prefix).append('|').append(name).toString();
}
}
return _prefixed_name;
}
public String getEndingString() {
if (_ending_string == null) {
if (modifier == null) {
_ending_string = "]";
} else {
StringBuilder sb = new StringBuilder();
_ending_string = sb.append(" ").append(modifier).append(']').toString();
}
}
return _ending_string;
}
/**
* @see Selector#toString()
*/
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append('[').append(getPrefixedName()).append(getEndingString());
return sb.toString();
}
}