The autocompltefilter panel fixed to filter templates by creater

This commit is contained in:
ranil 2012-05-08 16:05:32 +02:00
parent 27dc0004f1
commit 5f3b17ce05
4 changed files with 77 additions and 74 deletions
src/main/java/se/su/dsv/scipro

@ -8,4 +8,5 @@ import se.su.dsv.scipro.data.dataobjects.User;
public interface ScheduleTemplateDao extends Dao<ScheduleTemplate>{
public List<ScheduleTemplate> getScheduleTemplates(final User creator, final Boolean isSysAdminTemplate, final ProjectClass projectClass);
public List<ScheduleTemplate> getScheduleTemplatesForModel(final User creator, final Boolean isSysAdminTemplate, final ProjectClass projectClass);
}

@ -80,4 +80,57 @@ public class ScheduleTemplateDaoJPAImp extends AbstractDaoJPAImp<ScheduleTemplat
});
}
@Transactional
public List<ScheduleTemplate> getScheduleTemplatesForModel(final User creator, final Boolean isSysAdminTemplate, final ProjectClass projectClass) {
return getJpaTemplate().execute(new JpaCallback<List<ScheduleTemplate>>() {
public List<ScheduleTemplate> doInJpa(EntityManager em)
throws PersistenceException {
String selectClause = "select distinct st ";
String fromClause = "from ScheduleTemplate st ";
String joinClause = "";
List<String> conditions = new ArrayList<String>();
if(isSysAdminTemplate != null){
conditions.add("st.isSysAdminTemplate = :isSysAdminTemplate ");
}
if(creator != null){
fromClause += ", User u ";
conditions.add("st.creator = :user");
}
if(projectClass != null){
conditions.add("st.projectClass = :projectClass ");
}
String cond = "";
for(String c : conditions){
if(conditions.indexOf(c) == 0)
cond += "where " + c;
else
cond += "and " + c;
}
String q = selectClause + fromClause + joinClause + cond;
q += " order by st.templateName asc";
TypedQuery<ScheduleTemplate> query = em.createQuery(q, ScheduleTemplate.class);
if(isSysAdminTemplate != null){
query.setParameter("isSysAdminTemplate", isSysAdminTemplate);
}
if(creator != null){
query.setParameter("user", creator);
}
if(projectClass != null){
query.setParameter("projectClass", projectClass);
}
try {
return query.getResultList();
} catch (NoResultException e) {
return new ArrayList<ScheduleTemplate>();
}
}
});
}
}

@ -1,9 +1,7 @@
package se.su.dsv.scipro.schedule.templates.panels;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.extensions.ajax.markup.html.autocomplete.DefaultCssAutocompleteTextField;
@ -12,24 +10,19 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.wicketstuff.objectautocomplete.AutoCompletionChoicesProvider;
import org.wicketstuff.objectautocomplete.ObjectAutoCompleteBuilder;
import org.wicketstuff.objectautocomplete.ObjectAutoCompleteField;
import org.wicketstuff.objectautocomplete.ObjectAutoCompleteRenderer;
import org.wicketstuff.objectautocomplete.ObjectAutoCompleteSelectionChangeListener;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.data.dao.interfaces.UserDao;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.icons.ImageIcon;
import se.su.dsv.scipro.data.dataobjects.Employee;
import se.su.dsv.scipro.reusable.EmployeeAutoComplete;
import se.su.dsv.scipro.schedule.templates.panels.models.ScheduleTemplatesModel;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.util.SelectOption;
import com.mysql.jdbc.StringUtils;
public abstract class ScheduleTemplateFilterPanel extends Panel {
@ -54,7 +47,8 @@ public abstract class ScheduleTemplateFilterPanel extends Panel {
public abstract void onFilterChanged(AjaxRequestTarget target);
@SuppressWarnings("unchecked")
public ScheduleTemplateFilterPanel(String id, final ScheduleTemplatesModel templateModel, final boolean showSysAdminOptions){
public
ScheduleTemplateFilterPanel(String id, final ScheduleTemplatesModel templateModel, final boolean showSysAdminOptions){
super(id);
@ -147,68 +141,22 @@ public abstract class ScheduleTemplateFilterPanel extends Panel {
});
sysAdminOptionsContainer.add(sysAdminDD);
add(sysAdminOptionsContainer);
final AutoCompletionChoicesProvider<User> provider = new AutoCompletionChoicesProvider<User>() {
private static final long serialVersionUID = 1L;
EmployeeAutoComplete sField = new EmployeeAutoComplete("searchCreator") {
public Iterator<User> getChoices(String input) {
List<User> result = new ArrayList<User>();
if(input.length() > 2){
//TODO: potentially change so that the relevant users are collected page creation
for(User u : userDao.findUserQuery(input, false, true, true, 10)) {
String fName = u.getFirstName();
String lName = u.getLastName();
if (StringUtils.startsWithIgnoreCase(fName, input)
|| StringUtils.startsWithIgnoreCase(lName,
input)) {
result.add(u);
}
}
}
return result.iterator();
}
};
private static final long serialVersionUID = 7817534289202704322L;
final ObjectAutoCompleteRenderer<User> renderer = new ObjectAutoCompleteRenderer<User>() {
@Override
protected void action(AjaxRequestTarget pTarget, Employee newSelection) {
templateModel.setCreator(newSelection.getUser());
onFilterChanged(pTarget);
}
};
private static final long serialVersionUID = 1L;
protected String getIdValue(User u) {
return u.getId().toString();
}
protected String getTextValue(User u) {
return u.getFirstName() + " " + u.getLastName();
}
};
final ObjectAutoCompleteBuilder<User, Long> builder = new ObjectAutoCompleteBuilder<User, Long>(
provider);
builder.updateOnSelectionChange(new ObjectAutoCompleteSelectionChangeListener<Long>(){
private static final long serialVersionUID = 1L;
@Override
public void selectionChanged(AjaxRequestTarget pTarget, IModel<Long> pModel) {
//TODO: Bug, the loading div does not disappear...
Long id = pModel.getObject();
if(id != null || (id == null && templateModel.getCreator() != null)){
templateModel.setCreatorId(id);
onFilterChanged(pTarget);
}
}
});
builder.idType(Long.class);
builder.autoCompleteRenderer(renderer);
builder.searchLinkImage(ImageIcon.getImage(ImageIcon.ICON_DELETE, ""));
final ObjectAutoCompleteField<User, Long> sField = builder.build(
"searchCreator");
add(CSSPackageResource.getHeaderContribution(DefaultCssAutocompleteTextField.class,
"DefaultCssAutocompleteTextField.css"));
add(sField);
}
}

@ -34,12 +34,13 @@ public class ScheduleTemplatesModel extends LoadableDetachableModel<List<Schedul
InjectorHolder.getInjector().inject(this);
}
@Override
protected List<ScheduleTemplate> load() {
return scheduleTemplateDao.getScheduleTemplates(creator, onlySysAdminTemplates, projectClass);
}
public void reloadModel(){
@Override
protected List<ScheduleTemplate> load() {
return scheduleTemplateDao.getScheduleTemplatesForModel(creator, onlySysAdminTemplates, projectClass);
}
public void reloadModel(){
setObject(load());
}