blob: 9c0ff700fbfbdbb935d10e3b66f6fc1c00c38428 [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.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();
}
}