blob: f50ae6037c3768f4b4fbced440b35cdfe4883df0 [file] [log] [blame]
/*
* Copyright 2008 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.linker.impl;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.linker.ConfigurationProperty;
import com.google.gwt.core.ext.linker.PropertyProviderGenerator;
import com.google.gwt.core.ext.linker.SelectionProperty;
import com.google.gwt.dev.cfg.BindingProperty;
import java.util.Arrays;
import java.util.Collections;
import java.util.SortedSet;
import java.util.TreeSet;
/**
* The standard implementation of {@link SelectionProperty} from a
* {@link BindingProperty}.
*/
public class StandardSelectionProperty implements SelectionProperty {
private static final String FALLBACK_TOKEN = "/*-FALLBACK-*/";
private final String activeValue;
private final String fallback;
private final boolean isDerived;
private final String name;
private final String provider;
private final Class<? extends PropertyProviderGenerator> providerGenerator;
private final SortedSet<String> values;
public StandardSelectionProperty(BindingProperty p) {
activeValue = p.getConstrainedValue();
isDerived = p.isDerived();
name = p.getName();
fallback = p.getFallback();
providerGenerator = p.getProviderGenerator();
provider = p.getProvider() == null ? null
: p.getProvider().getBody().replace(FALLBACK_TOKEN, fallback);
values = Collections.unmodifiableSortedSet(new TreeSet<String>(
Arrays.asList(p.getDefinedValues())));
}
public String getFallbackValue() {
return fallback;
}
public String getName() {
return name;
}
public SortedSet<String> getPossibleValues() {
return values;
}
public String getPropertyProvider(TreeLogger logger,
SortedSet<ConfigurationProperty> configProperties)
throws UnableToCompleteException {
String generatorResult = null;
if (providerGenerator != null) {
Throwable caught = null;
try {
PropertyProviderGenerator gen = providerGenerator.newInstance();
generatorResult = gen.generate(logger, values, fallback,
configProperties);
} catch (InstantiationException e) {
caught = e;
} catch (IllegalAccessException e) {
caught = e;
}
if (caught != null) {
logger.log(TreeLogger.WARN, "Failed to execute property provider "
+ "generator '" + providerGenerator + "'", caught);
}
}
return generatorResult != null ? generatorResult : provider;
}
public boolean isDerived() {
return isDerived;
}
@Override
public String toString() {
StringBuffer b = new StringBuffer();
b.append(getName()).append(" : [");
for (String value : getPossibleValues()) {
b.append(" ").append(value);
}
b.append(" ]");
return b.toString();
}
public String tryGetValue() {
return activeValue;
}
}