Hi Thomas,

Sorry for the late response. I have been on Vacation.

Actually I think that perhaps the best solution is actuallly just to expose MVEL as a dependency to plugins that request it. This would be the simplest solution IMO, and would only request code-changes in the Forge plugin installer:

https://github.com/forge/core/blob/master/shell/src/main/java/org/jboss/forge/shell/plugins/builtin/ForgePlugin.java#L617

Just like this.

What do you think?
~Lincoln

On Fri, Feb 17, 2012 at 2:08 PM, Thomas Frühbeck <fruehbeck@aon.at> wrote:
Am 15.02.2012 16:03, schrieb Lincoln Baxter, III:
> I just had a thought. Are you sure that you really need the MVEL
> library? Is it possible that you are directly referencing MVEL classes
> when you should instead be referencing Seam Render classes?
>
> "TemplateCompiler" comes to mind.
Lincoln you were right, the issue is in fact related to TemplateCompiler
but not directly.
I think I understand the problem now in detail and want to propose a
solution. As my code was just taken from the FacesScaffold I did not
further think about using it.
As it turns out my plugin is not "as privileged?" as the FacesScaffold,
so the problem became visible with my implementation.

Situation: the FacesScaffold wants to calculate the textual indentation
for the metawidgets that will be rendered inside of a template.
To access the _compiled_ template, which seams to show the real
indentation level, the following code was executed:

    private org.jboss.seam.render.template.CompiledTemplateResource
createTemplate;
    ...
         String template =
String.valueOf(this.createTemplate.getCompiledTemplate().getTemplate());


Now there is the hidden access to the MVEL libraries, because
CompiledTemplateResource.getTemplate() will return a native
org.mvel2.templates.CompiledTemplate.
This is _very_ unfortunate, because there seems to be no easy way to
e.g. override getTemplate() because it is already in the seam.render libs.
On the other side it is quite important to provide consistent
indentation for the generated sources - it simply looks ugly and unprof
if code goes zigzag.

My proposed solution is to provide a TemplateConverter in the
scaffold.faces plugin. There the visibility of MVEL is provided and so
does not conflict with forge's libs.
On the other hand the FacesScaffold classes are visible to the other
plugins.

package org.jboss.forge.scaffold.faces;

@Dependent
public class TemplateConverter {

    public String convert(CompiledTemplateResource resource) {
        return new String(resource.getCompiledTemplate().getTemplate());
    }
}

So now I can convert the compiled templates by :
   @Inject
   private TemplateConverter templateConverter;
...
   String template = templateConverter.convert(this.backingBeanTemplate);

I would be very glad to provide the pull.request for this class.
Any recommendations for the solution or the destination package for the
converter?

Thomas
_______________________________________________
forge-dev mailing list
forge-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/forge-dev



--
Lincoln Baxter, III
http://ocpsoft.com
http://scrumshark.com
"Keep it Simple"