mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
Moving to root below branch label
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2005 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
159
source/java/org/alfresco/web/app/AlfrescoNavigationHandler.java
Normal file
159
source/java/org/alfresco/web/app/AlfrescoNavigationHandler.java
Normal file
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
* Copyright (C) 2005 Alfresco, Inc.
|
||||
*
|
||||
* Licensed under 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.gnu.org/licenses/lgpl.txt
|
||||
*
|
||||
* 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 org.alfresco.web.app;
|
||||
|
||||
import javax.faces.application.NavigationHandler;
|
||||
import javax.faces.application.ViewHandler;
|
||||
import javax.faces.component.UIViewRoot;
|
||||
import javax.faces.context.FacesContext;
|
||||
|
||||
import org.alfresco.config.Config;
|
||||
import org.alfresco.config.ConfigService;
|
||||
import org.alfresco.web.bean.NavigationBean;
|
||||
import org.alfresco.web.bean.repository.Node;
|
||||
import org.alfresco.web.config.NavigationConfigElement;
|
||||
import org.alfresco.web.config.NavigationElementReader;
|
||||
import org.alfresco.web.config.NavigationResult;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.web.jsf.FacesContextUtils;
|
||||
|
||||
/**
|
||||
* @author gavinc
|
||||
*/
|
||||
public class AlfrescoNavigationHandler extends NavigationHandler
|
||||
{
|
||||
private final static Log logger = LogFactory.getLog(AlfrescoNavigationHandler.class);
|
||||
|
||||
// The original navigation handler
|
||||
private NavigationHandler origHandler;
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*
|
||||
* @param origHandler The original navigation handler
|
||||
*/
|
||||
public AlfrescoNavigationHandler(NavigationHandler origHandler)
|
||||
{
|
||||
super();
|
||||
this.origHandler = origHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see javax.faces.application.NavigationHandler#handleNavigation(javax.faces.context.FacesContext, java.lang.String, java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void handleNavigation(FacesContext context, String fromAction, String outcome)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("handleNavigation (fromAction=" + fromAction + ", outcome=" + outcome + ")");
|
||||
|
||||
boolean useOriginalNavHandler = true;
|
||||
String finalOutcome = outcome;
|
||||
String viewId = context.getViewRoot().getViewId();
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Current view id: " + viewId);
|
||||
|
||||
NavigationBean navBean = (NavigationBean)context.getExternalContext().
|
||||
getSessionMap().get("NavigationBean");
|
||||
|
||||
// only continue if we have some dispatching context
|
||||
if (navBean != null && navBean.getDispatchContextNode() != null)
|
||||
{
|
||||
Node node = navBean.getDispatchContextNode();
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Found node in dispatch context: " + node);
|
||||
|
||||
// see if there is any navigation config for the node type
|
||||
ConfigService configSvc = (ConfigService)FacesContextUtils.getRequiredWebApplicationContext(
|
||||
context).getBean(Application.BEAN_CONFIG_SERVICE);
|
||||
|
||||
Config nodeConfig = configSvc.getConfig(node);
|
||||
NavigationConfigElement navigationCfg = (NavigationConfigElement)nodeConfig.
|
||||
getConfigElement(NavigationElementReader.ELEMENT_NAVIGATION);
|
||||
|
||||
if (navigationCfg != null)
|
||||
{
|
||||
// see if there is config for the current view state
|
||||
NavigationResult navResult = navigationCfg.getOverride(viewId, outcome);
|
||||
|
||||
if (navResult != null)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Found navigation config: " + navResult);
|
||||
|
||||
if (navResult.isOutcome())
|
||||
{
|
||||
finalOutcome = navResult.getResult();
|
||||
}
|
||||
else
|
||||
{
|
||||
String newViewId = navResult.getResult();
|
||||
|
||||
if (newViewId.equals(viewId) == false)
|
||||
{
|
||||
useOriginalNavHandler = false;
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Dispatching to new view id: " + newViewId);
|
||||
|
||||
ViewHandler viewHandler = context.getApplication().getViewHandler();
|
||||
UIViewRoot viewRoot = viewHandler.createView(context, newViewId);
|
||||
viewRoot.setViewId(newViewId);
|
||||
context.setViewRoot(viewRoot);
|
||||
context.renderResponse();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("New view id is the same as the current one so setting outcome to null");
|
||||
|
||||
finalOutcome = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("No override configuration found for current view or outcome");
|
||||
}
|
||||
}
|
||||
else if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("No navigation configuration found for node");
|
||||
}
|
||||
|
||||
// reset the dispatch context
|
||||
navBean.resetDispatchContext();
|
||||
}
|
||||
else if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("No dispatch context found");
|
||||
}
|
||||
|
||||
// do the appropriate navigation handling
|
||||
if (useOriginalNavHandler)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Passing outcome '" + finalOutcome + "' to original navigation handler");
|
||||
|
||||
this.origHandler.handleNavigation(context, fromAction, finalOutcome);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user