NavigationHandler.java 2.62 KB
/*
 * Copyright Codecrew Ry
 * 
 * All rights reserved.
 * 
 * This license applies to any software containing a notice placed by the 
 * copyright holder. Such software is herein referred to as the Software. 
 * This license covers modification, distribution and use of the Software. 
 * 
 * Any distribution and use in source and binary forms, with or without 
 * modification is not permitted without explicit written permission from the 
 * copyright owner. 
 * 
 * A non-exclusive royalty-free right is granted to the copyright owner of the 
 * Software to use, modify and distribute all modifications to the Software in 
 * future versions of the Software. 
 * 
 */
package fi.codecrew.moyamgmt.handler;

import java.io.IOException;
import java.io.Serializable;

import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@ConversationScoped
public class NavigationHandler implements Serializable {

	private static final long serialVersionUID = -5985927646178070598L;
	private static final Logger logger = LoggerFactory.getLogger(NavigationHandler.class);
	private String destNavi;

	@Inject
	private transient Conversation conversation;

	public void saveNavigation(String navigation)
	{
		FacesContext fcont = FacesContext.getCurrentInstance();
		HttpServletRequest req = (HttpServletRequest) fcont.getExternalContext().getRequest();

		// TODO: Parse navigation correctly
		StringBuilder viewidbuilder = new StringBuilder().append(req.getContextPath()).append(navigation);
		viewidbuilder.append(".jsf");
		saveDestination(viewidbuilder.toString());
	}

	public void saveDestination(String pageid) {
		if (conversation.isTransient()) {
			conversation.begin();
		}
		this.destNavi = pageid;
	}

	public void redirectToSaved() {
		if (destNavi == null || destNavi.isEmpty()) {
			HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
			destNavi = req.getContextPath();
		}
		redirectNavigation(destNavi);
	}

	public void redirectNavigation(String destinationUrl) {
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect(destinationUrl);
		} catch (IOException e) {
			logger.warn("Redirect failed!", e);
		}
	}

	public void forward(String navigation) {
		FacesContext fcont = FacesContext.getCurrentInstance();
		javax.faces.application.NavigationHandler navihand = fcont.getApplication().getNavigationHandler();
		navihand.handleNavigation(fcont, null, navigation);

	}

}