blob: d463cf32b5db1f4c0c0fb8b9f66dcb6713c8c838 [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.i18n.rebind;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JMethod;
import com.google.gwt.i18n.rebind.AbstractResource.ResourceList;
import com.google.gwt.i18n.shared.GwtLocale;
import com.google.gwt.user.rebind.AbstractGeneratorClassCreator;
/**
* Method creator to handle <code>Number</code> creation.
*/
class SimpleValueMethodCreator extends AbstractLocalizableMethodCreator {
/**
* Helper class to delegate to the correct Number parser for this method.
*/
public abstract static class AbstractValueCreator {
abstract String getValue(String stringVal);
}
private static class BadBooleanPropertyValue extends RuntimeException {
}
static final AbstractValueCreator DOUBLE = new AbstractValueCreator() {
@Override
String getValue(String stringVal) {
return Double.parseDouble(stringVal) + "";
}
};
static final AbstractValueCreator FLOAT = new AbstractValueCreator() {
@Override
String getValue(String stringVal) {
return Float.parseFloat(stringVal) + "f";
}
};
static final AbstractValueCreator INT = new AbstractValueCreator() {
@Override
String getValue(String stringVal) {
return Integer.parseInt(stringVal) + "";
}
};
static final AbstractValueCreator STRING = new AbstractValueCreator() {
@Override
String getValue(String stringVal) {
return wrap(stringVal);
}
};
static final AbstractValueCreator BOOLEAN = new AbstractValueCreator() {
@Override
String getValue(String stringVal) {
if ("true".equals(stringVal)) {
return "true";
} else if ("false".equals(stringVal)) {
return "false";
} else {
throw new BadBooleanPropertyValue();
}
}
};
private AbstractValueCreator valueCreator;
/**
* Constructor for <code>SimpleValueMethodCreator</code>.
*
* @param currentCreator
* @param valueCreator
*/
SimpleValueMethodCreator(AbstractGeneratorClassCreator currentCreator,
AbstractValueCreator valueCreator) {
super(currentCreator);
this.valueCreator = valueCreator;
}
@Override
public void createMethodFor(TreeLogger logger, JMethod targetMethod,
String key, ResourceList resourceList, GwtLocale locale)
throws UnableToCompleteException {
String value = resourceList.getRequiredStringExt(key, null);
try {
String translatedValue = valueCreator.getValue(value);
println("return " + translatedValue + ";");
} catch (NumberFormatException e) {
throw error(logger, value + " could not be parsed as a number.");
} catch (BadBooleanPropertyValue e) {
throw error(
logger,
"'"
+ value
+ "' is not a valid boolean property value; must be 'true' or 'false'");
}
}
}