List of usage examples for com.google.gwt.core.ext.typeinfo JClassType getField
JField getField(String name);
From source file:com.guit.rebind.binder.GuitBinderGenerator.java
License:Apache License
@Override protected void generate(SourceWriter writer) throws UnableToCompleteException { // Do we need to check this? JClassType presenterType = baseClass.getImplementedInterfaces()[0].isParameterized().getTypeArgs()[0]; // Presenter or controller boolean isPresenter = checkIsPresenter(presenterType); hasNativeEventType = hasNativeEventType == null ? getType(HasNativeEvent.class.getCanonicalName()) : hasNativeEventType;/*from w ww. j ava2 s . co m*/ // If it is a parameterized type we need to find the base type to get // the right method names while (presenterType.isParameterized() != null || presenterType.isRawType() != null) { if (presenterType.isParameterized() != null) { presenterType = presenterType.isParameterized().getBaseType(); } else { presenterType = presenterType.isRawType().getBaseType(); } } checkForRepetition(presenterType); writer.println(bindingsDeclaration); writer.println(eventBusbindingsDeclaration); String viewTypeName = null; HashMap<String, JType> validBindingFieldsTypes = null; if (isPresenter) { viewTypeName = guitViewGenerator.generate(logger, context, presenterType.getQualifiedSourceName()); writer.println(viewTypeName + " view;"); // Field -> Type (for validation purpose) validBindingFieldsTypes = getValidGuitViewBindingFields(presenterType); // View pool writer.println("private static " + ViewPool.class.getCanonicalName() + " pool = new " + ViewPool.class.getCanonicalName() + "();"); } // If is an editor generate the driver boolean isGwtEditor = presenterType.isAnnotationPresent(GwtEditor.class); GwtEditor editor = null; Class<?> editorDriver = null; if (isGwtEditor) { editor = presenterType.getAnnotation(GwtEditor.class); editorDriver = editor.base(); writer.println("public static interface Driver extends " + editorDriver.getCanonicalName() + "<" + editor.pojo().getCanonicalName() + "," + viewTypeName + "> {}"); } writer.println(presenterType.getQualifiedSourceName() + " presenter;"); writer.println(EventBus.class.getCanonicalName() + " eventBus;"); writer.println("boolean isBinded = false;"); /* * Event bus binder. */ writer.println("public void bind(final " + presenterType.getQualifiedSourceName() + " presenter, final " + EventBus.class.getCanonicalName() + " eventBus) {"); writer.indent(); writer.println("this.presenter = presenter;"); writer.println("this.eventBus = eventBus != null ? eventBus : " + GuitEntryPoint.class.getCanonicalName() + ".getEventBus();"); printEventBusBindingMethods(writer, presenterType); writer.outdent(); writer.println("}"); /* * View binder. */ writer.println("public " + View.class.getCanonicalName() + " getView() {"); writer.indent(); if (isPresenter) { // If already binded return the view writer.println("if (isBinded) {"); writer.println(" return view;"); writer.println("}"); // Find a view from the pool or create a new one writer.println("if (pool.isEmpty()) {"); writer.println("view = (" + viewTypeName + ") new " + viewTypeName + "();"); ArrayList<JField> fields = new ArrayList<JField>(); collectAllFields(presenterType, fields); // Provided fields printProvidedFields(presenterType, validBindingFieldsTypes, writer, false, fields); writer.println("view.bind();"); writer.println("} else {"); writer.println("view = (" + viewTypeName + ") pool.pop();"); // Provided fields printProvidedFields(presenterType, validBindingFieldsTypes, writer, true, fields); writer.println("}"); printViewFieldBindings(writer, presenterType, viewTypeName, validBindingFieldsTypes, fields); printViewBindingMethods(writer, presenterType, viewTypeName, validBindingFieldsTypes); // Initializers printPresentersInitilizersCalls(writer, presenterType); writer.println("isBinded = true;"); // GwtEditor if (isGwtEditor) { writer.println("Driver driver = GWT.create(Driver.class);"); if (editorDriver.equals(RequestFactoryEditorDriver.class)) { JField factoryField = presenterType.getField("factory"); if (factoryField == null || !factoryField.getType().isClassOrInterface() .isAssignableTo(getType(RequestFactory.class.getCanonicalName())) || factoryField.isPrivate()) { error("The presenter does not have a non-private factory field of the type RequestFactory. Found: " + presenterType.getQualifiedSourceName() + ".factory"); } writer.println("driver.initialize(eventBus, presenter.factory, view);"); } else { writer.println("driver.initialize(view);"); } writer.println("presenter.driver = driver;"); } // Return the view or null writer.println("return view;"); } else { writer.println("return null;"); } writer.outdent(); writer.println("}"); /* * Unbind */ writer.println("public void releaseView() {"); writer.indent(); if (isPresenter) { writer.println("for (" + handlerRegistrationName + " b : bindings) {b.removeHandler();}"); writer.println("bindings.clear();"); if (isPresenter) { // Recycle the view writer.println("if (view != null) {"); writer.indent(); writer.println("pool.push(view);"); writer.println("view = null;"); writer.outdent(); writer.println("}"); } writer.println("isBinded = false;"); } writer.outdent(); writer.println("}"); /* * Destroy. */ writer.println("public void destroy() {"); writer.indent(); writer.println("for (" + handlerRegistrationName + " b : eventBusBindings) {b.removeHandler();}"); if (isPresenter) { writer.println("releaseView();"); } writer.println("bindings = null;"); writer.println("eventBusBindings = null;"); writer.println("presenter = null;"); writer.println("eventBus = null;"); writer.outdent(); writer.println("}"); }
From source file:com.guit.rebind.binder.GuitBinderGenerator.java
License:Apache License
/** * Finds the valid methods and check all the conventions. *///from ww w.java 2 s. co m protected void printEventBusBindingMethods(SourceWriter writer, JClassType presenterType) throws UnableToCompleteException { JPackage contextEventsPackage = getPackage(presenterType.getPackage().getName() + ".event"); for (JMethod m : presenterType.getMethods()) { if (m.isAnnotationPresent(EventBusHandler.class)) { EventBusHandler eventBusHandler = m.getAnnotation(EventBusHandler.class); String name = m.getName(); String presenterName = presenterType.getQualifiedSourceName(); validateHandler(m, name, presenterName); // Find the event type JParameter[] parameters = m.getParameters(); if (!name.startsWith("$") && !name.startsWith("eventBus$")) { error("Bad method name: %s on class: %s, the method should start with '$' or 'eventBus$'", name, presenterName); } // Clean the name if (name.startsWith("$")) { name = name.substring(1); // Cut off the $ } else { name = name.substring(9); // Cut off the eventBus$ } JClassType eventType = getType(eventBusHandler.value().getCanonicalName()); if (eventType.equals(gwtEventType)) { eventType = getEventByName(name, contextEventsPackage); if (eventType == null) { error("There is no context, dom or shared event with the name '%s'. Binding method: '%s' in class: '%s'", name, m.getName(), presenterType.getQualifiedSourceName()); } } StringBuilder bindingParameters = new StringBuilder(); ArrayList<String> parameterStrings = new ArrayList<String>(); for (JParameter p : parameters) { String parameter = p.getName(); if (bindingParameters.length() > 0) { bindingParameters.append(", "); } int initlenght = bindingParameters.length(); // Implicit cast bindingParameters .append("(" + p.getType().getErasedType().getParameterizedQualifiedSourceName() + ")"); String getter = "get"; // Check if it is a boolean then the getter is 'is' not // 'get' JPrimitiveType parameterTypeIsPrimitive = p.getType().isPrimitive(); if (parameterTypeIsPrimitive != null && parameterTypeIsPrimitive.equals(JPrimitiveType.BOOLEAN)) { getter = "is"; } // Event getter binding 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())); } // Find the event name String simpleName = eventType.getSimpleSourceName(); if (!simpleName.endsWith("Event")) { error("The event %s does not use the event convention. It should end with 'Event'", eventType.getQualifiedSourceName()); } String eventName = eventClassNameToEventName(simpleName); // Check that the name of the event correspond to the method // name convention if (!eventName.equals(name)) { error("The method %s on class %s does not use the event bus handler method convention. " + "It should start with '$' or 'eventBus$' " + "and end with the event name. i.e ValueChangeEvent -> $valueChange. Solve it renaming it to '$%s'", m.getName(), presenterName, eventName); } // 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[] methods = handlerType.getMethods(); if (methods.length != 1) { error("'%s' has more than one method defined.", handlerType.getName()); } // 'onSomething' method JMethod handlerOnMethod = methods[0]; // Checks if the method has an Event as parameter. Ex: // ClickEvent in onClick, BlurEvent in onBlur ... parameters = handlerOnMethod.getParameters(); if (parameters.length != 1) { error("Method '%s' needs '%s' as parameter", handlerOnMethod.getName(), eventType.getName()); } writer.println("eventBusBindings.add(eventBus.addHandler("); writer.println(eventType.getQualifiedSourceName() + "."); // getType or TYPE ? JField typeField = eventType.getField("TYPE"); if (typeField != null && typeField.isStatic() && typeField.isPublic()) { writer.println("TYPE"); } else { writer.println("getType()"); } writer.println(", "); writer.println("new " + handlerType.getQualifiedSourceName() + "() {"); writer.indent(); writer.println("public void " + handlerOnMethod.getName() + "(final " + eventType.getQualifiedSourceName() + " event) {"); writer.indent(); // Process contributors String bindingParametersString = bindingParameters.toString(); BinderContextImpl binderContext = processMethodContributors(presenterType, null, null, null, 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.println("presenter." + m.getName() + "(" + bindingParametersString + ");"); writer.println(binderContext.build(handlerWriter)); writer.outdent(); writer.println("}"); writer.outdent(); writer.println("}));"); } } }
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 w w. j a v a2 s . com*/ 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() + "});"); } } } } }
From source file:org.cruxframework.crux.core.utils.JClassUtils.java
License:Apache License
/** * @param clazz/* w ww. j ava 2 s.com*/ * @param name * @return */ public static JField getDeclaredField(JClassType clazz, String name) throws NoSuchFieldException { JField field = clazz.getField(name); if (field == null) { if (clazz.getSuperclass() == null) { throw new NoSuchFieldException(name); } field = getDeclaredField(clazz.getSuperclass(), name); } return field; }
From source file:org.jboss.errai.ioc.rebind.ioc.codegen.meta.impl.gwt.GWTClass.java
License:Apache License
@Override public MetaField getField(String name) { JClassType type = getEnclosedMetaObject().isClassOrInterface(); if (type == null) { return null; }//from w ww . j ava 2s . c o m JField field = type.getField(name); if (field == null) { throw new RuntimeException("no such field: " + field); } return new GWTField(field); }
From source file:org.jboss.errai.widgets.rebind.WidgetMappingsGenerator.java
License:Apache License
private void generateExtensions(GeneratorContext context, TreeLogger logger, SourceWriter sourceWriter) { // start constructor source generation sourceWriter.println("public " + className + "() { "); sourceWriter.println("}"); sourceWriter.println("public void mapAll(final " + strTargetType + " widget) { "); sourceWriter.outdent();//from w ww .j a v a2 s . com try { JClassType widgetMapper = typeOracle.getType(CollectionWidgetMapper.class.getName()); for (JField currField : targetClass.getFields()) { if (currField.isAnnotationPresent(WidgetMapper.class) && widgetMapper.isAssignableFrom(currField.getType().isClassOrInterface())) { WidgetMapper mf = currField.getAnnotation(WidgetMapper.class); JField widgetField = targetClass.getField(mf.value()); String varName = widgetField.getName() + "Mapper"; JClassType binderField = currField.getType().isClassOrInterface(); JParameterizedType pType = binderField.isParameterized(); if (pType == null) { RuntimeException e = new RuntimeException( "Field '" + currField.getName() + "' must be parameterized"); logger.log(TreeLogger.Type.ERROR, e.getMessage(), e); throw e; } // The last type arg shall always be our domain object type per this spec. JClassType jEntityTarget = pType.getTypeArgs()[pType.getTypeArgs().length - 1]; String strTypeParms = generateTypeParmString(pType); List<JField> fieldsToMap = new LinkedList<JField>(); /** * If an EntityFields annotatio is present, then we discriminate on those fields. Otherwise * we capture all fields by default. */ if (currField.isAnnotationPresent(EntityFields.class)) { EntityFields ef = currField.getAnnotation(EntityFields.class); for (String fieldName : ef.value()) { JField fld = jEntityTarget.getField(fieldName); if (fld == null) { RuntimeException e = new RuntimeException("no such field in entity class '" + jEntityTarget.getName() + "': " + fieldName); logger.log(TreeLogger.Type.ERROR, e.getMessage(), e); throw e; } fieldsToMap.add(jEntityTarget.getField(fieldName)); } } else { for (JField fld : jEntityTarget.getFields()) { if (fld.getEnclosingType().equals(jEntityTarget)) { fieldsToMap.add(fld); } } } List<String> generatedInitializations = new LinkedList<String>(); List<String> generatedBindings = new LinkedList<String>(); FieldMapperGenerator g = getFieldMapper(widgetField.getType().getQualifiedSourceName()); generatedInitializations.add( g.init(typeOracle, widgetField, jEntityTarget, currField, null, varName, fieldsToMap)); if (g == null) { throw new RuntimeException( "Cannot generateGetField mapper for widget: " + jEntityTarget.getName()); } for (JField fld : fieldsToMap) { String fieldName = fld.getName(); JField targetField = jEntityTarget.getField(fieldName); if (targetField == null) { throw new RuntimeException( "The field '" + fieldName + "' does not correspond with a field in the class: " + jEntityTarget.getQualifiedSourceName()); } generatedBindings.add(g.generateFieldMapperGenerator(typeOracle, widgetField, jEntityTarget, null, targetField)); } Map<String, Object> vars = new HashMap<String, Object>(); vars.put("typeOracle", typeOracle); vars.put("variableName", varName); vars.put("strTypeParms", strTypeParms); vars.put("targetWidget", widgetField.getType().getQualifiedSourceName()); vars.put("targetType", jEntityTarget.getQualifiedSourceName()); vars.put("initializers", generatedInitializations); vars.put("bindings", generatedBindings); vars.put("targetFieldName", widgetField.getName()); String s = (String) TemplateRuntime.execute(mappingsGen, vars); sourceWriter.print(s); s = "widget." + currField.getName() + " = " + varName + ";"; sourceWriter.println(s); } else if (currField.isAnnotationPresent(EntityMapped.class)) { EntityMapped entityMappedA = currField.getAnnotation(EntityMapped.class); JClassType entityType = currField.getType().isClassOrInterface(); String varName = currField.getName() + "Mapper"; String entityFieldName = currField.getName(); String toEntityField; Map<String, List<JField>> toBeMapped = new HashMap<String, List<JField>>(); for (JField fld : targetClass.getFields()) { if (fld.isAnnotationPresent(MapField.class)) { MapField mapFieldA = fld.getAnnotation(MapField.class); toEntityField = "".equals(mapFieldA.value()) ? entityFieldName : mapFieldA.value(); if (!toBeMapped.containsKey(toEntityField)) { toBeMapped.put(toEntityField, new LinkedList<JField>()); } toBeMapped.get(toEntityField).add(fld); } } /** * Generate the field mappings. */ for (Map.Entry<String, List<JField>> entry : toBeMapped.entrySet()) { List<String> generatedInitializations = new LinkedList<String>(); List<String> generatedBindings = new LinkedList<String>(); ArrayList<String[]> fieldIndexPositions = new ArrayList<String[]>(); for (JField fld : entry.getValue()) { JClassType classType = fld.getType().isClassOrInterface(); String fieldName = fld.getAnnotation(MapField.class).value(); if ("".equals(fieldName)) { fieldName = fld.getName(); } JField targetField = entityType.getField(fieldName); if (targetField == null) { throw new RuntimeException("The field '" + fieldName + "' does not correspond with a field in the class: " + entityType.getQualifiedSourceName()); } JClassType targetFieldType = targetField.getType().isClassOrInterface(); FieldMapperGenerator g = getFieldMapper(classType.getQualifiedSourceName()); if (g == null) { throw new RuntimeException( "Cannot generateGetField mapper for widget: " + classType.getName()); } generatedInitializations .add(g.init(typeOracle, fld, entityType, targetField, currField, null, null)); generatedBindings.add(g.generateFieldMapperGenerator(typeOracle, fld, entityType, targetField, currField)); if (getType(typeOracle, Widget.class).isAssignableFrom(classType)) { fieldIndexPositions .add(new String[] { fieldName, g.generateValueExtractorStatement(typeOracle, fld, entityType, targetField, currField) }); } } Map<String, Object> vars = new HashMap<String, Object>(); vars.put("typeOracle", typeOracle); vars.put("variableName", varName); vars.put("initializers", generatedInitializations); vars.put("targetFieldName", entityFieldName); vars.put("bindings", generatedBindings); vars.put("fieldIndexPositions", fieldIndexPositions); vars.put("entityFieldName", entityFieldName); String s = (String) TemplateRuntime.execute(entityMappingGen, vars); sourceWriter.print(s); } } else if (currField.isAnnotationPresent(AddAllTo.class)) { String copyToField = currField.getAnnotation(AddAllTo.class).value(); String copyFromField = currField.getName(); Map<String, Object> vars = new HashMap<String, Object>(); vars.put("copyToField", copyToField); vars.put("copyFromField", copyFromField); String s = (String) TemplateRuntime.execute(addAllToGen, vars); sourceWriter.print(s); } } } catch (Exception e) { logger.log(TreeLogger.Type.ERROR, "failed to map field (does not exist)", e); e.printStackTrace(); } // end constructor source generation sourceWriter.outdent(); sourceWriter.println("}"); }
From source file:org.pentaho.mantle.rebind.CommandExecGenerator.java
License:Open Source License
private void generateMethods(SourceWriter sourceWriter) { sourceWriter.println();//from w w w. jav a 2s . co m sourceWriter.println( "public native String getParameterString(final String paramName, final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println( "public native Integer getParameterInteger(final String paramName, final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println( "public native Boolean getParameterBoolean(final String paramName, final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println("public native Float getParameterFloat(final String paramName," + "final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println("public native Double getParameterDouble(final String paramName, " + "final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println( "public native Long getParameterLong(final String paramName, final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println("public native Short getParameterShort(final String paramName," + "final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter .println("public void execute(final String commandName, final JavaScriptObject parameterMap) { "); sourceWriter.indent(); try { // find Command implementors ArrayList<JClassType> implementingTypes = new ArrayList<JClassType>(); JPackage pack = typeOracle.getPackage(CommandExec.class.getPackage().getName()); JClassType commandSourceType = typeOracle.getType(Command.class.getName()); for (JClassType type : pack.getTypes()) { if (type.isAssignableTo(commandSourceType)) { implementingTypes.add(type); } } sourceWriter.println("if(false){}"); // placeholder for (JClassType implementingType : implementingTypes) { if (implementingType.isAbstract()) { continue; } sourceWriter.println( "else if(commandName.equals(\"" + implementingType.getSimpleSourceName() + "\")){"); sourceWriter.indent(); sourceWriter.println( implementingType.getName() + " command = new " + implementingType.getName() + "();"); for (JMethod eventMethod : implementingType.getMethods()) { if (eventMethod.isPublic() && !eventMethod.isStatic() && eventMethod.isConstructor() == null && eventMethod.getName().startsWith("set")) { String propertyName = eventMethod.getName().substring(3); propertyName = propertyName.substring(0, 1).toLowerCase() + propertyName.substring(1); String simpleType = implementingType.getField(propertyName).getType().getSimpleSourceName(); if ("string".equalsIgnoreCase(simpleType)) { sourceWriter.println("command." + eventMethod.getName() + "(getParameterString(\"" + propertyName + "\", parameterMap));"); } else if ("integer".equalsIgnoreCase(simpleType)) { sourceWriter.println("command." + eventMethod.getName() + "(getParameterInteger(\"" + propertyName + "\", parameterMap));"); } else if ("float".equalsIgnoreCase(simpleType)) { sourceWriter.println("command." + eventMethod.getName() + "(getParameterFloat(\"" + propertyName + "\", parameterMap));"); } else if ("double".equalsIgnoreCase(simpleType)) { sourceWriter.println("command." + eventMethod.getName() + "(getParameterDouble(\"" + propertyName + "\", parameterMap));"); } else if ("long".equalsIgnoreCase(simpleType)) { sourceWriter.println("command." + eventMethod.getName() + "(getParameterLong(\"" + propertyName + "\", parameterMap));"); } else if ("short".equalsIgnoreCase(simpleType)) { sourceWriter.println("command." + eventMethod.getName() + "(getParameterShort(\"" + propertyName + "\", parameterMap));"); } else if ("boolean".equalsIgnoreCase(simpleType)) { sourceWriter.println("command." + eventMethod.getName() + "(getParameterBoolean(\"" + propertyName + "\", parameterMap));"); } } } sourceWriter.println("command.execute();"); sourceWriter.outdent(); sourceWriter.println("}"); } } catch (Exception e) { // record to logger that Map generation threw an exception logger.log(TreeLogger.ERROR, "Error generating BindingContext!!!", e); } sourceWriter.outdent(); sourceWriter.println("}"); }
From source file:org.pentaho.mantle.rebind.EventBusUtilGenerator.java
License:Open Source License
private void generateMethods(SourceWriter sourceWriter) { sourceWriter.println(//from www . j ava2 s . co m "public native void invokeEventBusJSO(final JavaScriptObject jso, final String parameterJSON)"); sourceWriter.println("/*-{"); sourceWriter.indent(); // unfortunately, we can obtain pairs like {"a":"undefined"} or even {"a":undefined} // the latter will crash the procedure, so let's try to clean up the string // by removing pairs with 'undefined' sourceWriter.println("var tmp = parameterJSON" // replace ("a":undefined) and ("a":"undefined") with empty space + ".replace(/\\\"[\\w]+\\\"\\:[ ]*(\\\")?undefined(\\\")?(,)?/g, '')" // remove doubled commas + ".replace(/,[ ]*,/, ',')" // remove leading and trailing commas + ".replace(/\\{[ ]*,/, '{')" + ".replace(/,[ ]*\\}/, '}');"); sourceWriter.println("var p = JSON.parse(tmp);"); sourceWriter.println("jso.call(this, p)"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println( "public native String getParameterString(final String paramName, final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println( "public native Integer getParameterInteger(final String paramName, final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println( "public native Boolean getParameterBoolean(final String paramName, final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println("public native Float getParameterFloat(final String paramName, " + "final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println( "public native Double getParameterDouble(final String paramName, final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println( "public native Long getParameterLong(final String paramName, final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); sourceWriter.println(); sourceWriter.println("public native Short getParameterShort(final String paramName, " + "final JavaScriptObject parameterMap)"); sourceWriter.println("/*-{"); sourceWriter.indent(); sourceWriter.println("return parameterMap[paramName];"); sourceWriter.outdent(); sourceWriter.println("}-*/;"); // ********************* // FIRE EVENT // ********************* sourceWriter.println(); sourceWriter .println("public void fireEvent(final String eventType, final JavaScriptObject parameterMap) { "); sourceWriter.indent(); try { // find Command implementors ArrayList<JClassType> implementingTypes = new ArrayList<JClassType>(); JPackage pack = typeOracle.getPackage(EventBusUtil.class.getPackage().getName()); JClassType eventSourceType = typeOracle.getType(GwtEvent.class.getName()); for (JClassType type : pack.getTypes()) { if (type.isAssignableTo(eventSourceType)) { implementingTypes.add(type); } } sourceWriter.println("if(false){}"); // placeholder for (JClassType implementingType : implementingTypes) { sourceWriter .println("else if(eventType.equals(\"" + implementingType.getSimpleSourceName() + "\")){"); sourceWriter.indent(); sourceWriter .println(implementingType.getName() + " event = new " + implementingType.getName() + "();"); for (JMethod eventMethod : implementingType.getMethods()) { if (eventMethod.isPublic() && !eventMethod.isStatic() && eventMethod.isConstructor() == null && eventMethod.getName().startsWith("set")) { String propertyName = eventMethod.getName().substring(3); propertyName = propertyName.substring(0, 1).toLowerCase() + propertyName.substring(1); String simpleType = implementingType.getField(propertyName).getType().getSimpleSourceName(); if ("string".equalsIgnoreCase(simpleType)) { sourceWriter.println("event." + eventMethod.getName() + "(getParameterString(\"" + propertyName + "\", parameterMap));"); } else if ("integer".equalsIgnoreCase(simpleType)) { sourceWriter.println("event." + eventMethod.getName() + "(getParameterInteger(\"" + propertyName + "\", parameterMap));"); } else if ("float".equalsIgnoreCase(simpleType)) { sourceWriter.println("event." + eventMethod.getName() + "(getParameterFloat(\"" + propertyName + "\", parameterMap));"); } else if ("double".equalsIgnoreCase(simpleType)) { sourceWriter.println("event." + eventMethod.getName() + "(getParameterDouble(\"" + propertyName + "\", parameterMap));"); } else if ("long".equalsIgnoreCase(simpleType)) { sourceWriter.println("event." + eventMethod.getName() + "(getParameterLong(\"" + propertyName + "\", parameterMap));"); } else if ("short".equalsIgnoreCase(simpleType)) { sourceWriter.println("event." + eventMethod.getName() + "(getParameterShort(\"" + propertyName + "\", parameterMap));"); } else if ("boolean".equalsIgnoreCase(simpleType)) { sourceWriter.println("event." + eventMethod.getName() + "(getParameterBoolean(\"" + propertyName + "\", parameterMap));"); } } } sourceWriter.println("EVENT_BUS.fireEvent(event);"); sourceWriter.outdent(); sourceWriter.println("}"); } } catch (Exception e) { // record to logger that Map generation threw an exception logger.log(TreeLogger.ERROR, "Error generating BindingContext!!!", e); } sourceWriter.outdent(); sourceWriter.println("}"); // ********************* // ADD HANDLER // ********************* sourceWriter.println(); sourceWriter.println( "public HandlerRegistration addHandler(final String eventType, final JavaScriptObject handler) { "); sourceWriter.indent(); try { // find Command implementors JPackage pack = typeOracle.getPackage(EventBusUtil.class.getPackage().getName()); JClassType eventSourceType = typeOracle.getType(GwtEvent.class.getName()); sourceWriter.println("if(false){return null;}"); // placeholder for (JClassType type : pack.getTypes()) { if (type.isAssignableTo(eventSourceType)) { addHandlerElseCondition(sourceWriter, type); } } } catch (Exception e) { // record to logger that Map generation threw an exception logger.log(TreeLogger.ERROR, "Error generating BindingContext!!!", e); } sourceWriter.indent(); sourceWriter.println("return null;"); sourceWriter.outdent(); sourceWriter.println("}"); }
From source file:org.pentaho.mantle.rebind.EventBusUtilGenerator.java
License:Open Source License
String addHandlerParamJson(JClassType type) { StringBuilder json = new StringBuilder(128); json.append('"').append('{'); JMethod[] methods = type.getMethods(); for (JMethod eventMethod : methods) { if (eventMethod.isPublic() && !eventMethod.isStatic() && (eventMethod.isConstructor() == null) && !"void".equalsIgnoreCase(eventMethod.getReturnType().getSimpleSourceName()) && !eventMethod.getName().equals("getAssociatedType")) { // let's add the property to JSON object String propertyName = StringUtils.uncapitalize(eventMethod.getName().substring(3)); String simpleType = type.getField(propertyName).getType().getSimpleSourceName(); if ("string".equalsIgnoreCase(simpleType)) { json.append(//from ww w .j av a 2s.co m "\\\"" + propertyName + "\\\":\\\"\" + event." + eventMethod.getName() + "() + \"\\\""); } else { json.append("\\\"" + propertyName + "\\\":\" + event." + eventMethod.getName() + "() + \""); } json.append(','); } } int lastIndex = json.lastIndexOf(","); if (lastIndex == -1) { json.append('}'); } else { json.setCharAt(lastIndex, '}'); } return json.append('"').toString(); }