You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by "Jablow, Eric R" <Er...@ManTech.com> on 2011/12/09 21:15:08 UTC

Qeustions about SortedSet and ListMultipleChoice (with and without Metagen)

In my project, for business reasons, we have classes with SortedSet members. The classes and their elements are all Serializable.  I'm having trouble working with a SortedSet<MantechControl> object; when I try creating a ListMultipleChoice<MantechControl> object for it (and putting it into a FormComponentPanel<SortedSet<MantechControl>>), I get all sorts of compilation problems.  The MantechControlPanel has constructor:

   public MantechControlPanel(String id,
            IModel<SortedSet<MantechControl>> model) {
        super(id, model);
        control = new ListMultipleChoice<MantechControl>(
                "choices", new SetModel<NonICDisseminationControl>(choices),
                choiceList, new ChoiceRenderer<MantechControl>(
                        "banner"));
        add(control);
        onModelChanged();
    }

The onModelChanged() method has (after I extracted some local objects in a futile attempt to fix things):

    @Override
    protected void onModelChanged() {
        super.onModelChanged();
        if (getModelObject()!= null) {
           control.setModel(getModel());
        }

The problem is that the control.setModel() expects a Model of a Collection, while getModel() returns a  Model of a SortedSet:

    The method setModel(IModel<Collection< MantechControl >>) in the type FormComponent<Collection< MantechControl >> is not applicable for the arguments (IModel<SortedSet< MantechControl >>). I have good business reasons to use a sorted set, and what I think are good reasons to use a FormComponentPanel and a ListMultipleChoice. But should I do something different?

Meanwhile, I've created a wicket/metagen quickstart project and am running into a similar problem  there.  I can upload the project somewhere if you want more info.  Here I wrote a class ColorfulPerson that has a String name and a SortedSet<Color> colors.  In trying to write a FormComponentPanel for this, I have an obvious error at the indicated line:

public class ColorfulPersonPanel extends FormComponentPanel<ColorfulPerson> {
private static final long serialVersionUID = -457616015428125432L;
private final FormComponent<String> name;
private final FormComponent<Collection<Color>> colors;
private List<Color> colorChoices = Arrays.asList(Color.values());
public ColorfulPersonPanel(String id, IModel<ColorfulPerson> model) {
                super(id, model);
                name = new TextField<String>("name", new Model<String>());
                add(name);
                colors = new ListMultipleChoice<Color>("colors", new SetModel<Color>(), colorChoices);
                add(colors);
                onModelChanged();
}
@Override
protected void onModelChanged() {
                super.onModelChanged();
                ColorfulPerson colorfulPerson = getModelObject();
                if (colorfulPerson != null) {
                                name.setModel(MetaModel.of(colorfulPerson).get(ColorfulPersonMeta.name));
                                colors.setModel(MetaModel.of(colorfulPerson).get(ColorfulPersonMeta.colors));
                                // Error as the model is one of SortedSet<Color> while the ListMultipleChioice expects a model of Collection<Color>.

                } else {
                                name.setModelObject(null);
                                colors.setModelObject(null);
                }
}

Could there be a MetaModel.as(Class<?> castingClass) method?

Respectfully,
Eric Jablow

This communication, along with any attachments, is covered by federal and state law governing electronic communications and may contain company proprietary and legally privileged information.  If the reader of this message is not the intended recipient, you are hereby notified that any dissemination, distribution, use or copying of this message is strictly prohibited.  If you have received this in error, please reply immediately to the sender and delete this message.  Thank you.

Re: Qeustions about SortedSet and ListMultipleChoice (with and without Metagen)

Posted by Igor Vaynberg <ig...@gmail.com>.
quickstart attached to a jira ticket will help

-igor

On Fri, Dec 9, 2011 at 12:15 PM, Jablow, Eric R <Er...@mantech.com> wrote:
> In my project, for business reasons, we have classes with SortedSet members. The classes and their elements are all Serializable.  I'm having trouble working with a SortedSet<MantechControl> object; when I try creating a ListMultipleChoice<MantechControl> object for it (and putting it into a FormComponentPanel<SortedSet<MantechControl>>), I get all sorts of compilation problems.  The MantechControlPanel has constructor:
>
>   public MantechControlPanel(String id,
>            IModel<SortedSet<MantechControl>> model) {
>        super(id, model);
>        control = new ListMultipleChoice<MantechControl>(
>                "choices", new SetModel<NonICDisseminationControl>(choices),
>                choiceList, new ChoiceRenderer<MantechControl>(
>                        "banner"));
>        add(control);
>        onModelChanged();
>    }
>
> The onModelChanged() method has (after I extracted some local objects in a futile attempt to fix things):
>
>    @Override
>    protected void onModelChanged() {
>        super.onModelChanged();
>        if (getModelObject()!= null) {
>           control.setModel(getModel());
>        }
>
> The problem is that the control.setModel() expects a Model of a Collection, while getModel() returns a  Model of a SortedSet:
>
>    The method setModel(IModel<Collection< MantechControl >>) in the type FormComponent<Collection< MantechControl >> is not applicable for the arguments (IModel<SortedSet< MantechControl >>). I have good business reasons to use a sorted set, and what I think are good reasons to use a FormComponentPanel and a ListMultipleChoice. But should I do something different?
>
> Meanwhile, I've created a wicket/metagen quickstart project and am running into a similar problem  there.  I can upload the project somewhere if you want more info.  Here I wrote a class ColorfulPerson that has a String name and a SortedSet<Color> colors.  In trying to write a FormComponentPanel for this, I have an obvious error at the indicated line:
>
> public class ColorfulPersonPanel extends FormComponentPanel<ColorfulPerson> {
> private static final long serialVersionUID = -457616015428125432L;
> private final FormComponent<String> name;
> private final FormComponent<Collection<Color>> colors;
> private List<Color> colorChoices = Arrays.asList(Color.values());
> public ColorfulPersonPanel(String id, IModel<ColorfulPerson> model) {
>                super(id, model);
>                name = new TextField<String>("name", new Model<String>());
>                add(name);
>                colors = new ListMultipleChoice<Color>("colors", new SetModel<Color>(), colorChoices);
>                add(colors);
>                onModelChanged();
> }
> @Override
> protected void onModelChanged() {
>                super.onModelChanged();
>                ColorfulPerson colorfulPerson = getModelObject();
>                if (colorfulPerson != null) {
>                                name.setModel(MetaModel.of(colorfulPerson).get(ColorfulPersonMeta.name));
>                                colors.setModel(MetaModel.of(colorfulPerson).get(ColorfulPersonMeta.colors));
>                                // Error as the model is one of SortedSet<Color> while the ListMultipleChioice expects a model of Collection<Color>.
>
>                } else {
>                                name.setModelObject(null);
>                                colors.setModelObject(null);
>                }
> }
>
> Could there be a MetaModel.as(Class<?> castingClass) method?
>
> Respectfully,
> Eric Jablow
>
> This communication, along with any attachments, is covered by federal and state law governing electronic communications and may contain company proprietary and legally privileged information.  If the reader of this message is not the intended recipient, you are hereby notified that any dissemination, distribution, use or copying of this message is strictly prohibited.  If you have received this in error, please reply immediately to the sender and delete this message.  Thank you.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org