diff --git a/libreplan-business/src/main/java/org/libreplan/business/users/entities/User.java b/libreplan-business/src/main/java/org/libreplan/business/users/entities/User.java index d9f2e5f17..16ebd4fa7 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/users/entities/User.java +++ b/libreplan-business/src/main/java/org/libreplan/business/users/entities/User.java @@ -313,4 +313,8 @@ public class User extends BaseEntity implements IHumanIdentifiable{ this.worker = worker; } + public String getFullName() { + return firstName + " " + lastName; + } + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/components/bandboxsearch/BandboxSearch.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/components/bandboxsearch/BandboxSearch.java index 6fba17456..b444ca749 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/components/bandboxsearch/BandboxSearch.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/components/bandboxsearch/BandboxSearch.java @@ -165,6 +165,7 @@ public class BandboxSearch extends HtmlMacroComponent { final Object object = getSelectedItem().getValue(); bandbox.setValue(finder.objectToString(object)); setSelectedElement(object); + Util.getBinder(this).saveAttribute(this, "selectedElement"); } private void clearSelectedElement() { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/components/finders/UserBandboxFinder.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/components/finders/UserBandboxFinder.java new file mode 100644 index 000000000..ecc165f7d --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/components/finders/UserBandboxFinder.java @@ -0,0 +1,108 @@ +/* + * This file is part of LibrePlan + * + * Copyright (C) 2012 Igalia, S.L. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.libreplan.web.common.components.finders; + +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.libreplan.business.users.daos.IUserDAO; +import org.libreplan.business.users.entities.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; +import org.zkoss.lang.Strings; +import org.zkoss.zul.Bandbox; +import org.zkoss.zul.Listcell; +import org.zkoss.zul.Listitem; +import org.zkoss.zul.ListitemRenderer; + +/** + * This is a finder for {@link User}s in a {@link Bandbox} + * + * @author Manuel Rego Casasnovas + */ +@Repository +public class UserBandboxFinder extends BandboxFinder implements IBandboxFinder { + + @Autowired + private IUserDAO userDAO; + + private final String headers[] = { _("Login name"), _("Full name") }; + + /** + * Forces to mark the string as needing translation + */ + private static String _(String string) { + return string; + } + + @Override + @Transactional(readOnly = true) + public List getAll() { + return userDAO.list(User.class); + } + + @Override + public boolean entryMatchesText(Object obj, String text) { + final User user = (User) obj; + text = StringUtils.trim(text.toLowerCase()); + return checkContainsText(user.getLoginName(), text) + || checkContainsText(user.getFirstName(), text) + || checkContainsText(user.getLastName(), text); + } + + private boolean checkContainsText(String original, String text) { + return original.toLowerCase().contains(text); + } + + @Override + public String objectToString(Object obj) { + User user = (User) obj; + + String fullName = user.getFullName(); + if (Strings.isBlank(fullName)) { + return user.getLoginName(); + } + + return user.getLoginName() + " (" + fullName + ")"; + } + + @Override + public String[] getHeaders() { + return headers.clone(); + } + + @Override + public ListitemRenderer getItemRenderer() { + return usersRenderer; + } + + private final ListitemRenderer usersRenderer = new ListitemRenderer() { + @Override + public void render(Listitem item, Object data) { + User user = (User) data; + + item.setValue(data); + + item.appendChild(new Listcell(user.getLoginName())); + item.appendChild(new Listcell(user.getFullName())); + } + }; +} diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java index 59a0ec3a2..8d27d58c1 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java @@ -49,6 +49,7 @@ import org.libreplan.web.common.MessagesForUser; import org.libreplan.web.common.OnlyOneVisible; import org.libreplan.web.common.Util; import org.libreplan.web.common.components.bandboxsearch.BandboxMultipleSearch; +import org.libreplan.web.common.components.bandboxsearch.BandboxSearch; import org.libreplan.web.common.components.finders.FilterPair; import org.libreplan.web.common.entrypoints.EntryPointsHandler; import org.libreplan.web.common.entrypoints.IURLHandlerRegistry; @@ -74,7 +75,6 @@ import org.zkoss.zul.Label; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listcell; import org.zkoss.zul.Listitem; -import org.zkoss.zul.ListitemRenderer; import org.zkoss.zul.Messagebox; import org.zkoss.zul.Radio; import org.zkoss.zul.Row; @@ -158,7 +158,7 @@ public class WorkerCRUDController extends GenericForwardComposer implements private Radiogroup userBindingRadiogroup; - private Listbox userListbox; + private BandboxSearch userBandbox; private Textbox loginNameTextbox; @@ -278,7 +278,7 @@ public class WorkerCRUDController extends GenericForwardComposer implements if (UserBindingOption.EXISTING_USER.ordinal() == option) { if (getWorker().getUser() == null) { - throw new WrongValueException(userListbox, + throw new WrongValueException(userBandbox, _("please select a user to bound")); } getWorker().updateUserData(); @@ -467,7 +467,7 @@ public class WorkerCRUDController extends GenericForwardComposer implements userBindingRadiogroup = (Radiogroup) editWindow .getFellowIfAny("userBindingRadiogroup"); initUserBindingOptions(); - userListbox = (Listbox) editWindow.getFellowIfAny("userListbox"); + userBandbox = (BandboxSearch) editWindow.getFellowIfAny("userBandbox"); loginNameTextbox = (Textbox) editWindow.getFellowIfAny("loginName"); passwordTextbox = (Textbox) editWindow.getFellowIfAny("password"); passwordConfirmationTextbox = (Textbox) editWindow @@ -1050,25 +1050,8 @@ public class WorkerCRUDController extends GenericForwardComposer implements updateUserBindingComponents(); } - public ListitemRenderer getUsersRenderer() { - return new ListitemRenderer() { - - @Override - public void render(Listitem item, Object data) throws Exception { - User user = (User) data; - - item.setLabel(user.getLoginName()); - item.setValue(user); - } - }; - } - public boolean isUserSelected() { - if (userListbox.getSelectedItem() == null - || userListbox.getSelectedItem().getValue() == null) { - return false; - } - return true; + return userBandbox.getSelectedElement() != null; } public String getLoginName() { diff --git a/libreplan-webapp/src/main/webapp/resources/worker/_edition.zul b/libreplan-webapp/src/main/webapp/resources/worker/_edition.zul index 363ad1b1b..ca5a57953 100644 --- a/libreplan-webapp/src/main/webapp/resources/worker/_edition.zul +++ b/libreplan-webapp/src/main/webapp/resources/worker/_edition.zul @@ -112,14 +112,9 @@ - -