Change user Listbox for a BandboxSearch
* Create finder UserBandboxFinder * Modify BandboxSearch behavior to call save action on "selectedElement" attribute FEA: ItEr76S27ResourceBinding
This commit is contained in:
parent
81bc21f791
commit
372f4d1650
5 changed files with 120 additions and 29 deletions
|
|
@ -313,4 +313,8 @@ public class User extends BaseEntity implements IHumanIdentifiable{
|
|||
this.worker = worker;
|
||||
}
|
||||
|
||||
public String getFullName() {
|
||||
return firstName + " " + lastName;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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 <rego@igalia.com>
|
||||
*/
|
||||
@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<User> 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()));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -112,14 +112,9 @@
|
|||
<rows>
|
||||
<row>
|
||||
<label value="${i18n:_('User')}" />
|
||||
<listbox id="userListbox" mold="select"
|
||||
<bandboxSearch id="userBandbox" finder="UserBandboxFinder"
|
||||
model="@{controller.possibleUsersToBound}"
|
||||
selectedItem="@{controller.boundUser}"
|
||||
itemRenderer="@{controller.usersRenderer}" />
|
||||
</row>
|
||||
<row>
|
||||
<label value="${i18n:_('Login name')}" />
|
||||
<label value="@{controller.loginName}" />
|
||||
selectedElement="@{controller.boundUser, access='both'}" />
|
||||
</row>
|
||||
<row>
|
||||
<label value="${i18n:_('E-mail')}" />
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue