ErrorPageView.java 2.2 KB
package fi.codecrew.moya.web;

import java.io.PrintWriter;
import java.io.Serializable;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.Map;
import java.util.zip.CRC32;

import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;

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

import fi.codecrew.moya.HostnameFilter;

@Named
@RequestScoped
public class ErrorPageView implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// private static final long serialVersionUID = -2179309061036632342L;
	String trace;

	@Inject
	private transient FacesContext context;

	@SuppressWarnings("unused")
	private static final Logger logger = LoggerFactory.getLogger(ErrorPageView.class);

	public String getStackTrace() {

		FacesContext context = FacesContext.getCurrentInstance();
		Map requestMap = context.getExternalContext().getRequestMap();
		Throwable ex =
				(Throwable) requestMap.get("javax.servlet.error.exception");

		StringWriter sw = new StringWriter();
		PrintWriter pw = new PrintWriter(sw);
		ex.printStackTrace(pw);
		trace = sw.toString();

		return trace;

	}

	public String getStackTraceHash() {

		FacesContext context = FacesContext.getCurrentInstance();
		Map<?, ?> requestMap = context.getExternalContext().getRequestMap();
		Throwable ex = (Throwable) requestMap.get("javax.servlet.error.exception");
		CRC32 stackHash = new CRC32();
		stackHash.update(Arrays.toString(ex.getStackTrace()).getBytes());

		return "0x" + Long.toHexString(stackHash.getValue());

	}

	public String getTime() {
		String stamp = "0x" + Long.toHexString(System.currentTimeMillis());
		logger.error("Error occured at {} trail {}", stamp, getTrail());
		return stamp;
	}

	public String getTrail() {
		HttpServletRequest req = (HttpServletRequest) getContext().getExternalContext().getRequest();
		Object trail = req.getSession().getAttribute(HostnameFilter.HTTP_TRAIL_NAME);
		return trail != null ? trail.toString() : "";
	}

	public FacesContext getContext() {
		return context;
	}

	public void setContext(FacesContext context) {
		this.context = context;
	}
}