The autocompltefilter panel fixed to filter templates by creater
This commit is contained in:
parent
27dc0004f1
commit
5f3b17ce05
src/main/java/se/su/dsv/scipro
data/dao
schedule/templates/panels
@ -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());
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user