/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.esri.gpt.framework.jsf;
import com.esri.gpt.control.search.browse.TocsByKey;
import com.esri.gpt.framework.collection.StringAttributeMap;
import com.esri.gpt.framework.context.ApplicationConfiguration;
import com.esri.gpt.framework.context.RequestContext;
import com.esri.gpt.framework.security.credentials.UsernamePasswordCredentials;
import com.esri.gpt.framework.security.identity.IdentitySupport;
import com.esri.gpt.framework.security.principal.User;
import com.esri.gpt.framework.util.Val;
import java.util.Locale;
/**
* Represents the context for an active JSF based page.
* <p>
* The PageContext is a JSF managed bean in request scope.
*/
public class PageContext {
// class variables =============================================================
// instance variables ==========================================================
private String _caption = "";
private String _captionResourceKey = "";
private FacesContextBroker _contextBroker = new FacesContextBroker();
private String _pageId = "";
private RoleMap _roleMap = null;
private String _prepareView = "";
private String _tabId = "";
private TocsByKey _tocsByKey = null;
private boolean _manageUser = false;
// constructors ================================================================
/** Default constructor. */
public PageContext() {}
// properties ==================================================================
/**
* Gets the page caption.
* @return the caption
*/
public String getCaption() {
if (_caption.length() > 0) {
return _caption;
} else if (getCaptionResourceKey().length() > 0) {
MessageBroker broker = getContextBroker().extractMessageBroker();
return broker.retrieveMessage(getCaptionResourceKey());
} else {
return "???Caption";
}
}
/**
* Sets the page caption.
* @param caption the caption
*/
public void setCaption(String caption) {
_caption = Val.chkStr(caption);
}
/**
* Gets the resource key associated with the page caption.
* @return the resource key
*/
public String getCaptionResourceKey() {
return _captionResourceKey;
}
/**
* Sets the resource key associated with the page caption.
* @param resourceKey the resource key
*/
public void setCaptionResourceKey(String resourceKey) {
_captionResourceKey = Val.chkStr(resourceKey);
}
/**
* Gets tab id.
* @return tab id
*/
public String getTabId() {
return _tabId;
}
/**
* Sets tab id.
* @param tabId tab id
*/
public void setTabId(String tabId) {
_tabId = Val.chkStr(tabId);
}
/**
* Gets the Faces context broker.
* @return the Faces context broker
*/
private FacesContextBroker getContextBroker() {
return _contextBroker;
}
/**
* Gets the context path.
* @return the context path
*/
public String getContextPath() {
return this.getContextBroker().getExternalContext().getRequestContextPath();
}
/**
* Gets application configuration.
* @return application configuration
*/
public ApplicationConfiguration getApplicationConfiguration() {
return getContextBroker().extractRequestContext().getApplicationConfiguration();
}
/**
* Gets the supported identity functions.
* @return the supported identity functions
*/
public IdentitySupport getIdentitySupport() {
return getApplicationConfiguration().getIdentityConfiguration().getSupportedFunctions();
}
/**
* Gets language code (lowercase).
* @return language 2-letter code
*/
public String getLanguage() {
Locale locale = getContextBroker().extractHttpServletRequest().getLocale();
if (locale==null) {
locale = Locale.ENGLISH;
}
return locale.getLanguage();
}
/**
* Gets the menu link style map.
* @return the menu link style map
*/
public MenuStyleMap getMenuStyleMap() {
return new MenuStyleMap(getPageId());
}
/**
* Gets the page id.
* @return the page id
*/
public String getPageId() {
return _pageId;
}
/**
* Sets the page id.
* @param id the page id
*/
public void setPageId(String id) {
_pageId = Val.chkStr(id);
}
/**
* Gets resource message associated with a key.
* @return the resource message
*/
public String getResourceMessage(String resourceKey) {
MessageBroker broker = getContextBroker().extractMessageBroker();
return broker.retrieveMessage(resourceKey);
}
/**
* Gets the role map associated with the active user.
* @return the role map
*/
public RoleMap getRoleMap() {
if (_roleMap == null) {
_roleMap = new RoleMap(getUser());
}
return _roleMap;
}
/**
* Gets the site title.
* @return the site title
*/
public String getSiteTitle() {
return this.getResourceMessage("catalog.site.title");
}
/**
* Gets the menu link style map.
* @return the menu link style map
*/
public TabStyleMap getTabStyleMap() {
return new TabStyleMap(getTabId(),getPageId());
}
/**
* Gets the toc collection map.
* @return the toc collection map
*/
public TocsByKey getTocsByKey() {
if (this._tocsByKey == null) {
this._tocsByKey = new TocsByKey(getApplicationConfiguration().getCatalogConfiguration().getConfiguredTocs());
}
return _tocsByKey;
}
/**
* Gets the user associated with the active request.
* @return the user
*/
public User getUser() {
return getContextBroker().extractRequestContext().getUser();
}
/**
* Gets the application version.
* @return the application version
*/
public String getVersion() {
return getContextBroker().extractRequestContext().getApplicationConfiguration().getVersion();
}
/**
* Gets the welcome message.
* @return the site title
*/
public String getWelcomeMessage() {
String sName = getUser().getName();
if (sName.length() == 0) {
return "";
} else {
String[] args = new String[1];
args[0] = sName;
MessageBroker broker = getContextBroker().extractMessageBroker();
return broker.retrieveMessage("site.welcome",args);
}
}
/**
* Gets expression used to prepare view.
* @return expression used to prepare view
*/
public String getPrepareView() {
return _prepareView;
}
/**
* Sets expression used to prepare view.
* @param prepareView expression used to prepare view
*/
public void setPrepareView(String prepareView) {
_prepareView = Val.chkStr(prepareView);
}
/**
* Checks if manage user role is enabled
* @return manageUser enabled if true
*/
public boolean isManageUser() {
RequestContext rc = getContextBroker().extractRequestContext();
UsernamePasswordCredentials upc = rc.getIdentityConfiguration().getSimpleConfiguration().getServiceAccountCredentials();
if(upc !=null) return _manageUser;
StringAttributeMap sNavParameters = rc.getCatalogConfiguration().getParameters();
if(sNavParameters.containsKey("ldap.identity.manage.userRoleEnabled")){
String hasManageUser = Val.chkStr(sNavParameters.getValue("ldap.identity.manage.userRoleEnabled"));
_manageUser = Boolean.valueOf(hasManageUser);
}
return _manageUser;
}
/**
* Sets value for manage users link
* @param _manageUser the value for manageUser
*/
public void setManageUser(boolean _manageUser) {
this._manageUser = _manageUser;
}
// methods =====================================================================
/**
* Extract the PageContext from the Faces context instance.
* @return the PageContext
*/
public static PageContext extract() {
return (new FacesContextBroker()).extractPageContext();
}
/**
* Extract the MessageBroker from the Faces context instance.
* @return the PageContext
*/
public static MessageBroker extractMessageBroker() {
return (new FacesContextBroker()).extractMessageBroker();
}
}