[
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