so fix it :)

-igor


On 4/7/07, Johan Compagner <[EMAIL PROTECTED]> wrote:

AbstractPropertyModel:


public AbstractPropertyModel(final Object modelObject)
{
        if (modelObject == null)
        {
            throw new IllegalArgumentException("Parameter modelObject
cannot
be null");
        }

        this.target = modelObject;
}

protected Object getTarget()
{
        if (target instanceof IModel)
        {
            return ((IModel)target).getObject();
        }
        return target;
}

and get/setObject are just always returning or setting the same thing (the
property expression from the target)

now lets see CompoundPropertyModel

public CompoundPropertyModel(final Object model)
{
        target = model;
}

public Object getObject()
{
        if (target instanceof IModel)
        {
            return ((IModel)target).getObject();
        }
        return target;
}

public Object getTarget()
{
        return target;
}

public void setObject(Object object)
{
        this.target = object;
}

here we also have a getTarget() but in this class it does the opposite
from
what it does in the property model..
it is just reverted just like getObject() is exactly a mirror on those 2
models.

I just don't like the compound variant this code just fails:

Model personModel= new Model(new Person());

CompoundPropertyModel model = new CompoundPropertyModel(personModel);
if (model.getObject() == personModel) {}

or
model.setObject(personModel);

Model personModel = (Model)model.getObject(); // FAILS!

Because generics will fail here:

public CompoundPropertyModel(final T model)
{
        target = model;
}

public T getObject()
{
        if (target instanceof IModel)
        {
            return ((IModel)target).getObject();
        }
        return target;
}


public void setObject(T object)
{
        this.target = object;
}

So i looked at how we did that in 2.0:

public CompoundPropertyModel(Object target)
    {
        this.target = target;
    }

    @SuppressWarnings("unchecked")
    public T getObject()
    {
        if (target instanceof IModel)
        {
            return (T)((IModel)target).getObject();
        }
        return (T)target;
    }

    public void setObject(T object)
    {
        this.target = object;
    }

that just seems wrong.

johan

Reply via email to