Aw: Re: Problems with a custom component when migrating from Glassfish(mojarra) to TomEE

2014-02-13 Thread Rene Perschon
I don't think a TagHandler or a custom component can do what that code does. 
It's used to display a Select in a very specific way.
 
 

Gesendet: Donnerstag, 13. Februar 2014 um 14:29 Uhr
Von: "Karl Kildén" 
An: "MyFaces Discussion" 
Betreff: Re: Problems with a custom component when migrating from 
Glassfish(mojarra) to TomEE
Have you considered a custom tagHandler / composite component instead?

I took a quick look but I don't recognize much sorry.


On 13 February 2014 14:09, Howard W. Smith, Jr. wrote:

> I think Leonardo, Gerhard, or one of the other committers may provide her
> some good help, just to get another MyFaces user, especially when one is
> migrating from Mojarra to MyFaces.
>
> @Renee, +1 your goal/request.
>
> I migrated from Mojarra to MyFaces, first, and then 2 months later, I
> migrated from Glassfish to tomee (and JSF managed beans to CDI managed
> beans at same time). Thomas, Romain, Mark Struberg, and others provided
> great help and motivation. Apache tomee, MyFaces, tomcat user mail lists
> are definitely the place to be.
>
> But I didn't have code dependent on the Mojarra library like you do. Still,
> it took me about a week to migrate from Mojarra to MyFaces. Thomas and
> Leonardo motivated me to start the migration after reading about the
> performance comparison between Mojarra and MyFaces. Mark Struberg blog, why
> is OpenWebBeans so fast, motivated me to migrate to CDI and tomee. :-)
>
> I love high performance, that's why I opted to use MyFaces, tomee,
> OpenWebBeans, and JUEL.
>
> Wishing you much success.
> On Feb 13, 2014 7:23 AM, "Thomas Andraschko" 
> wrote:
>
> > I don't think that anyone will port your complete code and give you a
> > complete solution ;)
> >
> > The biggest problem is AFAIR that the renderer implementations are not in
> > the API packages. So you have to rebuild all this functionality without
> > dependencies to the Impl.
> >
> > e.g.
> > Attribute,AttributeManager -> String[] with attribute namens
> > Move all the utils functions to your own code (Util.componentIsDisabled,
> > RenderKitUtils.getSelectItems. etc.)
> >
> > The most code doesn't really depent on the IMPL code.
> >
> >
> > 2014-02-13 12:44 GMT+01:00 Rene Perschon :
> >
> > > Hi everyone!
> > >
> > > I'm currently migrating an application from Glassfish 3.1.1 to TomEE.
> Now
> > > the problem is that this application contains a custom component which
> > was
> > > unfortunately coded with hard dependencies on com.sun.faces classes
> > (maven
> > > dependency jsf-impl).
> > >
> > > Now my question is how can i port this component in such a way that it
> is
> > > independent from any concrete JSF implementation (or at least in such a
> > way
> > > that it works with MyFaces).
> > >
> > > Here's the component:
> > >
> > > import java.io.IOException;
> > > import java.util.Iterator;
> > > import java.util.Map;
> > >
> > > import javax.faces.component.UIComponent;
> > > import javax.faces.component.UINamingContainer;
> > > import javax.faces.component.ValueHolder;
> > > import javax.faces.context.FacesContext;
> > > import javax.faces.context.ResponseWriter;
> > > import javax.faces.convert.Converter;
> > > import javax.faces.model.SelectItem;
> > > import javax.faces.model.SelectItemGroup;
> > >
> > > import com.sun.faces.renderkit.Attribute;
> > > import com.sun.faces.renderkit.AttributeManager;
> > > import com.sun.faces.renderkit.RenderKitUtils;
> > > import com.sun.faces.renderkit.html_basic.MenuRenderer;
> > > import com.sun.faces.util.RequestStateManager;
> > > import com.sun.faces.util.Util;
> > >
> > > /**
> > > * {@inheritDoc}.
> > > */
> > > public class CustomSelectManyCheckboxListRenderer extends MenuRenderer
> > > {
> > > /** {@inheritDoc}. */
> > > private static final Attribute[] ATTRIBUTES =
> > >
> AttributeManager.getAttributes(AttributeManager.Key.SELECTMANYCHECKBOX);
> > > /** Representing the border string. */
> > > private static final String BORDER = "border";
> > > /** Representing the tr string. */
> > > private static final String TR = "tr";
> > > /** Representing the td string. */
> > > private static final String TD = "td";
> > > /** Representing the label string. */
> > > private static final String LABEL = "label";
> > > /** Representing the newline string. */
> > > private static final String NEWLINE = "\n";
> > > /** Representing the tab string. */
> > > private static final String TAB = "\t";
> > > /** Representing the class string. */
> > > private static final String CLASS = "class";
> > > /** Representing the style string. */
> > > private static final String STYLE = "style";
> > > /** Representing the valign string. */
> > > private static final String VALIGN = "valign";
> > >
> > >
> > > // --
> Public
> > > Methods
> > >
> > >
> > > @Override
> > > public void encodeEnd(FacesContext context, UIComponent component)
> > > throws IOException
> > > {
> > >
> > > rendererParamsNotNull(context, compon

Aw: Re: Problems with a custom component when migrating from Glassfish(mojarra) to TomEE

2014-02-13 Thread Rene Perschon
Agreed, i really don't want to deploy Mojarra to TomEE. Problem is I don't know 
how to port the Mojarra dependent code to MyFaces. It starts with me not 
knowing which MyFaces maven dependencies i need to import to "replace" the old 
imports..
 
 

Gesendet: Donnerstag, 13. Februar 2014 um 13:25 Uhr
Von: "Romain Manni-Bucau" 
An: "MyFaces Discussion" 
Betreff: Re: Problems with a custom component when migrating from 
Glassfish(mojarra) to TomEE
in tomee you can also use mojarra but I'd just keep my component
portable with myfaces if possible
Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: 
http://fr.linkedin.com/in/rmannibucau[http://fr.linkedin.com/in/rmannibucau]
Github: https://github.com/rmannibucau[https://github.com/rmannibucau]



2014-02-13 13:23 GMT+01:00 Thomas Andraschko :
> I don't think that anyone will port your complete code and give you a
> complete solution ;)
>
> The biggest problem is AFAIR that the renderer implementations are not in
> the API packages. So you have to rebuild all this functionality without
> dependencies to the Impl.
>
> e.g.
> Attribute,AttributeManager -> String[] with attribute namens
> Move all the utils functions to your own code (Util.componentIsDisabled,
> RenderKitUtils.getSelectItems. etc.)
>
> The most code doesn't really depent on the IMPL code.
>
>
> 2014-02-13 12:44 GMT+01:00 Rene Perschon :
>
>> Hi everyone!
>>
>> I'm currently migrating an application from Glassfish 3.1.1 to TomEE. Now
>> the problem is that this application contains a custom component which was
>> unfortunately coded with hard dependencies on com.sun.faces classes (maven
>> dependency jsf-impl).
>>
>> Now my question is how can i port this component in such a way that it is
>> independent from any concrete JSF implementation (or at least in such a way
>> that it works with MyFaces).
>>
>> Here's the component:
>>
>> import java.io.IOException;
>> import java.util.Iterator;
>> import java.util.Map;
>>
>> import javax.faces.component.UIComponent;
>> import javax.faces.component.UINamingContainer;
>> import javax.faces.component.ValueHolder;
>> import javax.faces.context.FacesContext;
>> import javax.faces.context.ResponseWriter;
>> import javax.faces.convert.Converter;
>> import javax.faces.model.SelectItem;
>> import javax.faces.model.SelectItemGroup;
>>
>> import com.sun.faces.renderkit.Attribute;
>> import com.sun.faces.renderkit.AttributeManager;
>> import com.sun.faces.renderkit.RenderKitUtils;
>> import com.sun.faces.renderkit.html_basic.MenuRenderer;
>> import com.sun.faces.util.RequestStateManager;
>> import com.sun.faces.util.Util;
>>
>> /**
>> * {@inheritDoc}.
>> */
>> public class CustomSelectManyCheckboxListRenderer extends MenuRenderer
>> {
>> /** {@inheritDoc}. */
>> private static final Attribute[] ATTRIBUTES =
>> AttributeManager.getAttributes(AttributeManager.Key.SELECTMANYCHECKBOX);
>> /** Representing the border string. */
>> private static final String BORDER = "border";
>> /** Representing the tr string. */
>> private static final String TR = "tr";
>> /** Representing the td string. */
>> private static final String TD = "td";
>> /** Representing the label string. */
>> private static final String LABEL = "label";
>> /** Representing the newline string. */
>> private static final String NEWLINE = "\n";
>> /** Representing the tab string. */
>> private static final String TAB = "\t";
>> /** Representing the class string. */
>> private static final String CLASS = "class";
>> /** Representing the style string. */
>> private static final String STYLE = "style";
>> /** Representing the valign string. */
>> private static final String VALIGN = "valign";
>>
>>
>> // -- Public
>> Methods
>>
>>
>> @Override
>> public void encodeEnd(FacesContext context, UIComponent component)
>> throws IOException
>> {
>>
>> rendererParamsNotNull(context, component);
>>
>> if (!shouldEncode(component))
>> {
>> return;
>> }
>>
>> ResponseWriter writer = context.getResponseWriter();
>> assert (writer != null);
>>
>> String alignStr;
>> Object borderObj;
>> boolean alignVertical = false;
>> int border = 0;
>>
>>
>>
>> if (null != component.getAttributes().get("layout"))
>> {
>> alignStr = (String) component.getAttributes().get("layout");
>> alignVertical = alignStr.equalsIgnoreCase("pageDirection");
>> }
>>
>> if (null != component.getAttributes().get(BORDER))
>> {
>> borderObj = component.getAttributes().get(BORDER);
>> border = (Integer) borderObj;
>> }
>>
>> Converter converter = null;
>> if (component instanceof ValueHolder)
>> {
>> converter = ((ValueHolder)component).getConverter();
>> }
>>
>> renderBeginText(component, border, alignVertical, context, true);
>>
>> Iterator items =
>> RenderKitUtils.getSelectItems(context, component);
>>
>> Object currentSelections = getCurrentSelectedValues(component);
>> Object[] submittedValues = getSubmittedSelectedValues(component);
>> Map attributes = com

Aw: Re: Problems with a custom component when migrating from Glassfish(mojarra) to TomEE

2014-02-13 Thread Rene Perschon
I didn't expect anyone to rewrite that code, i just wanted to present the whole 
problem :-)
As i said, i'd accept a MyFaces port too, it's just that my shots at a solution 
were unsuccessful. For example I tried to extend from Tobago's MenuRenderer 
instead of Mojarra's, but it said that MenuRenderer in Tobago is final, 
although I'm not sure that that's the correct approach in the first place.
 
 

Gesendet: Donnerstag, 13. Februar 2014 um 13:23 Uhr
Von: "Thomas Andraschko" 
An: "MyFaces Discussion" 
Betreff: Re: Problems with a custom component when migrating from 
Glassfish(mojarra) to TomEE
I don't think that anyone will port your complete code and give you a
complete solution ;)

The biggest problem is AFAIR that the renderer implementations are not in
the API packages. So you have to rebuild all this functionality without
dependencies to the Impl.

e.g.
Attribute,AttributeManager -> String[] with attribute namens
Move all the utils functions to your own code (Util.componentIsDisabled,
RenderKitUtils.getSelectItems. etc.)

The most code doesn't really depent on the IMPL code.


2014-02-13 12:44 GMT+01:00 Rene Perschon :

> Hi everyone!
>
> I'm currently migrating an application from Glassfish 3.1.1 to TomEE. Now
> the problem is that this application contains a custom component which was
> unfortunately coded with hard dependencies on com.sun.faces classes (maven
> dependency jsf-impl).
>
> Now my question is how can i port this component in such a way that it is
> independent from any concrete JSF implementation (or at least in such a way
> that it works with MyFaces).
>
> Here's the component:
>
> import java.io.IOException;
> import java.util.Iterator;
> import java.util.Map;
>
> import javax.faces.component.UIComponent;
> import javax.faces.component.UINamingContainer;
> import javax.faces.component.ValueHolder;
> import javax.faces.context.FacesContext;
> import javax.faces.context.ResponseWriter;
> import javax.faces.convert.Converter;
> import javax.faces.model.SelectItem;
> import javax.faces.model.SelectItemGroup;
>
> import com.sun.faces.renderkit.Attribute;
> import com.sun.faces.renderkit.AttributeManager;
> import com.sun.faces.renderkit.RenderKitUtils;
> import com.sun.faces.renderkit.html_basic.MenuRenderer;
> import com.sun.faces.util.RequestStateManager;
> import com.sun.faces.util.Util;
>
> /**
> * {@inheritDoc}.
> */
> public class CustomSelectManyCheckboxListRenderer extends MenuRenderer
> {
> /** {@inheritDoc}. */
> private static final Attribute[] ATTRIBUTES =
> AttributeManager.getAttributes(AttributeManager.Key.SELECTMANYCHECKBOX);
> /** Representing the border string. */
> private static final String BORDER = "border";
> /** Representing the tr string. */
> private static final String TR = "tr";
> /** Representing the td string. */
> private static final String TD = "td";
> /** Representing the label string. */
> private static final String LABEL = "label";
> /** Representing the newline string. */
> private static final String NEWLINE = "\n";
> /** Representing the tab string. */
> private static final String TAB = "\t";
> /** Representing the class string. */
> private static final String CLASS = "class";
> /** Representing the style string. */
> private static final String STYLE = "style";
> /** Representing the valign string. */
> private static final String VALIGN = "valign";
>
>
> // -- Public
> Methods
>
>
> @Override
> public void encodeEnd(FacesContext context, UIComponent component)
> throws IOException
> {
>
> rendererParamsNotNull(context, component);
>
> if (!shouldEncode(component))
> {
> return;
> }
>
> ResponseWriter writer = context.getResponseWriter();
> assert (writer != null);
>
> String alignStr;
> Object borderObj;
> boolean alignVertical = false;
> int border = 0;
>
>
>
> if (null != component.getAttributes().get("layout"))
> {
> alignStr = (String) component.getAttributes().get("layout");
> alignVertical = alignStr.equalsIgnoreCase("pageDirection");
> }
>
> if (null != component.getAttributes().get(BORDER))
> {
> borderObj = component.getAttributes().get(BORDER);
> border = (Integer) borderObj;
> }
>
> Converter converter = null;
> if (component instanceof ValueHolder)
> {
> converter = ((ValueHolder)component).getConverter();
> }
>
> renderBeginText(component, border, alignVertical, context, true);
>
> Iterator items =
> RenderKitUtils.getSelectItems(context, component);
>
> Object currentSelections = getCurrentSelectedValues(component);
> Object[] submittedValues = getSubmittedSelectedValues(component);
> Map attributes = component.getAttributes();
> OptionComponentInfo optionInfo =
> new OptionComponentInfo((String)
> attributes.get("disabledClass"),
> (String)
> attributes.get("enabledClass"),
> (String)
> attributes.get("unselectedClass"),
> (String)
> attributes.get("selectedClass"),
> Util.componentIsDisabled(component),
> isHideNoSelection(component));
> int idx = -1;
> while (items.hasNex