diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ScheduleTemplateDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ScheduleTemplateDao.java index 7a3e59da8d..2dc107d44b 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ScheduleTemplateDao.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ScheduleTemplateDao.java @@ -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); } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/ScheduleTemplateDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ScheduleTemplateDaoJPAImp.java index 524c75b34e..da3b998746 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/ScheduleTemplateDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ScheduleTemplateDaoJPAImp.java @@ -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>(); + } + } + }); + } + } diff --git a/src/main/java/se/su/dsv/scipro/schedule/templates/panels/ScheduleTemplateFilterPanel.java b/src/main/java/se/su/dsv/scipro/schedule/templates/panels/ScheduleTemplateFilterPanel.java index 13b7c0552f..1f86a11a3c 100644 --- a/src/main/java/se/su/dsv/scipro/schedule/templates/panels/ScheduleTemplateFilterPanel.java +++ b/src/main/java/se/su/dsv/scipro/schedule/templates/panels/ScheduleTemplateFilterPanel.java @@ -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); } } diff --git a/src/main/java/se/su/dsv/scipro/schedule/templates/panels/models/ScheduleTemplatesModel.java b/src/main/java/se/su/dsv/scipro/schedule/templates/panels/models/ScheduleTemplatesModel.java index ad4c586c33..15d9450e25 100644 --- a/src/main/java/se/su/dsv/scipro/schedule/templates/panels/models/ScheduleTemplatesModel.java +++ b/src/main/java/se/su/dsv/scipro/schedule/templates/panels/models/ScheduleTemplatesModel.java @@ -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()); }