List of usage examples for com.google.gwt.user.rebind StringSourceWriter print
public void print(String s)
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() + "});"); } } } } }