OdfStyleProperty.java
/**
* **********************************************************************
*
* <p>DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* <p>Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.
*
* <p>Use is subject to license terms.
*
* <p>Licensed 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. You can also obtain a copy of the License at
* http://odftoolkit.org/docs/license.txt
*
* <p>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.
*
* <p>See the License for the specific language governing permissions and limitations under the
* License.
*
* <p>**********************************************************************
*/
package org.odftoolkit.odfdom.dom.style.props;
import java.util.Iterator;
import java.util.TreeSet;
import org.odftoolkit.odfdom.pkg.OdfName;
/**
* Class to represent a odf style attribut. Each instance has a name and belongs to an ODF
* style-properties element.
*/
public class OdfStyleProperty implements Comparable<OdfStyleProperty> {
private OdfStylePropertiesSet m_propSet;
private OdfName m_name;
private OdfStyleProperty(OdfStylePropertiesSet propSet, OdfName name) {
m_propSet = propSet;
m_name = name;
}
private static TreeSet<OdfStyleProperty> m_styleProperties = new TreeSet<OdfStyleProperty>();
/**
* Looks if an OdfStyleProperty is already listed in the static sytleProperties set, otherwise
* creates a new one.
*
* @param propSet an OdfStylePropertiesSet member
* @param name
* @return new created or existing OdfStylePorperty
*/
public static OdfStyleProperty get(OdfStylePropertiesSet propSet, OdfName name) {
OdfStyleProperty temp = new OdfStyleProperty(propSet, name);
// Replacement for (JDK1.6)
// OdfStyleProperty result = m_styleProperties.floor(temp);
Iterator<OdfStyleProperty> iter = m_styleProperties.iterator();
OdfStyleProperty result = null;
// check if key exists
if (!m_styleProperties.contains(temp)) {
m_styleProperties.add(temp);
return temp;
}
while (iter.hasNext()) {
result = iter.next();
if (result.equals(temp)) {
return result;
}
}
m_styleProperties.add(temp);
return temp;
}
/** @return an OdfStylePropertiesSet member */
public OdfStylePropertiesSet getPropertySet() {
return m_propSet;
}
/** @return name of OdfStyleProperty instance */
public OdfName getName() {
return m_name;
}
/** @inheritDoc */
@Override
public String toString() {
return m_name.getQName();
}
public OdfStyleProperty copy() {
OdfStyleProperty clone = new OdfStyleProperty(m_propSet, m_name);
return clone;
}
/** @inheritDoc */
@Override
public int hashCode() {
int hash = 3;
hash = 83 * hash + (this.m_propSet != null ? this.m_propSet.hashCode() : 0);
hash = 83 * hash + (this.m_name != null ? this.m_name.hashCode() : 0);
return hash;
}
/** @inheritDoc */
@Override
public boolean equals(Object o) {
if (o instanceof OdfStyleProperty) {
OdfStyleProperty sp = (OdfStyleProperty) o;
return compareTo(sp) == 0;
}
return false;
}
public int compareTo(OdfStyleProperty o) {
if (!(o instanceof OdfStyleProperty)) {
return -1;
}
OdfStyleProperty prop = o;
int c = 0;
if ((c = m_propSet.compareTo(prop.m_propSet)) != 0) {
return c;
}
if ((c = m_name.compareTo(prop.m_name)) != 0) {
return c;
}
// all is equal...
return 0;
}
}