blob: 7fc5068a3c8735f9f7a882a2639549f3839ee19b [file] [log] [blame]
/*
* Copyright 2011 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.typeinfo.JMethod;
import com.google.gwt.i18n.client.Constants.DefaultStringMapValue;
import com.google.gwt.i18n.client.LocalizableResource.Description;
import com.google.gwt.i18n.client.LocalizableResource.Meaning;
import com.google.gwt.i18n.client.Messages.DefaultMessage;
import com.google.gwt.i18n.server.Message;
import com.google.gwt.i18n.server.MessageFormatUtils.MessageStyle;
import com.google.gwt.i18n.server.MessageInterface;
import com.google.gwt.i18n.server.MessageProcessingException;
import com.google.gwt.i18n.server.MessageTranslation;
import com.google.gwt.i18n.server.MessageUtils;
import com.google.gwt.i18n.server.MessageVisitor;
import com.google.gwt.i18n.server.Parameter;
import com.google.gwt.i18n.server.Type;
import com.google.gwt.i18n.shared.GwtLocale;
import java.lang.annotation.Annotation;
import java.util.List;
/**
* Implementation of {@link Message} only suitable for use by key generators.
* See the restrictions in
* {@link com.google.gwt.i18n.server.KeyGenerator#generateKey(Message)}.
*/
class KeyGenMessage implements Message {
private JMethod method;
/**
* @param method
*/
public KeyGenMessage(JMethod method) {
this.method = method;
}
public void accept(MessageVisitor v) throws MessageProcessingException {
throw new MessageProcessingException("unsupported");
}
public void accept(MessageVisitor v, GwtLocale locale)
throws MessageProcessingException {
throw new MessageProcessingException("unsupported");
}
public int compareTo(Message o) {
return 0;
}
public Iterable<AlternateFormMapping> getAllMessageForms() {
return null;
}
public <A extends Annotation> A getAnnotation(Class<A> annotClass) {
A annot = method.getAnnotation(annotClass);
if (annot != null) {
return annot;
}
return method.getEnclosingType().findAnnotationInTypeHierarchy(annotClass);
}
public String getDefaultMessage() {
if (isAnnotationPresent(DefaultMessage.class)) {
DefaultMessage annot = getAnnotation(DefaultMessage.class);
return annot.value();
} else if (isAnnotationPresent(DefaultStringMapValue.class)) {
DefaultStringMapValue annot = getAnnotation(DefaultStringMapValue.class);
String[] keyValues = annot.value();
StringBuilder buf = new StringBuilder();
boolean needComma = false;
for (int i = 0; i < keyValues.length; i += 2) {
if (needComma) {
buf.append(',');
} else {
needComma = true;
}
buf.append(MessageUtils.quoteComma(keyValues[i]));
}
return buf.toString();
} else {
return MessageUtils.getConstantsDefaultValue(this);
}
}
public String getDescription() {
Description annot = getAnnotation(Description.class);
return annot != null ? annot.value() : null;
}
public String getKey() {
return null;
}
public GwtLocale getMatchedLocale() {
return null;
}
public String getMeaning() {
Meaning meaningAnnot = getAnnotation(Meaning.class);
return meaningAnnot != null ? meaningAnnot.value() : null;
}
public MessageInterface getMessageInterface() {
return new KeyGenMessageInterface(method.getEnclosingType());
}
public MessageStyle getMessageStyle() {
return isAnnotationPresent(DefaultMessage.class) ?
MessageStyle.MESSAGE_FORMAT : MessageStyle.PLAIN;
}
public String getMethodName() {
return method.getName();
}
public List<Parameter> getParameters() {
return null;
}
public Type getReturnType() {
return null;
}
public int[] getSelectorParameterIndices() {
return null;
}
public MessageTranslation getTranslation(GwtLocale locale) {
return null;
}
public boolean isAnnotationPresent(Class<? extends Annotation> annotClass) {
return getAnnotation(annotClass) != null;
}
public boolean isVarArgs() {
return false;
}
}