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 void addHandler(final String eventType, final JavaScriptObject handler) { " );
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 );
}
}