/**
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.organization.webui.component;
import org.exoplatform.commons.serialization.api.annotations.Serialized;
import org.exoplatform.portal.config.UserACL;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.services.organization.OrganizationService;
import org.exoplatform.services.organization.Query;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.core.UIGrid;
import org.exoplatform.webui.core.UIPageIterator;
import org.exoplatform.webui.core.UIPopupWindow;
import org.exoplatform.webui.core.UISearch;
import org.exoplatform.webui.core.lifecycle.UIContainerLifecycle;
import org.exoplatform.webui.core.model.SelectItemOption;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIFormInputSet;
import org.exoplatform.webui.form.UIFormSelectBox;
import org.exoplatform.webui.form.UIFormStringInput;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* Created by The eXo Platform SARL
* Author : chungnv
* nguyenchung136@yahoo.com
* Jun 23, 2006
* 10:07:15 AM
*/
@ComponentConfig(lifecycle = UIContainerLifecycle.class, events = {
@EventConfig(listeners = UIListUsers.ViewUserInfoActionListener.class),
@EventConfig(listeners = UIListUsers.SelectUserActionListener.class),
@EventConfig(listeners = UIListUsers.DeleteUserActionListener.class, confirm = "UIListUsers.deleteUser")})
@Serialized
public class UIListUsers extends UISearch
{
public static final String USER_NAME = "userName";
public static final String LAST_NAME = "lastName";
public static final String FIRST_NAME = "firstName";
public static final String EMAIL = "email";
private static final String[] USER_BEAN_FIELD = {USER_NAME, LAST_NAME, FIRST_NAME, EMAIL};
private static final String[] USER_ACTION = {"ViewUserInfo", "DeleteUser"};
private final static List<SelectItemOption<String>> OPTIONS_ =
Collections.unmodifiableList(Arrays.asList(new SelectItemOption<String>(USER_NAME, USER_NAME),
new SelectItemOption<String>(LAST_NAME, LAST_NAME), new SelectItemOption<String>(FIRST_NAME, FIRST_NAME),
new SelectItemOption<String>(EMAIL, EMAIL)));
private Query lastQuery_;
private String userSelected_;
private UIGrid grid_;
public UIListUsers() throws Exception
{
super(OPTIONS_);
grid_ = addChild(UIGrid.class, null, "UIListUsersGird");
grid_.configure(USER_NAME, USER_BEAN_FIELD, USER_ACTION);
grid_.getUIPageIterator().setId("UIListUsersIterator");
grid_.getUIPageIterator().setParent(this);
search(new Query());
}
/**
* @see org.exoplatform.webui.core.UIComponent#processRender(org.exoplatform.webui.application.WebuiRequestContext)
*/
@Override
public void processRender(WebuiRequestContext context) throws Exception
{
int curPage = grid_.getUIPageIterator().getCurrentPage();
if (lastQuery_ == null)
lastQuery_ = new Query();
search(lastQuery_);
grid_.getUIPageIterator().setCurrentPage(curPage);
grid_.getUIPageIterator().getCurrentPageData();
super.processRender(context);
}
public void setUserSelected(String userName)
{
userSelected_ = userName;
}
public String getUserSelected()
{
return userSelected_;
}
public void search(Query query) throws Exception
{
lastQuery_ = query;
grid_.getUIPageIterator().setPageList(new FindUsersPageList(query, 10));
UIPageIterator pageIterator = grid_.getUIPageIterator();
if (pageIterator.getAvailable() == 0)
{
UIApplication uiApp = Util.getPortalRequestContext().getUIApplication();
uiApp.addMessage(new ApplicationMessage("UISearchForm.msg.empty", null));
}
}
public void quickSearch(UIFormInputSet quickSearchInput) throws Exception
{
Query query = new Query();
UIFormStringInput input = (UIFormStringInput)quickSearchInput.getChild(0);
UIFormSelectBox select = (UIFormSelectBox)quickSearchInput.getChild(1);
String name = input.getValue();
if (name == null || name.equals(""))
{
search(new Query());
return;
}
if (name.indexOf("*") < 0)
{
if (name.charAt(0) != '*')
name = "*" + name;
if (name.charAt(name.length() - 1) != '*')
name += "*";
}
name = name.replace('?', '_');
String selectBoxValue = select.getValue();
if (selectBoxValue.equals(USER_NAME))
query.setUserName(name);
if (selectBoxValue.equals(LAST_NAME))
query.setLastName(name);
if (selectBoxValue.equals(FIRST_NAME))
query.setFirstName(name);
if (selectBoxValue.equals(EMAIL))
query.setEmail(name);
search(query);
}
@SuppressWarnings("unused")
public void advancedSearch(UIFormInputSet advancedSearchInput) throws Exception
{
}
static public class ViewUserInfoActionListener extends EventListener<UIListUsers>
{
public void execute(Event<UIListUsers> event) throws Exception
{
String username = event.getRequestContext().getRequestParameter(OBJECTID);
UIListUsers uiListUsers = event.getSource();
OrganizationService service = uiListUsers.getApplicationComponent(OrganizationService.class);
if (service.getUserHandler().findUserByName(username) == null)
{
uiListUsers.search(new Query());
return;
}
uiListUsers.setRendered(false);
UIUserManagement uiUserManager = uiListUsers.getParent();
UIUserInfo uiUserInfo = uiUserManager.getChild(UIUserInfo.class);
uiUserInfo.setUser(username);
uiUserInfo.setRendered(true);
UIComponent uiToUpdateAjax = uiListUsers.getAncestorOfType(UIUserManagement.class);
event.getRequestContext().addUIComponentToUpdateByAjax(uiToUpdateAjax);
}
}
static public class DeleteUserActionListener extends EventListener<UIListUsers>
{
public void execute(Event<UIListUsers> event) throws Exception
{
UIListUsers uiListUser = event.getSource();
String userName = event.getRequestContext().getRequestParameter(OBJECTID);
OrganizationService service = uiListUser.getApplicationComponent(OrganizationService.class);
UserACL userACL = uiListUser.getApplicationComponent(UserACL.class);
if (userACL.getSuperUser().equals(userName))
{
UIApplication uiApp = event.getRequestContext().getUIApplication();
uiApp.addMessage(new ApplicationMessage("UIListUsers.msg.DeleteSuperUser", new String[]{userName},
ApplicationMessage.WARNING));
return;
}
UIPageIterator pageIterator = uiListUser.getChild(UIGrid.class).getUIPageIterator();
int currentPage = pageIterator.getCurrentPage();
service.getUserHandler().removeUser(userName, true);
uiListUser.search(uiListUser.lastQuery_);
while (currentPage > pageIterator.getAvailablePage())
currentPage--;
pageIterator.setCurrentPage(currentPage);
UIComponent uiToUpdateAjax = uiListUser.getAncestorOfType(UIUserManagement.class);
event.getRequestContext().addUIComponentToUpdateByAjax(uiToUpdateAjax);
}
}
static public class SelectUserActionListener extends EventListener<UIListUsers>
{
public void execute(Event<UIListUsers> event) throws Exception
{
UIListUsers uiListUser = event.getSource();
String userName = event.getRequestContext().getRequestParameter(OBJECTID);
UIPopupWindow popup = uiListUser.getAncestorOfType(UIPopupWindow.class);
popup.setShow(false);
UIGroupMembershipForm groupMembershipForm = popup.getParent();
groupMembershipForm.setUserName(userName);
event.getRequestContext().addUIComponentToUpdateByAjax(groupMembershipForm);
}
}
}