/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program 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 Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.reporting.engine.classic.core.style.css.selector;
import java.io.Serializable;
/**
* Creation-Date: 05.12.2005, 19:39:58
*
* @author Thomas Morgner
*/
public final class SelectorWeight implements Comparable, Serializable {
private int styleAttribute;
private int idCount;
private int attributeCount; // and pseudo-formats!
private int elementCount; // and pseudeo-elements
public SelectorWeight( final int styleAttribute, final int idCount, final int attributeCount, final int elementCount ) {
this( null, styleAttribute, idCount, attributeCount, elementCount );
}
public SelectorWeight( final SelectorWeight first, final SelectorWeight second ) {
this.styleAttribute = first.styleAttribute + second.styleAttribute;
this.idCount = first.idCount + second.idCount;
this.attributeCount = first.attributeCount + second.attributeCount;
this.elementCount = first.elementCount + second.attributeCount;
}
public SelectorWeight( final SelectorWeight parent, final int styleAttribute, final int idCount,
final int attributeCount, final int elementCount ) {
if ( parent == null ) {
this.styleAttribute = styleAttribute;
this.idCount = idCount;
this.attributeCount = attributeCount;
this.elementCount = elementCount;
} else {
this.styleAttribute = styleAttribute + parent.styleAttribute;
this.idCount = idCount + parent.idCount;
this.attributeCount = attributeCount + parent.attributeCount;
this.elementCount = elementCount + parent.elementCount;
}
}
public boolean equals( final Object o ) {
if ( this == o ) {
return true;
}
if ( o == null || getClass() != o.getClass() ) {
return false;
}
final SelectorWeight that = (SelectorWeight) o;
if ( attributeCount != that.attributeCount ) {
return false;
}
if ( elementCount != that.elementCount ) {
return false;
}
if ( idCount != that.idCount ) {
return false;
}
return styleAttribute == that.styleAttribute;
}
public int hashCode() {
int result = styleAttribute;
result = 29 * result + idCount;
result = 29 * result + attributeCount;
result = 29 * result + elementCount;
return result;
}
public int compareTo( final Object o ) {
SelectorWeight weight = (SelectorWeight) o;
if ( styleAttribute < weight.styleAttribute ) {
return -1;
}
if ( styleAttribute > weight.styleAttribute ) {
return 1;
}
if ( idCount < weight.idCount ) {
return -1;
}
if ( idCount > weight.idCount ) {
return 1;
}
if ( attributeCount < weight.attributeCount ) {
return -1;
}
if ( attributeCount > weight.attributeCount ) {
return 1;
}
if ( elementCount < weight.elementCount ) {
return -1;
}
if ( elementCount > weight.elementCount ) {
return 1;
}
return 0;
}
public String toString() {
return "SelectorWeight{" + "styleAttribute=" + styleAttribute + ", idCount=" + idCount + ", attributeCount="
+ attributeCount + ", elementCount=" + elementCount + '}';
}
}