package fr.openwide.core.wicket.more.notification.service.impl;
import java.util.Collection;
import org.apache.commons.lang3.builder.CompareToBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.springframework.util.Assert;
import com.google.common.collect.Iterables;
import com.google.common.collect.Ordering;
/**
* @see {@link http://www.w3.org/TR/2009/CR-CSS2-20090908/cascade.html#cascading-order}
* @see CssSelectorSpecificity
*/
public class CssDeclarationPrecedence implements Comparable<CssDeclarationPrecedence> {
private final boolean isImportant;
private final CssSelectorSpecificity selectorSpecificity;
public CssDeclarationPrecedence(boolean isImportant, Collection<CssSelectorSpecificity> selectorsSpecificity) {
Assert.isTrue(!Iterables.isEmpty(selectorsSpecificity));
this.isImportant = isImportant;
this.selectorSpecificity = Ordering.natural().max(selectorsSpecificity);
}
public CssDeclarationPrecedence(boolean isImportant, CssSelectorSpecificity selectorSpecificity) {
this.isImportant = isImportant;
this.selectorSpecificity = selectorSpecificity;
}
@Override
public int compareTo(CssDeclarationPrecedence other) {
return new CompareToBuilder()
.append(isImportant, other.isImportant)
.append(selectorSpecificity, other.selectorSpecificity)
.build();
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (!(obj instanceof CssDeclarationPrecedence)) {
return false;
}
CssDeclarationPrecedence other = (CssDeclarationPrecedence) obj;
return compareTo(other) == 0;
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.append(isImportant)
.append(selectorSpecificity)
.build();
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
.append("isImportant", isImportant)
.append("selectorSpecificity", selectorSpecificity)
.build();
}
}