/** * Checks if this call will go over the limit for the number of valid calls. * If it won't, it will increment the number of calls made. * * @throws UnableToCompleteException */ private void checkLimit(int limit, String tag, XMLElement toAdd) throws UnableToCompleteException { Integer priorCalls = numCallsToChildMethod.get(tag); if (priorCalls == null) { priorCalls = 0; } if (limit > 0 && priorCalls > 0 && priorCalls + 1 > limit) { writer.die(toAdd, "Can only use the @UiChild tag " + tag + " " + limit + " time(s)."); } numCallsToChildMethod.put(tag, priorCalls + 1); }
private String consumeCurrency(XMLElement elem, UiBinderWriter writer) throws UnableToCompleteException { String currencyData = elem.consumeAttribute("currencyData", writer.getOracle().findType(CurrencyData.class.getCanonicalName())); String currencyCode = elem.consumeStringAttribute("currencyCode"); if (currencyData != null && currencyCode != null) { writer.die(elem, AT_MOST_ONE_SPECIFIED_CURRENCY); } return currencyData != null ? currencyData : currencyCode; }
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { if (writer.getOwnerClass().getUiField(fieldName).isProvided()) { return; } if (!writer.useLazyWidgetBuilders()) { writer.die("LazyPanel only works with UiBinder.useLazyWidgetBuilders enabled."); } XMLElement child = elem.consumeSingleChildElement(); if (!writer.isWidgetElement(child)) { writer.die(child, "Expecting only widgets in %s", elem); } FieldWriter childField = writer.parseElementToField(child); String lazyPanelClassPath = LazyPanel.class.getName(); String widgetClassPath = Widget.class.getName(); String code = String.format(INITIALIZER_FORMAT, lazyPanelClassPath, widgetClassPath, childField.getNextReference()); writer.setFieldInitializer(fieldName, code); } }
private String consumeTimeZone(XMLElement elem, UiBinderWriter writer) throws UnableToCompleteException { String timeZone = elem.consumeAttribute("timezone", writer.getOracle().findType(TimeZone.class.getCanonicalName())); String timeZoneOffset = elem.consumeAttribute("timezoneOffset", getIntType(writer.getOracle())); if (timeZone != null && timeZoneOffset != null) { writer.die(elem, AT_MOST_ONE_SPECIFIED_TIME_ZONE); } if (timeZone != null) { return timeZone; } if (timeZoneOffset != null) { return TimeZone.class.getCanonicalName() + ".createTimeZone(" + timeZoneOffset + ")"; } return null; }
private String consumeFormat(XMLElement elem, UiBinderWriter writer) throws UnableToCompleteException { String format = elem.consumeAttribute("format", writer.getOracle().findType(DateTimeFormat.class.getCanonicalName())); String predefinedFormat = elem.consumeAttribute("predefinedFormat", writer.getOracle().findType(PredefinedFormat.class.getCanonicalName())); String customFormat = elem.consumeStringAttribute("customFormat"); if (format != null) { if (predefinedFormat != null || customFormat != null) { writer.die(elem, AT_MOST_ONE_SPECIFIED_FORMAT); } return format; } if (predefinedFormat != null) { if (customFormat != null) { writer.die(elem, AT_MOST_ONE_SPECIFIED_FORMAT); } return makeGetFormat(predefinedFormat); } if (customFormat != null) { return makeGetFormat(customFormat); } return null; }
public Boolean interpretElement(XMLElement child) throws UnableToCompleteException { // CustomButton can only contain Face elements. String ns = child.getNamespaceUri(); String faceName = child.getLocalName(); if (!ns.equals(elem.getNamespaceUri())) { writer.die(elem, "Invalid child namespace: %s", ns); } if (!faceNames.contains(faceName)) { writer.die(elem, "Invalid CustomButton face: %s:%s", ns, faceName); } HtmlInterpreter interpreter = HtmlInterpreter.newInterpreterForUiObject( writer, fieldName); String innerHtml = child.consumeInnerHtml(interpreter); if (innerHtml.length() > 0) { writer.addStatement("%s.%s().setHTML(%s);", fieldName, faceNameGetter(faceName), writer.declareTemplateCall(innerHtml, fieldName)); } if (child.hasAttribute("image")) { String image = child.consumeImageResourceAttribute("image"); writer.addStatement("%s.%s().setImage(new %s(%s));", fieldName, faceNameGetter(faceName), IMAGE_CLASS, image); } return true; // We consumed it } });
public void parse(XMLElement elem, String fieldName, JClassType type, final UiBinderWriter writer) throws UnableToCompleteException { String customTag = elem.consumeStringAttribute("tag", null); if (null != customTag) { OwnerField uiField = writer.getOwnerClass().getUiField(fieldName); if (uiField != null && uiField.isProvided()) { writer.die("UiField %s for FlowPanel cannot set tag when it is also provided.", fieldName); } writer.setFieldInitializerAsConstructor(fieldName, customTag); } }
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { // Parse children. for (XMLElement child : elem.consumeChildElements()) { if (!writer.isWidgetElement(child)) { writer.die(child, "Expecting only widgets in %s", elem); } FieldWriter childField = writer.parseElementToField(child); writer.addStatement("%1$s.add(%2$s);", fieldName, childField.getNextReference()); } } }
private void parseRows(XMLElement elem, String fieldName, UiBinderWriter writer, List<RowContent> matrix) throws UnableToCompleteException { for (XMLElement child : elem.consumeChildElements()) { String tagName = child.getLocalName(); if (!tagName.equals(ROW_TAG) || !elem.getPrefix().equals(child.getPrefix())) { writer.die( "%1$s:Grid elements must contain only %1$s:%2$s children, found %3$s:%4$s", elem.getPrefix(), ROW_TAG, child.getPrefix(), tagName); } RowContent newRow = new RowContent(); newRow.setStyleName(child.consumeStringAttribute(STYLE_NAME_ATTRIBUTE, null)); matrix.add(newRow); parseColumns(fieldName, writer, newRow, child); } } }
public String interpretElement(XMLElement elem) throws UnableToCompleteException { String fieldName = writer.declareFieldIfNeeded(elem); if (fieldName != null) { String token = writer.declareDomField(elem, fieldName, element); if (elem.hasAttribute("id")) { writer.die(elem, String.format( "Cannot declare id=\"%s\" and %s=\"%s\" on the same element", elem.consumeRawAttribute("id"), writer.getUiFieldAttributeName(), fieldName)); } elem.setAttribute("id", token); } /* * Return null because we don't want to replace the dom element with any * particular string (though we may have consumed its id or gwt:field) */ return null; } }
private String consumeAsTextMessage(XMLElement elem, MessagesWriter messages) throws UnableToCompleteException { if (!elem.hasChildNodes()) { writer.die(elem, "Empty message"); } MessageWriter message = messages.newMessage(elem); PlaceholderInterpreter interpreter = new TextPlaceholderInterpreter(writer, message); message.setDefaultMessage(elem.consumeInnerText(interpreter)); return messages.declareMessage(message); } }
private void parseColumns(String fieldName, UiBinderWriter writer, RowContent row, XMLElement child) throws UnableToCompleteException { String tagName; for (XMLElement cell : child.consumeChildElements()) { tagName = cell.getLocalName(); if (!tagName.equals(CELL_TAG) && !tagName.equals(CUSTOMCELL_TAG) || !cell.getPrefix().equals(child.getPrefix())) { writer.die("Grid's row tag in %s may only contain %s or %s element.", fieldName, CELL_TAG, CUSTOMCELL_TAG); } CellContent newColumn = null; String styleName = cell.consumeStringAttribute(STYLE_NAME_ATTRIBUTE, null); if (tagName.equals(CELL_TAG)) { HtmlInterpreter htmlInt = HtmlInterpreter.newInterpreterForUiObject( writer, fieldName); String html = cell.consumeInnerHtml(htmlInt); newColumn = new CellContent(tagName, html, styleName); } if (tagName.equals(CUSTOMCELL_TAG)) { FieldWriter field = writer.parseElementToField(cell.consumeSingleChildElement()); newColumn = new CellContent(tagName, field.getNextReference(), styleName); } row.addColumn(newColumn); } }
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { // Parse children. for (XMLElement child : elem.consumeChildElements()) { String tagName = child.getLocalName(); if (!tagName.equals(ITEM_TAG)) { writer.die(elem, "Invalid ListBox child element: " + tagName); } String value = child.consumeStringAttribute("value"); String innerText = child.consumeInnerTextEscapedAsStringLiteral( new TextInterpreter(writer)); if (value != null) { writer.addStatement("%s.addItem(\"%s\", %s);", fieldName, innerText, value); } else { writer.addStatement("%s.addItem(\"%s\");", fieldName, innerText); } } }
public String interpretElement(XMLElement elem) throws UnableToCompleteException { if (writer.useLazyWidgetBuilders() && writer.isElementAssignableTo(elem, SafeHtml.class)) { FieldWriter childField = writer.parseElementToField(elem); return writer.tokenForSafeHtmlExpression(elem, childField.getNextReference()); } if (writer.isImportedElement(elem)) { writer.die(elem, "Not allowed in an HTML context"); } if (elem.getNamespaceUri() != null && !writer.isBinderElement(elem)) { // It's not a widget, and it's not a ui: element. writer.die(elem, "Prefix \"%s:\" has unrecognized xmlns \"%s\" (bad import?)", elem.getPrefix(), elem.getNamespaceUri()); } return pipe.interpretElement(elem); } }
public String interpretElement(XMLElement elem) throws UnableToCompleteException { MessagesWriter messages = uiWriter.getMessages(); if (messages.isMessage(elem)) { if (!elem.hasChildNodes()) { uiWriter.die(elem, "Empty message"); } MessageWriter message = messages.newMessage(elem); message.setDefaultMessage(elem.consumeInnerHtml(phiProvider.get(message))); return uiWriter.tokenForSafeConstant(elem, messages.declareMessage(message)); } return null; } }
writer.die(child, BAD_CHILD);
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { boolean supportsTimeZone = hasDateTimeFormatAndTimeZoneConstructor( writer.getOracle(), type); if (hasDateTimeFormatConstructor(writer.getOracle(), type) || supportsTimeZone) { String format = consumeFormat(elem, writer); if (format != null) { String timeZone = (supportsTimeZone ? consumeTimeZone(elem, writer) : null); writer.setFieldInitializerAsConstructor(fieldName, makeArgs( format, timeZone)); } else if (supportsTimeZone && hasTimeZone(elem)) { writer.die(elem, NO_TIMEZONE_WITHOUT_SPECIFIED_FORMAT); } } }
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { for (XMLElement child : elem.consumeChildElements()) { String ns = child.getNamespaceUri(); String tagName = child.getLocalName(); if (ns != null && ns.equals(elem.getNamespaceUri()) && localTagNameIsCell(tagName)) { // It's a cell element, so parse its single child as a widget. XMLElement widget = child.consumeSingleChildElement(); FieldWriter childField = writer.parseElementToField(widget); writer.addStatement("%1$s.add(%2$s);", fieldName, childField.getNextReference()); // Parse the cell tag's alignment & size attributes. parseCellAttributes(child, fieldName, childField, writer); } else { if (!writer.isWidgetElement(child)) { writer.die(elem, "Expected a widget or <%s:%s>, found %s", elem.getPrefix(), CELL_TAG.toLowerCase(Locale.ROOT), child); } // It's just a normal child, so parse it as a widget. FieldWriter childField = writer.parseElementToField(child); writer.addStatement("%1$s.add(%2$s);", fieldName, childField.getNextReference()); } } }
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { // Parse children. for (XMLElement child : elem.consumeChildElements()) { if (!writer.isWidgetElement(child)) { writer.die(child, "Widget required"); } // Stack panel label comes from the StackPanel-text attribute of the child String stackItemLabel = null; String variableAttributeName = elem.getPrefix() + ":" + ATTRIBUTE_TEXT; if (child.hasAttribute(variableAttributeName)) { stackItemLabel = child.consumeRawAttribute(variableAttributeName); } FieldWriter childField = writer.parseElementToField(child); if (stackItemLabel == null) { writer.addStatement("%1$s.add(%2$s);", fieldName, childField.getNextReference()); } else { writer.addStatement("%1$s.add(%2$s, \"%3$s\");", fieldName, childField.getNextReference(), stackItemLabel); } } } }
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer) throws UnableToCompleteException { // Parse children. for (XMLElement child : elem.consumeChildElements()) { // Parse position element. if (isPositionElement(elem, child)) { // Parse position. String left = child.consumeRequiredIntAttribute("left"); String top = child.consumeRequiredIntAttribute("top"); // Add child widget. XMLElement widgetElem = child.consumeSingleChildElement(); FieldWriter widgetField = writer.parseElementToField(widgetElem); writer.addStatement("%1$s.add(%2$s, %3$s, %4$s);", fieldName, widgetField.getNextReference(), left, top); continue; } // Parse Widget. if (writer.isWidgetElement(child)) { FieldWriter widgetFieldName = writer.parseElementToField(child); writer.addStatement("%1$s.add(%2$s);", fieldName, widgetFieldName.getNextReference()); continue; } // die writer.die(child, "Expecting only <%s:%s> or widget children in %s", elem.getPrefix(), AT, elem); } }