Hi Sumit here are the generator rule and the generator class:
rule:
<generate-with
class="br.com.gwt.symbiosis.rebind.generator.BoundModelGenerator">
<when-type-assignable
class="br.com.gwt.symbiosis.client.bind.BindingModel" />
</generate-with>
<generate-with
class="br.com.gwt.symbiosis.rebind.generator.BoundViewGenerator">
<when-type-assignable
class="br.com.gwt.symbiosis.client.bind.BindingView" />
</generate-with>
View generator class:
public class BoundViewGenerator extends Generator {
private static final String MODEL_INTERFACE =
"br.com.gwt.symbiosis.client.bind.BindingModel";
private static final String SOURCES_PROPERTY_CHANGES =
"br.com.gwt.symbiosis.client.event.SourcesPropertyChanges";
public String generate(TreeLogger logger, GeneratorContext context,
String typeName) throws UnableToCompleteException {
TypeOracle oracle = context.getTypeOracle();
JClassType type = oracle.findType(typeName);
JClassType modelType = oracle.findType(MODEL_INTERFACE);
BoundModelClass modelClass = new BoundModelClass(type);
modelClass.setModelType(modelType);
BindTypeManager bindManager = BindTypeManager.getInstance();
for(JField field : type.getFields()){
JClassType fieldClass =
field.getType().isClassOrInterface();
for(String className : bindManager.getAvailableTypes()){
JClassType bindClass =
oracle.findType(className);
if(fieldClass.isAssignableTo(bindClass)){
for(ListenerTemplate template :
bindManager.getTemplatesForType
(className)){
modelClass.associateFieldListener(field, template);
}
}
}
}
String packageName = modelClass.getPackageName();
String newLine = System.getProperty("line.separator");
String finalViewClassName = "Bound_"+modelClass.getClassName()
+"_View";
PrintWriter printer = context.tryCreate(logger, packageName,
finalViewClassName);
if (printer == null){
System.out.println("printer == null");
return null;
}
ClassSourceFileComposerFactory composer = null;
composer = new ClassSourceFileComposerFactory(packageName,
finalViewClassName);
composer.setSuperclass(type.getSimpleSourceName());
composer.addImport(SOURCES_PROPERTY_CHANGES);
SourceWriter sourceWriter = composer.createSourceWriter(context,
printer);
Bound_ViewTemplate template =
Bound_ViewTemplate.create(newLine);
System.out.println(template.generate(modelClass));
sourceWriter.println(template.generate(modelClass));
context.commit(logger, printer);
return packageName + "." + finalViewClassName;
}
}
Model generator class:
public class BoundModelGenerator extends Generator {
private static final String SOURCES_PROPERTY_CHANGES =
"br.com.gwt.symbiosis.client.event.SourcesPropertyChanges";
private static final String PROPERTY_CHANGE_SUPPORT =
"br.com.gwt.symbiosis.client.event.PropertyChangeSupport";
private static final String PROPERTY_CHANGE_LISTENER =
"br.com.gwt.symbiosis.client.event.PropertyChangeListener";
private static final String BOUND_PREFIX = "Bound_";
public String generate(TreeLogger logger, GeneratorContext context,
String typeName) throws UnableToCompleteException {
TypeOracle oracle = context.getTypeOracle();
JClassType type = oracle.findType(typeName);
BoundModelClass modelClass = new BoundModelClass(type);
String generatedClass = new Bound_ModelTemplate().generate
(modelClass);
System.out.println(generatedClass);
String packageName = modelClass.getPackageName();
String generatedClassName =
BOUND_PREFIX+modelClass.getClassName();
PrintWriter printer = context.tryCreate(logger, packageName,
generatedClassName);
if (printer == null){
return null;
}
ClassSourceFileComposerFactory composer = null;
composer = new ClassSourceFileComposerFactory(packageName,
generatedClassName);
composer.setSuperclass(type.getSimpleSourceName());
composer.addImplementedInterface(SOURCES_PROPERTY_CHANGES);
composer.addImport(PROPERTY_CHANGE_LISTENER);
composer.addImport(PROPERTY_CHANGE_SUPPORT);
composer.addImport(SOURCES_PROPERTY_CHANGES);
SourceWriter sourceWriter = composer.createSourceWriter
(context, printer);
sourceWriter.println(generatedClass);
context.commit(logger, printer);
return packageName + "." + generatedClassName;
}
}
I'll put the code at the project's site: http://code.google.com/p/glue4gwt
The strange thing is that when the compile button is pressed... the
generator is called... but the code generated isn't used...
anyway thanks for the help :)
On Mar 24, 12:23 pm, Sumit Chandel <[email protected]> wrote:
> Hi Marcelo,
> It might help to post up the generator rule and especially the generate()
> implementation that is being used to generate the FormView generated type.
> My thought is that whatever is going on in there is depending on rules that
> might not hold true in web mode.
>
> Cheers,
> -Sumit Chandel
>
> On Thu, Mar 19, 2009 at 2:46 PM, Marcelo Emanoel B. Diniz <
>
> [email protected]> wrote:
>
> > this is my entry point
>
> > package br.com.gwt.symbiosis.client;
>
> > import br.com.gwt.symbiosis.client.mock.FormView;
>
> > import com.google.gwt.core.client.EntryPoint;
> > import com.google.gwt.core.client.GWT;
> > import com.google.gwt.user.client.ui.Label;
> > import com.google.gwt.user.client.ui.RootPanel;
>
> > public class Symbiosis implements EntryPoint {
>
> > public void onModuleLoad() {
> > FormView binded = GWT.create(FormView.class);
> > Label label = new Label();
> > label.setText(binded.getClass().getName());
> > RootPanel.get().add(binded);
> > RootPanel.get().add(label);
> > }
> > }
>
> > on hosted mode the label text is
> > "br.com.gwt.symbiosis.client.mock.Bound_FormView_View" wich is in fact
> > what is expected to be...
> > but at web mode the label text is
> > ''br.com.gwt.symbiosis.client.mock.FormView" which in turn is not what
> > I need... and doesn't work as expected either... :(
>
> > by the way... there's no complain on the console....
>
> > On Mar 19, 3:53 pm, Marcelo Emanoel <[email protected]> wrote:
> > > Hi guys I have a problem with generators... I've manage to do 2
> > > generators and they work fine on hosted mode.... however they don't
> > > work when I compile code to web mode :( What I'm trying to acomplish
> > > is to build an API for binding... An important thing is that my
> > > generators work on hosted mode and they are called when the code start
> > > is compiled....
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---