Example usage for com.google.gwt.uibinder.rebind UiBinderWriter parseElementToField

List of usage examples for com.google.gwt.uibinder.rebind UiBinderWriter parseElementToField

Introduction

In this page you can find the example usage for com.google.gwt.uibinder.rebind UiBinderWriter parseElementToField.

Prototype

public FieldWriter parseElementToField(XMLElement elem) throws UnableToCompleteException 

Source Link

Document

Parses the object associated with the specified element, and returns the field writer that will hold it.

Usage

From source file:com.jhickman.web.gwt.gxtuibinder.elementparsers.button.ButtonParser.java

License:Apache License

@Override
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer)
        throws UnableToCompleteException {
    // parse as component first.  FIXME figure out the parser order on class hierarchy. should the superclass ones should parse first?
    super.parse(elem, fieldName, type, writer);

    handleBackwardsCompatibleMenu(elem, fieldName, writer);

    JClassType menuType = writer.getOracle().findType(GxtClassnameConstants.MENU);
    boolean foundSingleMenu = false;
    for (XMLElement child : elem.consumeChildElements()) {
        if (foundSingleMenu) {
            writer.die(elem, "Buttons only support a single Menu.  Found more than one.");
        }//w  w w  . j  a v a 2  s .c  om

        JClassType childType = writer.findFieldType(child);
        if (!childType.isAssignableTo(menuType)) {
            writer.die(elem, "Buttons only support nested Menu Components.  Found %s.", child);
        }
        foundSingleMenu = true;

        String menu = writer.parseElementToField(child);
        writer.addStatement("%s.setMenu(%s);", fieldName, menu);
    }
}

From source file:com.jhickman.web.gwt.gxtuibinder.elementparsers.button.ButtonParser.java

License:Apache License

@Deprecated
private void handleBackwardsCompatibleMenu(XMLElement elem, String fieldName, UiBinderWriter writer)
        throws UnableToCompleteException {
    Interpreter<Boolean> menuInterpreter = new SimpleInterpreter(elem.getNamespaceUri(), "menu");

    Collection<XMLElement> menuChildElements = elem.consumeChildElements(menuInterpreter);
    if (menuChildElements.isEmpty()) {
        return;/*from w  ww  .j a v a 2  s . c  o m*/
    }
    writer.warn(elem,
            "Use of <%s:menu> has been deprecated.  Nesting a Menu widget is the new preferred approach.",
            elem.getPrefix());
    if (menuChildElements.size() > 1) {
        writer.die(elem, "Buttons can contain only a single menu.");
    }

    String menu = writer.declareField(GxtClassnameConstants.MENU, elem);

    XMLElement menuNode = menuChildElements.iterator().next();
    for (XMLElement child : menuNode.consumeChildElements()) {
        String childField = writer.parseElementToField(child);
        writer.addStatement("%s.add(%s);", menu, childField);
    }

    writer.addStatement("%s.setMenu(%s);", fieldName, menu);
}

From source file:com.jhickman.web.gwt.gxtuibinder.elementparsers.ContentPanelParser.java

License:Apache License

public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer)
        throws UnableToCompleteException {
    handleTopBottomComponents(elem, fieldName, writer);

    for (XMLElement buttonsElem : elem
            .consumeChildElements(new SimpleInterpreter(elem.getNamespaceUri(), "buttons"))) {
        for (XMLElement button : buttonsElem.consumeChildElements()) {
            if (!ElementParserUtil.isElementOfType(writer, button, GxtClassnameConstants.BUTTON)) {
                writer.die("Element buttons can only contain Button children.", elem);
            }//from   w  w  w  .j a  v  a  2 s .  co  m
            String buttonField = writer.parseElementToField(button);
            writer.addStatement("%s.addButton(%s);", fieldName, buttonField);
        }
    }

    for (XMLElement header : elem
            .consumeChildElements(new SimpleInterpreter(elem.getNamespaceUri(), "header"))) {
        String headerFieldName = writer.declareField(GxtClassnameConstants.HEADER, header);
        // set to null at first.  assign with addStatement
        writer.setFieldInitializer(headerFieldName, "null");
        writer.addStatement("%s = %s.getHeader();", headerFieldName, fieldName);
        ElementParserUtil.applyAttributes(header, headerFieldName, GxtClassnameConstants.HEADER, writer);

        for (XMLElement headerChild : header.consumeChildElements()) {
            String childField = writer.parseElementToField(headerChild);
            writer.addStatement("%s.addTool(%s);", headerFieldName, childField);
        }
    }
}

From source file:com.jhickman.web.gwt.gxtuibinder.elementparsers.ContentPanelParser.java

License:Apache License

protected void handleTopBottomComponents(XMLElement elem, String fieldName, UiBinderWriter writer)
        throws UnableToCompleteException {
    Interpreter<Boolean> topBottomComponentInterpreter = new TopBottomComponentInterpreter(
            elem.getNamespaceUri());/*from  www .  j  ava  2 s . c  o m*/

    for (XMLElement child : elem.consumeChildElements(topBottomComponentInterpreter)) {
        XMLElement widget = child.consumeSingleChildElement();

        if (!isComponentElement(writer, widget)) {
            writer.die(elem, "%s must contain a GXT Component, but found %s", child, widget);
        }

        String widgetName = writer.parseElementToField(widget);
        String methodName = SupportedChildLocalNames.valueOf(child.getLocalName()).getMethodName();
        writer.addStatement("%s.%s(%s);", fieldName, methodName, widgetName);
    }
}

From source file:com.jhickman.web.gwt.gxtuibinder.elementparsers.custom.PortalParser.java

License:Apache License

@Override
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer)
        throws UnableToCompleteException {
    JClassType integerType = writer.getOracle().findType("java.lang.Integer");

    JClassType doubleType = writer.getOracle().findType("java.lang.Double");

    String columnCountAttribute = elem.consumeRequiredAttribute("numColumns", integerType);
    Integer columnCount = Integer.valueOf(columnCountAttribute);

    Interpreter<Boolean> interpreter = new SimpleInterpreter(elem.getNamespaceUri(), "column");
    int columnIndex = 0;
    for (XMLElement column : elem.consumeChildElements(interpreter)) {
        String width = column.consumeAttribute("width", doubleType);
        if (width != null) {
            writer.addStatement("%s.setColumnWidth(%d, %s);", fieldName, columnIndex, width);
        }//  ww  w .ja va  2 s . c om

        for (XMLElement columnChild : column.consumeChildElements()) {
            String childField = writer.parseElementToField(columnChild);
            writer.addStatement("%s.add(%s, %d);", fieldName, childField, columnIndex);
        }

        columnIndex++;
    }

    if (columnIndex > columnCount) {
        writer.die(elem, "numColumns set to %s, but found %s", columnCountAttribute, columnIndex);
    }

    writer.setFieldInitializerAsConstructor(fieldName, type, "" + columnIndex);
}

From source file:com.jhickman.web.gwt.gxtuibinder.elementparsers.form.AdapterFieldParser.java

License:Apache License

@Override
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer)
        throws UnableToCompleteException {

    XMLElement childElement = elem.consumeSingleChildElement();
    String childField = writer.parseElementToField(childElement);

    writer.setFieldInitializerAsConstructor(fieldName, type, childField);
}

From source file:com.jhickman.web.gwt.gxtuibinder.elementparsers.form.CheckBoxGroupParser.java

License:Apache License

@Override
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer)
        throws UnableToCompleteException {

    for (XMLElement child : elem.consumeChildElements()) {
        if (!isValidElement(elem, child)) {
            writer.die(elem, "CheckBoxGroup can only contain CheckBox children, but found '%s'.", child);
        }//from   ww w  .j  a v a  2 s . c om

        String childFieldName = writer.parseElementToField(child);

        writer.addStatement("%s.add(%s);", fieldName, childFieldName);
    }

}

From source file:com.jhickman.web.gwt.gxtuibinder.elementparsers.form.RadioGroupParser.java

License:Apache License

@Override
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer)
        throws UnableToCompleteException {

    JClassType radioType = writer.getOracle().findType(GxtClassnameConstants.RADIO);

    for (XMLElement child : elem.consumeChildElements()) {

        JClassType childType = writer.findFieldType(child);
        if (!childType.isAssignableTo(radioType)) {
            writer.die(elem, "RadioGroup can only contain Radio children, but found '%s'.", child);
        }//from  www.  ja v  a 2  s .c  o m

        String childFieldName = writer.parseElementToField(child);

        writer.addStatement("%s.add(%s);", fieldName, childFieldName);
    }
}

From source file:com.jhickman.web.gwt.gxtuibinder.elementparsers.form.SliderFieldParser.java

License:Apache License

@Override
public void parse(XMLElement elem, String fieldName, JClassType type, UiBinderWriter writer)
        throws UnableToCompleteException {
    boolean seen = false;
    for (XMLElement child : elem.consumeChildElements()) {
        if (seen) {
            writer.die("SliderField can contain exactly one child element of type Slider.");
        }/*from ww w . j a  v a 2  s .  co m*/

        // single child must be of type "Slider"
        String childField = writer.parseElementToField(child);
        writer.setFieldInitializerAsConstructor(fieldName, type, childField);

        seen = true;
    }
}

From source file:com.jhickman.web.gwt.gxtuibinder.elementparsers.layout.GenericLayoutParser.java

License:Apache License

protected void handleChildren(XMLElement elem, String fieldName, UiBinderWriter writer)
        throws UnableToCompleteException {
    SimpleInterpreter layoutDataInterpreter = new SimpleInterpreter(elem.getNamespaceUri(), "layoutdata");

    for (XMLElement child : elem.consumeChildElements()) {
        if (layoutDataInterpreter.interpretElement(child)) {
            handleLayoutData(child, fieldName, writer);
        } else {/*from   w  ww. j  a v a  2  s. c o  m*/
            String childField = writer.parseElementToField(child);
            writer.addStatement("%s.add(%s);", fieldName, childField);
        }
    }
}