[ 
https://issues.apache.org/jira/browse/WICKET-3983?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13088782#comment-13088782
 ] 

Don Ngo commented on WICKET-3983:
---------------------------------

I was just trying to simplify my code below:

package com.rsr.application.web.wicket.model.holiday;

import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;

import com.rsr.application.dao.HolidayDao;
import com.rsr.application.entity.Holiday;
import 
com.rsr.common.web.wicket.model.auditable.AuditableLoadableDetachableModel;

/** @since 3.0.0 */
final class HolidayCompoundPropertyModel extends CompoundPropertyModel<Holiday> 
{
        private static final long serialVersionUID = 1L;

        private static class HolidayLoadableDetachableModel extends
                        AuditableLoadableDetachableModel<Holiday, HolidayDao> {
                private static final long serialVersionUID = 1L;

                @SpringBean
                private HolidayDao dao;

                public HolidayLoadableDetachableModel(final Holiday holiday) {
                        super(holiday);
                }

                @Override
                protected HolidayDao getDao() {
                        return dao;
                }
        }

        public HolidayCompoundPropertyModel(final Holiday holiday) {
                super(new HolidayLoadableDetachableModel(holiday));
        }
}

package com.rsr.common.web.wicket.model.auditable;

import org.apache.wicket.injection.Injector;
import org.apache.wicket.model.LoadableDetachableModel;

import com.rsr.common.dao.AuditableDao;
import com.rsr.common.entity.Auditable;

/** @since 3.0.0 */
@SuppressWarnings("serial")
public abstract class AuditableLoadableDetachableModel<E extends Auditable, D 
extends AuditableDao<E>>
                extends LoadableDetachableModel<E> {
        private final Long id;

        /**
         * @param entity
         */
        public AuditableLoadableDetachableModel(final E entity) {
                this(entity.getId());
        }

        /**
         * @param id
         */
        private AuditableLoadableDetachableModel(final Long id) {
                this.id = id;
                Injector.get().inject(this);
        }

        /**
         * @see java.lang.Object#hashCode()
         */
        @Override
        public int hashCode() {
                return id.hashCode();
        }

        /**
         * used for dataview with ReuseIfModelsEqualStrategy item reuse strategy
         * 
         * @see org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy
         * @see java.lang.Object#equals(java.lang.Object)
         */
        @Override
        public boolean equals(final Object obj) {
                if (obj == this)
                        return true;
                else if (obj == null)
                        return false;
                else if (obj instanceof AuditableLoadableDetachableModel<?, ?>) 
{
                        AuditableLoadableDetachableModel<?, ?> other = 
(AuditableLoadableDetachableModel<?, ?>) obj;
                        return other.id == id;
                }
                return false;
        }

        /**
         * @see org.apache.wicket.model.LoadableDetachableModel#load()
         */
        @Override
        protected final E load() {
                // Loads entity from the database
                return getDao().findById(id);
        }

        protected abstract D getDao();
}

With the example above, I have to repeat a class like 
HolidayCompoundPropertyModel for every entity model in my application.  I was 
hoping to simplify the HolidayCompoundPropertyModel class to something like:

public class HolidayCompoundPropertyModel extends 
AuditableCompoundLoadableDetachablePropertyModel {
....
}

without having to have an inner class as I've done in the 
HolidayCompoundPropertyModel class above.

> Update LoadableDetachableModel to include implementation of IChainingModel
> --------------------------------------------------------------------------
>
>                 Key: WICKET-3983
>                 URL: https://issues.apache.org/jira/browse/WICKET-3983
>             Project: Wicket
>          Issue Type: Improvement
>          Components: wicket
>    Affects Versions: 1.5-RC5.1
>            Reporter: Don Ngo
>            Assignee: Igor Vaynberg
>            Priority: Minor
>
> Please consider updating LoadableDetachableModel to include implementation of 
> IChainingModel.  Doing so will allow the LoadableDetachableModel to be 
> chained with other chainable models such as CompoundPropertyModel.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to