Example usage for com.google.gwt.user.rebind StringSourceWriter print

List of usage examples for com.google.gwt.user.rebind StringSourceWriter print

Introduction

In this page you can find the example usage for com.google.gwt.user.rebind StringSourceWriter print.

Prototype

public void print(String s) 

Source Link

Usage

From source file:com.bramosystems.oss.player.core.rebind.PlatformPropertyGenerator.java

License:Apache License

@Override
public String generate(TreeLogger logger, SortedSet<String> possibleValues, String fallback,
        SortedSet<ConfigurationProperty> configProperties) throws UnableToCompleteException {
    StringSourceWriter sw = new StringSourceWriter();
    sw.println("{");
    sw.indent();/*  w  w  w . j  a v  a 2s  .c  om*/
    sw.println("var pltf = navigator.platform.toLowerCase();");
    Iterator<String> it = possibleValues.iterator();
    if (it.hasNext()) {
        fillCode(sw, it.next());
        sw.print("else ");
        while (it.hasNext()) {
            fillCode(sw, it.next());
            sw.print("else ");
        }
        sw.println("{");
        sw.indent();
        sw.print("return 'other';");
        sw.outdent();
        sw.print("}");
    }
    sw.outdent();
    sw.println("}");
    return sw.toString();
}

From source file:com.bramosystems.oss.player.core.rebind.PlatformPropertyGenerator.java

License:Apache License

private void fillCode(StringSourceWriter sw, String val) {
    sw.print("if(pltf.indexOf('");
    sw.print(val);
    sw.println("')!=-1){");
    sw.indent();//from   w  w w .jav a 2  s . c  o  m
    sw.print("return '");
    sw.print(val);
    sw.println("';");
    sw.outdent();
    sw.print("} ");
}

From source file:com.guit.rebind.binder.BinderContextImpl.java

License:Apache License

@Override
public String build(StringSourceWriter writer) {
    StringSourceWriter build = new StringSourceWriter();

    build.print(beforeWrappers.toString());
    for (SourceWriter w : wrappersBefore) {
        build.print(w.toString());//www  .  j av a 2  s .  co m
    }
    build.print(beforeHandler.toString());
    build.print(writer.toString());
    build.print(afterHandler.toString());
    for (SourceWriter w : wrappersAfter) {
        build.print(w.toString());
    }
    build.print(afterWrappers.toString());

    return build.toString();
}

From source file:com.guit.rebind.binder.contributor.HasAttributeContributor.java

License:Apache License

@Override
public void contribute(BinderContext binderContext, TreeLogger logger, GeneratorContext context)
        throws UnableToCompleteException {
    JMethod m = binderContext.getMethod();
    JClassType eventType = binderContext.getEventType();
    JClassType presenterType = binderContext.getPresenterType();
    if (!eventType.getPackage().getName().equals(domEventsPackage)) {
        logger.log(Type.ERROR,// w  w w  .  jav  a 2 s  . c o m
                String.format("@HasAttribute annotation is only valid for dom events. Found: %s.%s",
                        presenterType.getQualifiedSourceName(), m.getName()));
        throw new UnableToCompleteException();
    }

    String[] attributes = binderContext.getMethod().getAnnotation(HasAttribute.class).value();

    StringSourceWriter writer = new StringSourceWriter();
    writer.println(elementName + " _has_attribute_element = (" + elementName
            + ")event.getNativeEvent().getEventTarget().cast();");
    writer.print("if (");
    for (int n = 0; n < attributes.length; n++) {
        if (n > 0) {
            writer.print(" || ");
        }
        writer.print("!_has_attribute_element.hasAttribute(\"" + attributes[n] + "\")");
    }
    writer.print(") {return;}");
    binderContext.addBeforeWrappers(writer);
}

From source file:com.guit.rebind.binder.contributor.HasClassContributor.java

License:Apache License

@Override
public void contribute(BinderContext binderContext, TreeLogger logger, GeneratorContext context)
        throws UnableToCompleteException {
    JMethod m = binderContext.getMethod();
    JClassType eventType = binderContext.getEventType();
    JClassType presenterType = binderContext.getPresenterType();
    if (!eventType.getPackage().getName().equals(domEventsPackage)) {
        logger.log(Type.ERROR, String.format("@HasClass annotation is only valid for dom events. Found: %s.%s",
                presenterType.getQualifiedSourceName(), m.getName()));
        throw new UnableToCompleteException();
    }//from  www  .  ja v a  2s.c  om

    String[] attributes = binderContext.getMethod().getAnnotation(HasClass.class).value();

    StringSourceWriter writer = new StringSourceWriter();
    writer.println(elementName + " _has_class_element = (" + elementName
            + ")event.getNativeEvent().getEventTarget().cast();");
    writer.print("if (");
    for (int n = 0; n < attributes.length; n++) {
        if (n > 0) {
            writer.print(" || ");
        }
        writer.print("!_has_class_element.getClassName().contains(\"" + attributes[n] + "\")");
    }
    writer.print(") {return;}");
    binderContext.addBeforeWrappers(writer);
}

From source file:com.guit.rebind.binder.contributor.PreventDefaultContributor.java

License:Apache License

@Override
public void contribute(BinderContext binderContext, TreeLogger logger, GeneratorContext context)
        throws UnableToCompleteException {
    JMethod m = binderContext.getMethod();
    JClassType eventType = binderContext.getEventType();
    JClassType presenterType = binderContext.getPresenterType();
    if (!eventType.getPackage().getName().equals(domEventsPackage)) {
        logger.log(Type.ERROR,//from   w w w.j  ava 2s.  c o m
                String.format("@PreventDefault annotation is only valid for dom events. Found: %s.%s",
                        presenterType.getQualifiedSourceName(), m.getName()));
        throw new UnableToCompleteException();
    }

    StringSourceWriter writer = new StringSourceWriter();
    writer.print("event.preventDefault();");
    binderContext.addBeforeHandler(writer);
}

From source file:com.guit.rebind.binder.contributor.StopPropagationContributor.java

License:Apache License

@Override
public void contribute(BinderContext binderContext, TreeLogger logger, GeneratorContext context)
        throws UnableToCompleteException {
    JMethod m = binderContext.getMethod();
    JClassType eventType = binderContext.getEventType();
    JClassType presenterType = binderContext.getPresenterType();
    if (!eventType.getPackage().getName().equals(domEventsPackage)) {
        logger.log(Type.ERROR,//from   ww w .j av a  2 s  .c  om
                String.format("@StopPropagation annotation is only valid for dom events. Found: %s.%s",
                        presenterType.getQualifiedSourceName(), m.getName()));
        throw new UnableToCompleteException();
    }

    StringSourceWriter writer = new StringSourceWriter();
    writer.print("event.stopPropagation();");
    binderContext.addBeforeHandler(writer);
}

From source file:com.guit.rebind.binder.contributor.UserActionContributor.java

License:Apache License

@Override
public void contribute(BinderContext binderContext, TreeLogger logger, GeneratorContext context)
        throws UnableToCompleteException {
    String userAction = binderContext.getMethod().getAnnotation(UserAction.class).value();

    StringSourceWriter writer = new StringSourceWriter();
    String component;/*  w  ww  .j  av a 2 s  .c  om*/
    JClassType presenterType = binderContext.getPresenterType();
    if (presenterType.isAnnotationPresent(Category.class)) {
        component = presenterType.getAnnotation(Category.class).value();
    } else {
        component = presenterType.getQualifiedSourceName();
    }

    writer.print("eventBus.fireEvent(new " + UserActionEvent.class.getCanonicalName() + "(\"" + component
            + "\", \"" + userAction + "\"");

    JClassType hasUserAction = context.getTypeOracle().findType(HasUserActionValue.class.getCanonicalName());
    if (!presenterType.isAssignableTo(hasUserAction)) {
        writer.println("));");
    } else {
        writer.println(", presenter.getUserActionText(), presenter.getUserActionNumber()));");
    }
    binderContext.addAfterHandler(writer);
}

From source file:com.guit.rebind.binder.GuitBinderGenerator.java

License:Apache License

private void printViewBindingMethods(SourceWriter writer, JClassType presenterType, String viewTypeName,
        HashMap<String, JType> validBindingFieldsTypes) throws UnableToCompleteException {

    Set<String> validBindingFields = validBindingFieldsTypes.keySet();

    JPackage contextEventsPackage = getPackage(presenterType.getPackage().getName() + ".event");

    ArrayList<JMethod> methods = new ArrayList<JMethod>();
    findAllMethods(presenterType, methods);

    for (JMethod m : methods) {
        String name = m.getName();
        if (m.isAnnotationPresent(ViewHandler.class)) {
            validateHandler(m, name, presenterType.getQualifiedSourceName());

            String eventName;/*w ww .java  2  s . co  m*/
            ViewHandler viewHandlerAnnotation = m.getAnnotation(ViewHandler.class);
            JClassType eventType = getType(viewHandlerAnnotation.event().getCanonicalName());

            boolean fieldsAreElements = false;
            Set<String> bindingFields = null;
            boolean addHandlerToView = false;
            if (viewHandlerAnnotation.fields().length == 0) {
                if (name.startsWith("$")) {
                    // Direct view binding
                    eventName = name.substring(1);

                    addHandlerToView = true;
                } else {
                    // View fields binding
                    String[] nameParts = name.split("[$]");

                    // Check the name format
                    if (nameParts.length < 2) {
                        error("The method %s on the class %s have a bad binding format. It should be: "
                                + "'{viewField}${eventName}' or for binding multiple fields: '{viewField1}${viewField2}${eventName}'",
                                name, presenterType.getQualifiedSourceName());
                    }

                    // Check that the binding fields are valid
                    bindingFields = new HashSet<String>();
                    for (int n = 0; n < nameParts.length - 1; n++) {
                        if (!validBindingFields.contains(nameParts[n])) {
                            error("The field %s on the class %s is not a valid binding field. It must be public or protected and not static",
                                    nameParts[n], presenterType);
                        }
                        bindingFields.add(nameParts[n]);
                    }

                    eventName = nameParts[nameParts.length - 1]; // last
                    // token
                }

                // Check the event type and name convention
                if (eventType.equals(gwtEventType)) {
                    eventType = getEventByName(eventName, contextEventsPackage);
                    if (eventType == null) {
                        error("There is no context, dom or shared event with the name '%s'. Binding method: '%s' in class: '%s'",
                                eventName, name, presenterType.getQualifiedSourceName());
                    }
                } else {
                    // Check that the method name correspond to the event
                    // type
                    String eventNameToEventClassName = eventNameToEventClassName(eventName);
                    if (!eventNameToEventClassName.equals(eventType.getSimpleSourceName())) {
                        error("The method '%s' in the class '%s' have a typo in the name. The last token should be : ..$%s() {.. ",
                                name, presenterType.getQualifiedSourceName(), eventName);
                    }
                }
            } else {
                String[] fields = viewHandlerAnnotation.fields();
                bindingFields = new HashSet<String>();
                for (String f : fields) {
                    if (f.isEmpty()) {
                        addHandlerToView = true;
                    } else {
                        if (!validBindingFields.contains(f)) {
                            error("The field %s on the class %s is not a valid binding field. It must be public or protected and not static",
                                    f, presenterType);
                        }
                        bindingFields.add(f);
                    }
                }

                if (eventType.equals(gwtEventType)) {
                    error("When using ViewFields you must specify the event class in the Handler annotation. Found: %s.%s",
                            presenterType.getQualifiedSourceName(), name);
                }

                eventName = eventClassNameToEventName(eventType.getSimpleSourceName());
            }

            // If any field is an element all of them should be otherwise none
            // of them
            int widgetCount = 0;
            JClassType widgetJType = getType(Widget.class.getCanonicalName());
            JClassType isWidgetJType = getType(IsWidget.class.getCanonicalName());
            for (String f : bindingFields) {
                JClassType classOrInterface = validBindingFieldsTypes.get(f).isClassOrInterface();
                if (classOrInterface.isAssignableTo(widgetJType)
                        || classOrInterface.isAssignableTo(isWidgetJType)) {
                    widgetCount++;
                }
            }

            if (widgetCount != bindingFields.size() && widgetCount != 0) {
                error("Not all fields on the class %s.%s are either all elements or all widgets. You cannot bind elements and widgets on the same handler",
                        presenterType, name);
            }
            fieldsAreElements = widgetCount == 0;

            /**
             * Find parameters bindings. The binding can be with the event(cannot have anidation of
             * getters):'getter'->'getGetter()' or with the view:'$getter'->'view.getGetter()' or with a
             * view field '{viewField$getter}'->'view.viewField.getGetter();', this last two ones will
             * support anidation: '{viewField$getter$another}'->'view.viewField.getGetter().getAnother (
             * ) ; '
             **/
            StringBuilder bindingParameters = new StringBuilder();
            JParameter[] parameters = m.getParameters();
            ArrayList<String> parameterStrings = new ArrayList<String>();
            for (JParameter p : parameters) {
                String parameter = p.getName();
                JType parameterType = p.getType();
                if (bindingParameters.length() > 0) {
                    bindingParameters.append(", ");
                }

                int initlenght = bindingParameters.length();

                // Implicit cast
                bindingParameters.append(
                        "(" + parameterType.getErasedType().getParameterizedQualifiedSourceName() + ")");

                String getter = "get";

                // Check if it is a boolean then the getter is 'is' not
                // 'get'
                JPrimitiveType parameterTypeIsPrimitive = parameterType.isPrimitive();
                if (parameterTypeIsPrimitive != null
                        && parameterTypeIsPrimitive.equals(JPrimitiveType.BOOLEAN)) {
                    getter = "is";
                }

                if (p.getName().equals("event")) {
                    bindingParameters.append("event");
                } else if (p.isAnnotationPresent(Attribute.class)) {
                    // Only valid for domEvents
                    if (!eventType.isAssignableTo(hasNativeEventType)) {
                        error("Attributes binding are only valid for DomEvents. Found: %s.%s in parameter: %s",
                                presenterType.getQualifiedSourceName(), name, parameter);
                    }

                    String parameterTypeQualifiedSourceName = parameterType.getQualifiedSourceName();
                    boolean isString = parameterTypeQualifiedSourceName.equals(STRINGCANONICALNAME);
                    if (!isString) {
                        bindingParameters.append(parameterTypeQualifiedSourceName + ".valueOf(");
                    }
                    bindingParameters.append("((" + Element.class.getCanonicalName()
                            + ")event.getNativeEvent().getEventTarget().cast()).getAttribute(\"" + parameter
                            + "\")");
                    if (!isString) {
                        bindingParameters.append(")");
                    }
                } else if (parameter.indexOf("$") == -1) {
                    // Event binding
                    bindingParameters.append("event.");
                    bindingParameters.append(getter);
                    bindingParameters.append(capitalize(parameter));
                    bindingParameters.append("()");
                } else {
                    // Event binding nested binding
                    String[] parameterParts = parameter.split("[$]");

                    bindingParameters.append("event");
                    for (int n = 0; n < parameterParts.length - 1; n++) {
                        bindingParameters.append(".get");
                        bindingParameters.append(capitalize(parameterParts[n]));
                        bindingParameters.append("()");
                    }

                    bindingParameters.append(".");
                    bindingParameters.append(getter);
                    bindingParameters.append(capitalize(parameterParts[parameterParts.length - 1]));
                    bindingParameters.append("()");
                }

                parameterStrings.add(bindingParameters.substring(initlenght, bindingParameters.length()));
            }

            // Get event handler name
            JClassType handlerType = getHandlerForEvent(eventType);
            if (handlerType == null) {
                error("Parameter '%s' is not an event (subclass of GwtEvent).", eventType.getName());
            }

            // Retrieves the single method (usually 'onSomething') related
            // to all
            // handlers. Ex: onClick in ClickHandler, onBlur in BlurHandler
            // ...
            JMethod[] handlerMethods = handlerType.getMethods();
            if (handlerMethods.length != 1) {
                error("'%s' has more than one method defined.", handlerType.getName());
            }

            // 'onSomething' method
            JMethod handlerOnMethod = handlerMethods[0];

            String methodName = name;
            String handlerTypeName = handlerType.getQualifiedSourceName();

            GwtPresenter presenterAnnotation = presenterType.getAnnotation(GwtPresenter.class);
            boolean isElemental = presenterAnnotation != null && presenterAnnotation.elemental();

            // Write handler
            SourceWriter eventHandlerWriter = new StringSourceWriter();
            if (!fieldsAreElements) {
                eventHandlerWriter.println("new " + handlerTypeName + "() {");
                eventHandlerWriter.indent();
                eventHandlerWriter.println("public void " + handlerOnMethod.getName() + "(final "
                        + eventType.getQualifiedSourceName() + " event) {");
                eventHandlerWriter.indent();
            } else if (isElemental) {
                eventHandlerWriter.println("new elemental.events.EventListener() {");
                eventHandlerWriter.println("  @Override");
                eventHandlerWriter.println("  public void handleEvent(elemental.events.Event event) {");
            } else {
                eventHandlerWriter
                        .println("new " + com.guit.client.dom.EventHandler.class.getCanonicalName() + "() {");
                eventHandlerWriter.indent();
                eventHandlerWriter
                        .println("public void onEvent(" + Event.class.getCanonicalName() + " event_) {");
                eventHandlerWriter.println("  " + EventImpl.class.getCanonicalName() + " event = ("
                        + EventImpl.class.getCanonicalName() + ") event_;");
                eventHandlerWriter.indent();
            }

            String bindingParametersString = bindingParameters.toString();

            // Process contributors
            BinderContextImpl binderContext = processMethodContributors(presenterType, null, null, viewTypeName,
                    m, eventType, parameterStrings.toArray(new String[parameterStrings.size()]));

            StringSourceWriter handlerWriter = new StringSourceWriter();

            handlerWriter
                    .println("if (" + LogConfiguration.class.getCanonicalName() + ".loggingIsEnabled()) {");
            handlerWriter.println(Logger.class.getCanonicalName() + ".getLogger(\"Binder\").info(\""
                    + binderContext.getLog() + "\");");
            handlerWriter.println("}");

            handlerWriter.print("presenter." + methodName + "(");
            handlerWriter.print(bindingParametersString);
            handlerWriter.println(");");

            eventHandlerWriter.println(binderContext.build(handlerWriter));

            eventHandlerWriter.outdent();
            eventHandlerWriter.println("}");
            eventHandlerWriter.outdent();
            eventHandlerWriter.print("}");

            if (fieldsAreElements) {
                if (bindingFields != null) {
                    writer.print("final "
                            + (isElemental ? EventListener.class.getCanonicalName()
                                    : com.guit.client.dom.EventHandler.class.getCanonicalName())
                            + " " + methodName + "$" + eventName + " =");
                    writer.print(eventHandlerWriter.toString());
                    writer.println(";");

                    for (String f : bindingFields) {
                        String eventNameLower = eventName.toLowerCase();
                        boolean isTouchStart = eventNameLower.equals("touchstart");
                        boolean isTouchEnd = eventNameLower.equals("touchend");
                        if (isTouchStart || isTouchEnd) {
                            writer.println("if (com.google.gwt.event.dom.client.TouchEvent.isSupported()) {");
                        }
                        if (isElemental) {
                            writer.println("presenter." + f + ".setOn" + eventNameLower + "(" + methodName + "$"
                                    + eventName + ");");
                        } else {
                            writer.println("bindings.add(new " + ElementImpl.class.getCanonicalName() + "(view."
                                    + f + ")." + eventNameLower + "(" + methodName + "$" + eventName + "));");
                        }
                        if (isTouchStart || isTouchEnd) {
                            writer.println("} else {");

                            if (isElemental) {
                                writer.println("presenter." + f + ".setOnmouse" + (isTouchStart ? "down" : "up")
                                        + "(" + methodName + "$" + eventName + ");");
                            } else {
                                writer.println("bindings.add(new " + ElementImpl.class.getCanonicalName()
                                        + "(view." + f + ")." + (isTouchStart ? "mousedown" : "mouseup") + "("
                                        + methodName + "$" + eventName + "));");
                            }

                            writer.print("}");
                        }
                    }
                }
            } else if (viewHandlerAnnotation.force()) {
                String addMethodName = "addDomHandler";
                String eventTypeGetter = eventType.getQualifiedSourceName() + ".";
                JField typeField = eventType.getField("TYPE");
                if (typeField != null && typeField.isStatic() && typeField.isPublic()) {
                    eventTypeGetter += "TYPE";
                } else {
                    eventTypeGetter += "getType()";
                }
                if (bindingFields != null) {
                    writer.print("final " + handlerTypeName + " " + methodName + " =");
                    writer.print(eventHandlerWriter.toString());
                    writer.println(";");

                    for (String f : bindingFields) {
                        writer.println("bindings.add(view." + f + "." + addMethodName + "(" + methodName + ", "
                                + eventTypeGetter + "));");
                    }
                }

                if (addHandlerToView) {
                    writer.print("bindings.add(view." + addMethodName + "(" + eventHandlerWriter.toString()
                            + ", " + eventTypeGetter + "));");
                }
            } else {
                String addMethodName = "add" + eventName.substring(0, 1).toUpperCase() + eventName.substring(1)
                        + "Handler";
                if (bindingFields != null) {
                    writer.print("final " + handlerTypeName + " " + methodName + " =");
                    writer.print(eventHandlerWriter.toString());
                    writer.println(";");

                    for (String f : bindingFields) {

                        // Small patch for touch events
                        if (addMethodName.equals("addTouchStartHandler") && parameters.length == 0) {
                            writer.println("if (!com.google.gwt.event.dom.client.TouchEvent.isSupported()) {");
                            writer.println("bindings.add(view." + f + ".addMouseDownHandler(new "
                                    + MouseDownHandler.class.getCanonicalName() + "(){public void onMouseDown("
                                    + MouseDownEvent.class.getCanonicalName() + " event){presenter."
                                    + methodName + "();} }" + "));");
                            writer.println("}");
                        }

                        if (addMethodName.equals("addTouchEndHandler") && parameters.length == 0) {
                            writer.println("if (!com.google.gwt.event.dom.client.TouchEvent.isSupported()) {");
                            writer.println("bindings.add(view." + f + ".addMouseUpHandler(new "
                                    + MouseUpHandler.class.getCanonicalName() + "(){public void onMouseUp("
                                    + MouseUpEvent.class.getCanonicalName() + " event){presenter." + methodName
                                    + "();} }" + "));");
                            writer.println("}");
                        }
                        writer.println(
                                "bindings.add(view." + f + "." + addMethodName + "(" + methodName + "));");
                    }
                }

                if (addHandlerToView) {
                    writer.print(
                            "bindings.add(view." + addMethodName + "(" + eventHandlerWriter.toString() + "));");
                }
            }
        } else {
            for (Annotation a : m.getAnnotations()) {
                Class<? extends Annotation> annotationType = a.annotationType();
                if (annotationType.isAnnotationPresent(Plugin.class)) {
                    String[] nameParts = name.split("[$]");

                    // Check that the binding fields are valid
                    StringBuilder fields = new StringBuilder();
                    for (int n = 0; n < nameParts.length - 1; n++) {
                        if (!validBindingFields.contains(nameParts[n])) {
                            error("The field %s on the class %s is not a valid binding field. It must be public or protected and not static",
                                    nameParts[n], presenterType);
                        }
                        if (fields.length() > 0) {
                            fields.append(",");
                        }
                        fields.append("view." + nameParts[n]);
                    }

                    Class<?> handler = annotationType.getAnnotation(Plugin.class).value();
                    writer.println("new " + handler.getCanonicalName()
                            + "().install(new com.google.gwt.user.client.Command() {");
                    writer.println("@Override");
                    writer.println("public void execute() {");
                    writer.println("  presenter." + m.getName() + "();");
                    writer.println("}");
                    writer.println("}, new Object[]{");
                    writer.println(fields.toString() + "});");
                }
            }
        }
    }
}