Hi, I am starting to port an unfinished application to 4.0b1.
I have a Model class which uses an internal class as comparator. In 3.0.2 it did ok, but under 4.0b1 I get a java.lang.NoClassDefError.

could that have something with tapestry/hivemind ?

Here is the class. The exception is being thrown on sort();

Thanx, Ron

PS - I would suggest to add this class to 4.0 (after buetifying...)


=============================================================================
/*
 * Created on Mar 10, 2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package net.tutim.tapestry.model;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Set;

import net.tutim.util.OgnlExpression;
import ognl.Ognl;
import ognl.OgnlException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tapestry.ApplicationRuntimeException;
import org.apache.tapestry.form.IPropertySelectionModel;

/**
 * @author ron1
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class OgnlPropertySelectionModel implements IPropertySelectionModel {
    private static final Log log = LogFactory
        .getLog(OgnlPropertySelectionModel.class);

    private String _valueProperty;
    private String _labelProperty;
    private String _optionProperty;

    protected List list;

    protected boolean nullable;

public OgnlPropertySelectionModel(Set set_, String labelProp_, String valueProp_, String optionProp_, boolean nullable_) { this(new ArrayList(set_),labelProp_, valueProp_, optionProp_, nullable_);
    }

    public OgnlPropertySelectionModel sort(String ognl) {
        Comparator c = new ListComparator(ognl);
        Collections.sort(list, c);
        return this;
    }

    public OgnlPropertySelectionModel sort() {
        return sort(_labelProperty);
    }

    /**
* Constructs a Property Selection model which uses reflection on the obejcts to
     * get the label, value, and option object.
     * If either of the given property names is null,
     * it will return, for label and value, the toString() value of the
     * object.
* For the option object, it will return the option object itself (if the
     * optionProp property is null).
     */
public OgnlPropertySelectionModel(List list_, String labelProp_, String valueProp_, String optionProp_) {
        this(list_, labelProp_, valueProp_, optionProp_, false);
    }

public OgnlPropertySelectionModel(List list_, String labelProp_, String valueProp_, String optionProp_, boolean nullable_) {
        _valueProperty = valueProp_;
        _labelProperty = labelProp_;
        _optionProperty = optionProp_;
        list = list_;
        nullable = nullable_;
    }

    /* (non-Javadoc)
* @see org.apache.tapestry.form.IPropertySelectionModel#getOptionCount()
     */
    public int getOptionCount() {
        return list == null ? 0 : list.size() + (nullable ? 1 : 0);
    }

    /* (non-Javadoc)
     * @see org.apache.tapestry.form.IPropertySelectionModel#getOption(int)
     */
    public Object getOption(int index) {
        if (nullable && index == 0)
            return null;

        index -= (nullable ? 1 : 0);

        if (_optionProperty == null)
            return list.get(index);
        else if ("".equals(_optionProperty))
            return list.get(index).toString();
        else
            try {
                return Ognl.getValue(_optionProperty, list.get(index));
            } catch (Exception e) {
                log.error(this,e);
                return "ERROR";
            }
    }

    /* (non-Javadoc)
     * @see org.apache.tapestry.form.IPropertySelectionModel#getLabel(int)
     */
    public String getLabel(int index) {
        if (nullable && index == 0)
            return " ";

        index -= (nullable ? 1 : 0);

        Object o = list.get(index);
        try {
            if (_labelProperty == null)
                return o.toString();
            else
                return Ognl.getValue(_labelProperty,o).toString();
        }
        catch (Exception x)  {
            log.error(this,x);
            return "ERROR";
        }
    }

    /* (non-Javadoc)
     * @see org.apache.tapestry.form.IPropertySelectionModel#getValue(int)
     */
    public String getValue(int index) {
        if (nullable && index == 0)
            return " ";

        index -= (nullable ? 1 : 0);

        Object o = list.get(index);
        try {
            if (_valueProperty == null)
                return o.toString();
            else
                return Ognl.getValue(_valueProperty,o).toString();
        }
        catch (Exception x)  {
            log.error(this,x);
            return "ERROR";
        }
    }

    /* (non-Javadoc)
* @see org.apache.tapestry.form.IPropertySelectionModel#translateValue(java.lang.String)
     */
    public Object translateValue(String value) {
        for (int i = 0; i < getOptionCount(); i++ )
            if (getValue(i).equals(value))
                return getOption(i);
        return null;
    }

    public void remove(Object o) {
        list.remove(o);
    }

    public class ListComparator implements Comparator {
        private OgnlExpression _ognl;

        public ListComparator( String ognl ) {
            try {
                _ognl = new OgnlExpression(ognl);
            }
            catch (OgnlException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }

        public int compare(Object arg0, Object arg1) {
            try {
return ((Comparable)_ognl.getValue(arg0)).compareTo(_ognl.getValue(arg1));
            }
            catch (Exception ex) {
                throw new IllegalArgumentException(ex);
            }
        }

    }
}

===============================================================================
package net.tutim.util;

import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException;

public class OgnlExpression
{
    private Object       expression;
    private OgnlContext context = new OgnlContext();

    public OgnlExpression(String expressionString) throws OgnlException
    {
        super();
        expression = Ognl.parseExpression(expressionString);
    }

    public Object getExpression()
    {
        return expression;
    }

    public Object getValue( Object rootObject) throws OgnlException
    {
        return Ognl.getValue(getExpression(), context, rootObject);
    }

public void setValue( Object rootObject, Object value) throws OgnlException
    {
        Ognl.setValue(getExpression(), context, rootObject, value);
    }
}

===================================================================


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to