All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nirvana.support.services.NirvanaException.scala Maven / Gradle / Ivy

// Copyright 2014 Jun Tsai. All rights reserved.
// site: http://www.ganshane.com
package nirvana.support.services

import java.io.{PrintWriter, PrintStream}


/**
 * Nirvana整个系统异常消息
 * 异常消息编号有:
 * nirvana-support             1000
 * nirvana-core                2000
 * nirvana-cloud               3000
 * nirvana-jni                 4000
 * nirvana-rpc                 5000
 * nirvana-matcher.acker       6100
 * nirvana-matcher.merger      6200
 * nirvana-matcher.processor   6300
 * nirvana-matcher.spout       6400
 * nirvana-matcher.sync        6500
 * nirvana-storage.api         7100
 * nirvana-storage.meta        7200
 * nirvana-storage.node        7300
 * @author jcai
 */
object NirvanaException{
    def wrap(exception:Throwable, errorCode:ErrorCode,message:String):NirvanaException={
      if (exception.isInstanceOf[NirvanaException]) {
        val me = exception.asInstanceOf[NirvanaException]
        if (errorCode != null && errorCode != me.errorCode) {
          return new NirvanaException(message, exception, errorCode);
        }
        me
      } else {
        new NirvanaException(message, exception, errorCode)
      }
    }
    def wrap(exception:Throwable, errorCode:ErrorCode):NirvanaException={
      wrap(exception,errorCode,exception.getMessage);
    }
    def wrap(exception:Throwable):NirvanaException = wrap(exception, null)
}

class NirvanaException(message:String,cause:Throwable,val errorCode:ErrorCode) extends RuntimeException(message,cause){
    def this(errorCode:ErrorCode)=this(null,null,errorCode)
    def this(message:String, errorCode:ErrorCode)=this(message,null,errorCode)
    def this(cause:Throwable, errorCode:ErrorCode )=this(null,cause,errorCode)
    override def printStackTrace(s:PrintStream){
        s.synchronized{
            printStackTrace(new PrintWriter(s))
        }
    }

    override def printStackTrace(s:PrintWriter) {
        s.synchronized{
            s.println(this)
            getStackTrace.foreach{trace=>
                s.println("\tat " + trace)
            }
            if (cause != null) {
                cause.printStackTrace(s)
            }
            s.flush()
        }
    }

    override def toString={
        val sb  = new StringBuilder
        if(errorCode != null){
            sb.append("nirvana-").append(errorCode.code).append(":")
            sb.append(errorCode.toString).append(" ")
        }else{
            sb.append("nirvana-0000 UNKNOWN ")
        }
        if(message != null){sb.append(message)}
        if(cause!=null){sb.append(" -> ").append(cause)}

        sb.toString()
    }

}

abstract class ErrorCode(val code:Int)




© 2015 - 2025 Weber Informatics LLC | Privacy Policy