| /* |
| * 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.server; |
| |
| import com.google.gwt.i18n.server.MessageFormatUtils.MessageStyle; |
| import com.google.gwt.i18n.shared.AlternateMessageSelector.AlternateForm; |
| import com.google.gwt.i18n.shared.GwtLocale; |
| |
| import java.lang.annotation.Annotation; |
| import java.util.List; |
| |
| /** |
| * Describes a single translatable message. |
| */ |
| public interface Message extends Comparable<Message>, MessageTranslation { |
| |
| /** |
| * Mapping for a group of particular alternate forms to the message to use. |
| */ |
| public static class AlternateFormMapping |
| implements Comparable<AlternateFormMapping> { |
| private final List<AlternateForm> forms; |
| private final String message; |
| |
| public AlternateFormMapping(List<AlternateForm> forms, String message) { |
| this.forms = forms; |
| this.message = message; |
| } |
| |
| public int compareTo(AlternateFormMapping o) { |
| for (int i = 0; i < forms.size(); ++i) { |
| if (i >= o.forms.size()) { |
| // equal to this point and {@code o} is shorter |
| return -1; |
| } |
| int c = forms.get(i).compareTo(o.forms.get(i)); |
| if (c != 0) { |
| return c; |
| } |
| } |
| if (o.forms.size() > forms.size()) { |
| return 1; |
| } |
| return 0; |
| } |
| |
| public List<AlternateForm> getForms() { |
| return forms; |
| } |
| |
| public String getMessage() { |
| return message; |
| } |
| |
| @Override |
| public String toString() { |
| return forms.toString() + " => " + message; |
| } |
| } |
| |
| /** |
| * Accept a {@link MessageVisitor}. |
| * |
| * @param v {@link MessageVisitor} to call |
| * @throws MessageProcessingException if thrown by the visitor or its |
| * sub-visitors |
| */ |
| void accept(MessageVisitor v) throws MessageProcessingException; |
| |
| /** |
| * Accept a {@link MessageVisitor}, using translations from the requested |
| * locale. |
| * |
| * @param v {@link MessageVisitor} to call |
| * @param locale locale to use for translations, or null to use the messages |
| * present in the source |
| * @throws MessageProcessingException if thrown by the visitor or its |
| * sub-visitors |
| */ |
| void accept(MessageVisitor v, GwtLocale locale) |
| throws MessageProcessingException; |
| |
| /** |
| * Messages are ordered by their keys. |
| * |
| * @return -1 if this message is before {@code o}, 0 if they are equal, or |
| * 1 if this is message is after {code o} |
| */ |
| int compareTo(Message o); |
| |
| /** |
| * Get the list of all possible messages. If there are not alternate |
| * message selectors, there will be a single entry with an empty list and |
| * the default value. |
| * |
| * @return a list of all message forms, lexicographically sorted by the |
| * alternate forms for each message |
| */ |
| Iterable<AlternateFormMapping> getAllMessageForms(); |
| |
| /** |
| * Return the requested annotation present on this message, including parents |
| * if the annotation is inherited. |
| * |
| * @param annotClass |
| * @return an annotation instance or null if not found |
| */ |
| <A extends Annotation> A getAnnotation(Class<A> annotClass); |
| |
| /** |
| * Return the default form of this message. |
| * |
| * @return default message or null if not provided |
| */ |
| String getDefaultMessage(); |
| |
| /** |
| * Return the description of this message. |
| * |
| * @return description or null if not provided |
| */ |
| String getDescription(); |
| |
| /** |
| * Return the key associated with this message. |
| * |
| * @return key to use for message lookups |
| */ |
| String getKey(); |
| |
| /** |
| * Return the meaning of this message. |
| * |
| * @return meaning or null if not provided |
| */ |
| String getMeaning(); |
| |
| /** |
| * Return the {@link MessageInterface} this message is associated with. |
| * |
| * @return a {@link MessageInterface} instance |
| */ |
| MessageInterface getMessageInterface(); |
| |
| /** |
| * Return the message style (ie, quoting and argument rules) of this message. |
| * |
| * @return MessageStyle instance for this message |
| */ |
| MessageStyle getMessageStyle(); |
| |
| /** |
| * Return the name of the method for this message - this should generally only |
| * be used in providing error messages. |
| * |
| * @return default message or null if not provided |
| */ |
| String getMethodName(); |
| |
| /** |
| * Get the parameters defined for this message. |
| * |
| * @return a possibly empty list of parameters |
| */ |
| List<Parameter> getParameters(); |
| |
| /** |
| * Return the declared return type for this message. |
| * |
| * @return the declared return type |
| */ |
| Type getReturnType(); |
| |
| /** |
| * Get the list of parameters controlling alternate message selection. |
| * |
| * @return possibly empty array of indices into the list returned by |
| * {@link #getParameters()} |
| */ |
| int[] getSelectorParameterIndices(); |
| |
| /** |
| * Get an appropriate translation for this message for a given locale. |
| * |
| * @param locale a locale to get a translation for, or null to retrieve the |
| * message in the source |
| * @return a non-null {@link MessageTranslation} instance - if locale is null, |
| * or no better match is found, {@code this} must be returned |
| */ |
| MessageTranslation getTranslation(GwtLocale locale); |
| |
| /** |
| * Check if a specified annotation is present on this message (including |
| * via inheritance if the annotation is inherited). |
| * |
| * @param annotClass |
| * @return true if the annotation is present |
| */ |
| boolean isAnnotationPresent(Class<? extends Annotation> annotClass); |
| |
| /** |
| * Return true if this method is a varargs method. |
| * |
| * @return true if this method is a varargs method |
| */ |
| boolean isVarArgs(); |
| } |