/********************************************************************************* * The contents of this file are subject to the Common Public Attribution * License Version 1.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.openemm.org/cpal1.html. The License is based on the Mozilla * Public License Version 1.1 but Sections 14 and 15 have been added to cover * use of software over a computer network and provide for limited attribution * for the Original Developer. In addition, Exhibit A has been modified to be * consistent with Exhibit B. * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License. * * The Original Code is OpenEMM. * The Original Developer is the Initial Developer. * The Initial Developer of the Original Code is AGNITAS AG. All portions of * the code written by AGNITAS AG are Copyright (c) 2007 AGNITAS AG. All Rights * Reserved. * * Contributor(s): AGNITAS AG. ********************************************************************************/ package org.agnitas.util; import javax.servlet.ServletException; import java.io.PrintStream; import java.io.PrintWriter; import java.text.MessageFormat; import java.util.Enumeration; import java.util.Locale; import java.util.Properties; import java.util.PropertyResourceBundle; import java.util.ResourceBundle; import java.util.StringTokenizer; public class ExceptionProperties extends Properties { private static final long serialVersionUID = 2335686698133734099L; private Throwable exception; private void load(Class cl) { Class prev=cl.getSuperclass(); if(prev != null) load(prev); try { ResourceBundle res=PropertyResourceBundle.getBundle("exceptions."+cl.getName(), Locale.GERMAN); Enumeration keys=res.getKeys(); while(keys.hasMoreElements()) { String name=(String) keys.nextElement(); setProperty(name,res.getString(name)); } } catch(Exception e) { ; } } public ExceptionProperties(Exception e) { exception=e; if(e instanceof ServletException) { Throwable sub=((ServletException) e).getRootCause(); if(sub != null) exception=sub; } String message=exception.getMessage(); if(message == null) message = ""; StringTokenizer msg=new StringTokenizer(message,"$"); load(exception.getClass()); if(msg.hasMoreTokens()) { Object[] obj={ null,null,null,null,null, null,null,null,null,null }; String id=msg.nextToken(); String ret=getProperty(id); if(ret == null) ret=id; for(int c=0;c < 10 && msg.hasMoreTokens();c++) obj[c]=msg.nextElement(); AgnUtils.logger().info("ret: "+ret+" Obj: "+obj); setProperty("Message",MessageFormat.format(ret,obj)); if((ret=getProperty(id+".Solution")) != null) setProperty("Solution",ret); } else setProperty("Message",message); } public void printStackTrace(PrintWriter dst) { exception.printStackTrace(dst); } public void printStackTrace(PrintStream dst) { exception.printStackTrace(dst); } }