package ca.concordia.cssanalyser.cssmodel.media; import ca.concordia.cssanalyser.cssmodel.CSSModelObject; /** * A media feature of the form feature: expression (e.g. min-width: 100px) * @author Davood Mazinanian * */ public class MediaFeatureExpression extends CSSModelObject { private final String feature; private String expression; public MediaFeatureExpression(String feature) { this(feature, ""); } public MediaFeatureExpression(String feature, String expression) { this.feature = feature; this.expression = expression; } public String getFeature() { return feature; } public String getExpression() { return expression; } @Override public String toString() { return "(" + feature + (!"".equals(expression) ? ": " + expression : "") + ")"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((expression == null) ? 0 : expression.hashCode()); result = prime * result + ((feature == null) ? 0 : feature.hashCode()); result = prime * result + locationInfo.hashCode(); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; MediaFeatureExpression other = (MediaFeatureExpression) obj; if (locationInfo == null) { if (other.locationInfo != null) return false; } else { if (!locationInfo.equals(other.locationInfo)) return false; } return mediaFeatureEquals(other); } /** * Compares two media features only based on * their expressions and features * @param other * @return */ public boolean mediaFeatureEquals(MediaFeatureExpression other) { if (expression == null) { if (other.expression != null) return false; } else if (!expression.equals(other.expression)) return false; if (feature == null) { if (other.feature != null) return false; } else if (!feature.equals(other.feature)) return false; return true; } public MediaFeatureExpression clone() { return new MediaFeatureExpression(feature, expression); } }