package fr.openwide.core.basicapp.web.application.administration.model;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import com.google.common.collect.ImmutableMap;
import fr.openwide.core.basicapp.core.business.user.model.User;
import fr.openwide.core.basicapp.core.business.user.model.UserGroup;
import fr.openwide.core.basicapp.core.business.user.search.IUserGroupSearchQuery;
import fr.openwide.core.basicapp.core.business.user.search.UserGroupSort;
import fr.openwide.core.jpa.more.business.search.query.ISearchQuery;
import fr.openwide.core.wicket.more.markup.html.sort.model.CompositeSortModel;
import fr.openwide.core.wicket.more.markup.html.sort.model.CompositeSortModel.CompositingStrategy;
import fr.openwide.core.wicket.more.model.AbstractSearchQueryDataProvider;
import fr.openwide.core.wicket.more.model.GenericEntityModel;
public class UserGroupDataProvider extends AbstractSearchQueryDataProvider<UserGroup, UserGroupSort> {
private static final long serialVersionUID = 7805366114079528005L;
private final IModel<User> userModel;
private final IModel<String> nameModel = new Model<String>();
private final CompositeSortModel<UserGroupSort> sortModel = new CompositeSortModel<UserGroupSort>(
CompositingStrategy.LAST_ONLY,
ImmutableMap.of(
UserGroupSort.NAME, UserGroupSort.NAME.getDefaultOrder(),
UserGroupSort.ID, UserGroupSort.ID.getDefaultOrder()
),
ImmutableMap.of(
UserGroupSort.ID, UserGroupSort.ID.getDefaultOrder()
)
);
public UserGroupDataProvider(IModel<User> userModel) {
super();
this.userModel = userModel;
}
public IModel<String> getNameModel() {
return nameModel;
}
@Override
public IModel<UserGroup> model(UserGroup userGroup) {
return GenericEntityModel.of(userGroup);
}
public CompositeSortModel<UserGroupSort> getSortModel() {
return sortModel;
}
@Override
protected ISearchQuery<UserGroup, UserGroupSort> getSearchQuery() {
return createSearchQuery(IUserGroupSearchQuery.class)
.user(userModel.getObject())
.name(nameModel.getObject())
.sort(sortModel.getObject());
}
@Override
public void detach() {
super.detach();
userModel.detach();
nameModel.detach();
sortModel.detach();
}
}