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.

Reply via email to