| /* |
| * 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.uibinder.rebind.messages; |
| |
| import com.google.gwt.uibinder.rebind.IndentedWriter; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| /** |
| * Represents a method in a Messages interface. Can write both the method |
| * declaration and its invocation. |
| */ |
| public class MessageWriter { |
| /** |
| * Escapes ' and { chars, which have special meaning to Messages |
| * interfaces. |
| */ |
| public static String escapeMessageFormat(String messageFormatStyleText) { |
| StringBuilder b = new StringBuilder(); |
| for (int i = 0; i < messageFormatStyleText.length(); i++) { |
| char c = messageFormatStyleText.charAt(i); |
| if (c == '\'') { |
| b.append("''"); |
| } else if (c == '{') { |
| b.append("'{'"); |
| } else { |
| b.append(c); |
| } |
| } |
| return b.toString(); |
| } |
| private String defaultMessage; |
| private final String description; |
| private final String key; |
| private final String name; |
| private final List<PlaceholderWriter> placeholders = |
| new ArrayList<PlaceholderWriter>(); |
| |
| private final String meaning; |
| |
| MessageWriter(String description, String key, String meaning, |
| String name) { |
| this.description = description; |
| this.key = key; |
| this.meaning = meaning; |
| this.name = name; |
| } |
| |
| public void addPlaceholder(PlaceholderWriter placeholder) { |
| this.placeholders.add(placeholder); |
| } |
| |
| public String getInvocation() { |
| StringBuilder b = new StringBuilder(String.format("%s(", name)); |
| int countdown = placeholders.size(); |
| for (PlaceholderWriter ph : placeholders) { |
| b.append(ph.getValue()); |
| if (--countdown > 0) { |
| b.append(","); |
| } |
| } |
| b.append(")"); |
| return b.toString(); |
| } |
| |
| public int getPlaceholderCount() { |
| return placeholders.size(); |
| } |
| |
| public void setDefaultMessage(String defaultMessage) { |
| this.defaultMessage = defaultMessage; |
| } |
| |
| public void writeDeclaration(IndentedWriter pw) { |
| pw.write("@DefaultMessage(\"%s\")", defaultMessage); |
| if (description.length() > 0) { |
| pw.write("@Description(\"%s\")", description); |
| } |
| if (key.length() > 0) { |
| pw.write("@Key(\"%s\")", key); |
| } |
| if (meaning.length() > 0) { |
| pw.write("@Meaning(\"%s\")", meaning); |
| } |
| if (placeholders.isEmpty()) { |
| pw.write("String %s();", name); |
| } else { |
| pw.write("String %s(", name); |
| pw.indent(); |
| |
| int countdown = placeholders.size(); |
| for (PlaceholderWriter ph : placeholders) { |
| String comma = --countdown > 0 ? "," : ""; |
| pw.write(ph.getDeclaration() + comma); |
| } |
| pw.write(");"); |
| pw.outdent(); |
| } |
| pw.newline(); |
| } |
| } |