[forge-dev] Generate Code with Forge

Lincoln Baxter, III lincolnbaxter at gmail.com
Sun Oct 23 12:01:01 EDT 2011


Hi Rafael!

What you want to do sounds really interesting! Have you taken a look at the
forge-scaffold-api? Its located as a sub-folder of the github repository
that you just cloned.

This will let you use the 'scaffold from-entity' command to invoke your
code, and it will also let people use the familiar api.  We can also make
some improvements to that api if you need it :)

--
Lincoln Baxter's Droid
http://ocpsoft.com
"Keep it Simple"
On Oct 23, 2011 10:03 AM, "Rafael Pestano" <rmpestano at gmail.com> wrote:

> I was meaning just clone it ;)
>
> Nice to hear about the scaffolding plugin.
>
> 2011/10/23 Paul Bakker <paul.bakker.nl at gmail.com>
>
>> Hi Rafael,
>>
>> What do you mean by clone and forge the project? On github you can just
>> clone the plugin-arquillian project and start hacking on it.
>> Formatting is a bit of a problem, that doesn't work very well now with the
>> builder API. Maybe Lincoln can say more about that?
>>
>> Note that within a few weeks Forge will have a new scaffolding plugin
>> built-in, that does basically something that you are doing in your plugin.
>>
>> Paul
>>
>> On Oct 23, 2011, at 3:45 PM, Rafael Pestano wrote:
>>
>> I've managed to clone forge repo with this address
>> https://github.com/forge/core.git now, i was using the old
>> github.com/seam/forge.git.
>>
>> 2011/10/23 Rafael Pestano <rmpestano at gmail.com>
>>>
>>>> Hello Paul, thanks for your enlightening reply.
>>>>
>>>> The plugin is about a code generator for a home made Java EE6 framework
>>>> and for instance it will generate very simple xhtml and java classes, so for
>>>> example the generate-controller plugin would generate
>>>>
>>>> *@ViewAccessScoped
>>>> @Named("personMBean")
>>>> public class PersonMBean extends AbstractBaseMBean<Person> implements
>>>> Serializable, ModalObserver {
>>>>
>>>>    @Inject
>>>>     public void setPersonService(PersonService personService) {*//service
>>>> layer will be generated togheter*
>>>>         super.setBaseService(personService);
>>>>     }
>>>>
>>>> some other very simple methods
>>>> }*
>>>>
>>>> for the controller-plugin maybe i dont need to understand the model
>>>> class (just to import it) cause its just a matter of replacing parammeters
>>>> by the domain object but in the view-plugin it will be necessary for sure.
>>>>
>>>> Another concern i have is how to format the generated code? maybe the
>>>> velocity template could help on that.
>>>>
>>>> Ive seen the Arquillian example, how can i clone it and forge project?
>>>>
>>>> Thanks again!
>>>>
>>>>
>>>>
>>>>
>>>> 2011/10/23 Paul Bakker <paul.bakker.nl at gmail.com>
>>>>
>>>>> Hi Rafael,
>>>>>
>>>>> There are two things you need to do:
>>>>> 1) "understand" the Person class
>>>>> 2) generate new code
>>>>>
>>>>>
>>>>>  1)
>>>>> You can use a command parameter to get the Person class: @Option(name =
>>>>> "class", required = true, type = PromptType.JAVA_CLASS) JavaResource
>>>>> classUnderTest
>>>>>
>>>>> JavaResource is a rich file representation of the class.
>>>>> Now you can use the JavaSourceFacet to get information about the class
>>>>> itself:
>>>>>
>>>>> JavaSourceFacet java = project.getFacet(JavaSourceFacet.class);
>>>>> JavaSource<?> javaSource = classUnderTest.getJavaSource();
>>>>>
>>>>> javaSource has methods such as getPackage() etc.
>>>>>
>>>>> 2)
>>>>> Now you have to generate code. There are two ways to do this, depending
>>>>> on your needs.
>>>>> The most elegant way is to use the "JavaParser" builder API:
>>>>>
>>>>> JavaClass javaClass = JavaParser.create(JavaClass.class)
>>>>>                .setPackage(entityPackage)
>>>>>                .setName(entityName)
>>>>>                .setPublic()
>>>>>                .addAnnotation(Entity.class).getOrigin()
>>>>>                .addInterface(Serializable.class);
>>>>> Field<JavaClass> id = javaClass.addField("private Long id = null;");
>>>>> ….
>>>>>
>>>>> My experience is that this works best for small classes. If you need to
>>>>> generate a lot of code it might be better to use a tempting framework such
>>>>> as Apache Velocity.
>>>>> You can find an example of this in the code of the Arquillian plugin:
>>>>> https://github.com/forge/plugin-arquillian/blob/master/src/main/java/org/jboss/seam/forge/arquillian/ArquillianPlugin.java#L93
>>>>>
>>>>> You can just add Velocity to your pom file and it will work.
>>>>>
>>>>> If you have any more questions, let us know! What kind of plugin are
>>>>> you writing?
>>>>>
>>>>> Paul Bakker
>>>>>
>>>>>
>>>>> On Oct 23, 2011, at 2:26 AM, Rafael Pestano wrote:
>>>>>
>>>>> Hi everyone,
>>>>>
>>>>> this is my first mail to this list and id like to congratulate the
>>>>> Forge team for their work.
>>>>>
>>>>> my question is, what's the best way to generate .java, .xhtml files
>>>>> with forge?
>>>>>
>>>>> Id like to write a plugin which would receive an entity class as
>>>>> parameter and generate some code on top of it, eg:
>>>>>
>>>>> $ generate-service Person
>>>>> $ generate-controller Person
>>>>> $ generate-view Person
>>>>>
>>>>>
>>>>> Where Person is a domain object, is it possible with Forge? if yes,
>>>>> whats the best way?
>>>>>
>>>>>
>>>>> thanks in advance.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> <http://www.advancedit.com.br/>Att,
>>>>>
>>>>> Rafael M. Pestano
>>>>>
>>>>> Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul
>>>>> Graduando em Ciência da Computação UFRGS
>>>>> _______________________________________________
>>>>> forge-dev mailing list
>>>>> forge-dev at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/forge-dev
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> <http://www.advancedit.com.br/>Att,
>>>>
>>>> Rafael M. Pestano
>>>>
>>>> Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul
>>>> Graduando em Ciência da Computação UFRGS
>>>>
>>>
>>>
>>>
>>> --
>>> <http://www.advancedit.com.br/>Att,
>>>
>>> Rafael M. Pestano
>>>
>>> Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul
>>> Graduando em Ciência da Computação UFRGS
>>>
>>
>>
>>
>>
>> --
>> <http://www.advancedit.com.br/>Att,
>>
>> Rafael M. Pestano
>>
>> Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul
>> Graduando em Ciência da Computação UFRGS
>> _______________________________________________
>> forge-dev mailing list
>> forge-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/forge-dev
>>
>>
>>
>
>
> --
> <http://www.advancedit.com.br/>Att,
>
> Rafael M. Pestano
>
> Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul
> Graduando em Ciência da Computação UFRGS
>
> _______________________________________________
> forge-dev mailing list
> forge-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/forge-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/forge-dev/attachments/20111023/008c2d33/attachment.html 


More information about the forge-dev mailing list