META-INF.modules.java.desktop.classes.javax.swing.text.html.MuxingAttributeSet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of java.desktop Show documentation
Show all versions of java.desktop Show documentation
Bytecoder java.desktop Module
/*
* Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javax.swing.text.html;
import javax.swing.text.*;
import java.io.Serializable;
import java.util.*;
/**
* An implementation of AttributeSet
that can multiplex
* across a set of AttributeSet
s.
*
*/
@SuppressWarnings("serial") // Same-version serialization only
class MuxingAttributeSet implements AttributeSet, Serializable {
/**
* Creates a MuxingAttributeSet
with the passed in
* attributes.
*/
public MuxingAttributeSet(AttributeSet[] attrs) {
this.attrs = attrs;
}
/**
* Creates an empty MuxingAttributeSet
. This is intended for
* use by subclasses only, and it is also intended that subclasses will
* set the constituent AttributeSet
s before invoking any
* of the AttributeSet
methods.
*/
protected MuxingAttributeSet() {
}
/**
* Directly sets the AttributeSet
s that comprise this
* MuxingAttributeSet
.
*/
protected synchronized void setAttributes(AttributeSet[] attrs) {
this.attrs = attrs;
}
/**
* Returns the AttributeSet
s multiplexing too. When the
* AttributeSet
s need to be referenced, this should be called.
*/
protected synchronized AttributeSet[] getAttributes() {
return attrs;
}
/**
* Inserts as
at index
. This assumes
* the value of index
is between 0 and attrs.length,
* inclusive.
*/
protected synchronized void insertAttributeSetAt(AttributeSet as,
int index) {
int numAttrs = attrs.length;
AttributeSet[] newAttrs = new AttributeSet[numAttrs + 1];
if (index < numAttrs) {
if (index > 0) {
System.arraycopy(attrs, 0, newAttrs, 0, index);
System.arraycopy(attrs, index, newAttrs, index + 1,
numAttrs - index);
}
else {
System.arraycopy(attrs, 0, newAttrs, 1, numAttrs);
}
}
else {
System.arraycopy(attrs, 0, newAttrs, 0, numAttrs);
}
newAttrs[index] = as;
attrs = newAttrs;
}
/**
* Removes the AttributeSet at index
. This assumes
* the value of index
is greater than or equal to 0,
* and less than attrs.length.
*/
protected synchronized void removeAttributeSetAt(int index) {
int numAttrs = attrs.length;
AttributeSet[] newAttrs = new AttributeSet[numAttrs - 1];
if (numAttrs > 0) {
if (index == 0) {
// FIRST
System.arraycopy(attrs, 1, newAttrs, 0, numAttrs - 1);
}
else if (index < (numAttrs - 1)) {
// MIDDLE
System.arraycopy(attrs, 0, newAttrs, 0, index);
System.arraycopy(attrs, index + 1, newAttrs, index,
numAttrs - index - 1);
}
else {
// END
System.arraycopy(attrs, 0, newAttrs, 0, numAttrs - 1);
}
}
attrs = newAttrs;
}
// --- AttributeSet methods ----------------------------
/**
* Gets the number of attributes that are defined.
*
* @return the number of attributes
* @see AttributeSet#getAttributeCount
*/
public int getAttributeCount() {
AttributeSet[] as = getAttributes();
int n = 0;
for (int i = 0; i < as.length; i++) {
n += as[i].getAttributeCount();
}
return n;
}
/**
* Checks whether a given attribute is defined.
* This will convert the key over to CSS if the
* key is a StyleConstants key that has a CSS
* mapping.
*
* @param key the attribute key
* @return true if the attribute is defined
* @see AttributeSet#isDefined
*/
public boolean isDefined(Object key) {
AttributeSet[] as = getAttributes();
for (int i = 0; i < as.length; i++) {
if (as[i].isDefined(key)) {
return true;
}
}
return false;
}
/**
* Checks whether two attribute sets are equal.
*
* @param attr the attribute set to check against
* @return true if the same
* @see AttributeSet#isEqual
*/
public boolean isEqual(AttributeSet attr) {
return ((getAttributeCount() == attr.getAttributeCount()) &&
containsAttributes(attr));
}
/**
* Copies a set of attributes.
*
* @return the copy
* @see AttributeSet#copyAttributes
*/
public AttributeSet copyAttributes() {
AttributeSet[] as = getAttributes();
MutableAttributeSet a = new SimpleAttributeSet();
int n = 0;
for (int i = as.length - 1; i >= 0; i--) {
a.addAttributes(as[i]);
}
return a;
}
/**
* Gets the value of an attribute. If the requested
* attribute is a StyleConstants attribute that has
* a CSS mapping, the request will be converted.
*
* @param key the attribute name
* @return the attribute value
* @see AttributeSet#getAttribute
*/
public Object getAttribute(Object key) {
AttributeSet[] as = getAttributes();
int n = as.length;
for (int i = 0; i < n; i++) {
Object o = as[i].getAttribute(key);
if (o != null) {
return o;
}
}
return null;
}
/**
* Gets the names of all attributes.
*
* @return the attribute names
* @see AttributeSet#getAttributeNames
*/
public Enumeration> getAttributeNames() {
return new MuxingAttributeNameEnumeration();
}
/**
* Checks whether a given attribute name/value is defined.
*
* @param name the attribute name
* @param value the attribute value
* @return true if the name/value is defined
* @see AttributeSet#containsAttribute
*/
public boolean containsAttribute(Object name, Object value) {
return value.equals(getAttribute(name));
}
/**
* Checks whether the attribute set contains all of
* the given attributes.
*
* @param attrs the attributes to check
* @return true if the element contains all the attributes
* @see AttributeSet#containsAttributes
*/
public boolean containsAttributes(AttributeSet attrs) {
boolean result = true;
Enumeration> names = attrs.getAttributeNames();
while (result && names.hasMoreElements()) {
Object name = names.nextElement();
result = attrs.getAttribute(name).equals(getAttribute(name));
}
return result;
}
/**
* Returns null, subclasses may wish to do something more
* intelligent with this.
*/
public AttributeSet getResolveParent() {
return null;
}
/**
* The AttributeSet
s that make up the resulting
* AttributeSet
.
*/
private AttributeSet[] attrs;
/**
* An Enumeration of the Attribute names in a MuxingAttributeSet.
* This may return the same name more than once.
*/
private class MuxingAttributeNameEnumeration implements Enumeration
© 2015 - 2024 Weber Informatics LLC | Privacy Policy