blob: 2b3d65a8a665746cae647852b7dd09751904ea10 [file] [log] [blame]
/************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.
*
* Use is subject to license terms.
*
* 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
*
* 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.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;
}
}