/* * Copyright 2009 Google Inc. * * 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 * * 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 com.google.gwt.core.ext; import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedSet; /** * Default immutable implementation of SelectionProperty that receives its * values in its constructor. */ public class DefaultSelectionProperty implements SelectionProperty { private final String currentValue; private final String fallbackValue; private final String name; private final SortedSet<String> possibleValues; private final Map<String, ? extends List<? extends Set<String>>> fallbackValueMap; /** * Construct a selection property. * * @param currentValue current value of this property, must not be null * @param fallbackValue the fallback value to use, must not be null * @param name the name of this property, must not be null * @param possibleValues the set of possible values, must not be null and * will be returned to callers, so a copy should be passed into this * ctor if the caller will use this set later */ public DefaultSelectionProperty(String currentValue, String fallbackValue, String name, SortedSet<String> possibleValues) { this(currentValue, fallbackValue, name, possibleValues, null); } /** * Construct a selection property. * * @param currentValue current value of this property, must not be null * @param fallbackValue the fallback value to use, must not be null * @param name the name of this property, must not be null * @param possibleValues the set of possible values, must not be null and * will be returned to callers, so a copy should be passed into this * ctor if the caller will use this set later * @param fallbackValueMap the map propertyValue to fallback values */ public DefaultSelectionProperty(String currentValue, String fallbackValue, String name, SortedSet<String> possibleValues, Map<String, ? extends List<? extends Set<String>>> fallbackValueMap) { assert currentValue != null; assert fallbackValue != null; assert name != null; assert possibleValues != null; this.currentValue = currentValue; this.fallbackValue = fallbackValue; this.name = name; this.possibleValues = possibleValues; this.fallbackValueMap = fallbackValueMap; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } DefaultSelectionProperty other = (DefaultSelectionProperty) obj; return currentValue.equals(other.currentValue) && fallbackValue.equals(other.fallbackValue) && name.equals(other.name) && possibleValues.equals(other.possibleValues); } public String getCurrentValue() { return currentValue; } public String getFallbackValue() { return fallbackValue; } public List<? extends Set<String>> getFallbackValues(String value) { return (null != fallbackValueMap) ? fallbackValueMap.get(value) : null; } public String getName() { return name; } public SortedSet<String> getPossibleValues() { return possibleValues; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + currentValue.hashCode(); result = prime * result + fallbackValue.hashCode(); result = prime * result + name.hashCode(); result = prime * result + possibleValues.hashCode(); return result; } @Override public String toString() { return "SelectionProp " + name + ": " + currentValue + " of " + possibleValues.toString() + ", fallback =" + fallbackValue; } }