/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.gui.common.framework;
import java.util.ArrayList;
import java.util.List;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.SavedSearchCriteria;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.search.SavedSearch;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.core.gui.util.FacesContextUtility;
import org.rhq.enterprise.gui.legacy.ParamConstants;
import org.rhq.enterprise.gui.legacy.WebUser;
import org.rhq.enterprise.gui.legacy.WebUserPreferences;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
import org.rhq.enterprise.server.search.SavedSearchManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
/**
* @author Greg Hinkle
*/
public class UserPreferencesUIBean {
//private final Log log = LogFactory.getLog(UserPreferencesUIBean.class);
public static final String LEFT_RESOURCE_NAV_SHOWING = "ui.leftResourceNavShowing";
public static final String SUMMARY_PANEL_DISPLAY_STATE = "ui.summaryPanelDisplayState";
private ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
private ResourceGroupManagerLocal groupManager = LookupUtil.getResourceGroupManager();
private SavedSearchManagerLocal savedSearchManager = LookupUtil.getSavedSearchManager();
private List<Resource> resourceFavorites;
private List<ResourceGroup> groupFavorites;
private List<SavedSearch> savedSearches;
private String refreshPath;
private WebUser webUser;
private Subject subject;
public Subject getSubject() {
if (subject == null) {
loadUserInfo();
}
return subject;
}
public WebUser getWebUser() {
if (webUser == null) {
loadUserInfo();
}
return webUser;
}
private void loadUserInfo() {
webUser = EnterpriseFacesContextUtility.getWebUser();
subject = webUser.getSubject();
}
public String getLeftResourceNavState() {
updateRecentVisits();
return EnterpriseFacesContextUtility.getWebUser().getWebPreferences()
.getPreference(LEFT_RESOURCE_NAV_SHOWING, "30");
}
public void setLeftResourceNavState(String state) {
WebUserPreferences preferences = getWebUser().getWebPreferences();
preferences.setPreference(LEFT_RESOURCE_NAV_SHOWING, state);
}
public void setRefreshPath(String path) {
if (path != null && path.length() != 0) {
this.refreshPath = path;
}
}
public String getRefreshPath() {
return refreshPath;
}
public void setPageRefresh(int refresh) {
String path = this.refreshPath;
if (path == null) {
path = FacesContextUtility.getRequest().getParameter("originalPath");
}
if (path == null) {
path = FacesContextUtility.getRequest().getRequestURI();
}
setPageRefresh(refresh, path);
}
public void setPageRefresh(int refresh, String path) {
WebUserPreferences preferences = getWebUser().getWebPreferences();
preferences.setPreference("PATH_REFRESH." + path, refresh);
}
public int getPageRefresh() {
WebUserPreferences preferences = getWebUser().getWebPreferences();
String path = (String) FacesContextUtility.getRequest().getAttribute("javax.servlet.forward.request_uri");
if (path == null) {
path = FacesContextUtility.getRequest().getParameter("originalPath");
}
if (path == null) {
path = FacesContextUtility.getRequest().getRequestURI();
}
return preferences.getPreference("PATH_REFRESH." + path, 0);
}
public void updateSummaryPanelDisplayState(javax.faces.event.ActionEvent event) {
String summaryPanelState = getSummaryPanelDisplayState();
setSummaryPanelDisplayState(summaryPanelState.equals("true") ? "false" : "true");
}
public String getSummaryPanelDisplayState() {
return getWebUser().getWebPreferences().getPreference(SUMMARY_PANEL_DISPLAY_STATE, "true");
}
public void setSummaryPanelDisplayState(String state) {
WebUserPreferences preferences = getWebUser().getWebPreferences();
preferences.setPreference(SUMMARY_PANEL_DISPLAY_STATE, state);
}
public List<Resource> getResourceFavorites() {
// ignore this for users that are in the process of being created
Subject subject = getSubject();
if (0 == subject.getId()) {
return new ArrayList();
}
if (resourceFavorites == null) {
WebUser user = EnterpriseFacesContextUtility.getWebUser();
WebUserPreferences.FavoriteResourcePortletPreferences favoriteResources = user.getWebPreferences()
.getFavoriteResourcePortletPreferences();
resourceFavorites = resourceManager.findResourceByIds(subject, favoriteResources.asArray(), false,
PageControl.getUnlimitedInstance());
}
return resourceFavorites;
}
public List<SavedSearch> getSavedSearches() {
// ignore this for users that are in the process of being created
Subject subject = getSubject();
if (0 == subject.getId()) {
return new ArrayList();
}
if (savedSearches == null) {
SavedSearchCriteria criteria = new SavedSearchCriteria();
criteria.addFilterSubjectId(subject.getId());
criteria.addFilterGlobal(false);
criteria.addSortName(PageOrdering.ASC); // each sublist is alphabetical
savedSearches = savedSearchManager.findSavedSearchesByCriteria(subject, criteria);
}
return savedSearches;
}
public List<ResourceGroup> getGroupFavorites() {
// ignore this for users that are in the process of being created
Subject subject = getSubject();
if (0 == subject.getId()) {
return new ArrayList();
}
if (groupFavorites == null) {
WebUser user = EnterpriseFacesContextUtility.getWebUser();
WebUserPreferences.FavoriteGroupPortletPreferences favoriteGroups = user.getWebPreferences()
.getFavoriteGroupPortletPreferences();
groupFavorites = groupManager.findResourceGroupByIds(subject, favoriteGroups.asArray(),
PageControl.getUnlimitedInstance());
}
return groupFavorites;
}
public List<WebUserPreferences.ResourceVisit> getRecentVisits() {
WebUser user = EnterpriseFacesContextUtility.getWebUser();
return user.getWebPreferences().getRecentResourceVisits();
}
public void updateRecentVisits() {
String resourceId = FacesContextUtility.getOptionalRequestParameter(ParamConstants.RESOURCE_ID_PARAM);
String groupId = FacesContextUtility.getOptionalRequestParameter(ParamConstants.GROUP_ID_PARAM);
WebUser user = EnterpriseFacesContextUtility.getWebUser();
WebUserPreferences prefs = user.getWebPreferences();
WebUserPreferences.ResourceVisit visit = null;
if (resourceId != null) {
Resource res = resourceManager.getResourceById(getSubject(), Integer.parseInt(resourceId));
visit = new WebUserPreferences.ResourceVisit(Integer.parseInt(resourceId), res.getName(),
WebUserPreferences.ResourceVisit.Kind.valueOf(res.getResourceType().getCategory().name()));
} else if (groupId != null) {
ResourceGroup group = groupManager.getResourceGroupById(getSubject(), Integer.parseInt(groupId), null);
visit = new WebUserPreferences.ResourceVisit(Integer.parseInt(groupId), group.getName(),
(group.getResourceType() != null ? WebUserPreferences.ResourceVisit.Kind.COMPATIBLE_GROUP
: WebUserPreferences.ResourceVisit.Kind.MIXED_GROUP));
}
if (visit != null) {
prefs.addRecentResource(visit);
}
}
}