diff options
Diffstat (limited to 'apps/files_external/3rdparty/irodsphp/prods/src/RODSException.class.php')
-rw-r--r-- | apps/files_external/3rdparty/irodsphp/prods/src/RODSException.class.php | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/apps/files_external/3rdparty/irodsphp/prods/src/RODSException.class.php b/apps/files_external/3rdparty/irodsphp/prods/src/RODSException.class.php new file mode 100644 index 00000000000..52eb95bbfb5 --- /dev/null +++ b/apps/files_external/3rdparty/irodsphp/prods/src/RODSException.class.php @@ -0,0 +1,184 @@ +<?php +/** + * RODS exception class + * @author Sifang Lu <sifang@sdsc.edu> + * @copyright Copyright © 2007, TBD + * @package Prods + */ + +$errtable_file = dirname(__FILE__) . "/RodsErrorTable.inc.php"; + +if (is_readable($errtable_file)) + require_once($errtable_file); +else + die("Could not read file $errtable_file <br/>\n"); + +/** + * custom exception class for RODS + */ +class RODSException extends Exception +{ + private $code_abbr; + private $cause; + + /** + * Makes a new RODS excption + * @param string $message err/exception message + * @param string $code_abbr error code abbreviation + */ + public function __construct($message, $code_abbr = "UNKNOWN_PRODS_ERR", + Exception $cause = NULL) + { + $this->code_abbr = $code_abbr; + $this->cause = $cause; + + parent::__construct($message, $GLOBALS['PRODS_ERR_CODES'][$code_abbr]); + } + + public function getCause() + { + return $this->cause; + } + + public function getCodeAbbr() + { + return $this->code_abbr; + } + + public static function rodsErrCodeToAbbr($code) + { + if (isset($GLOBALS['PRODS_ERR_CODES_REV']["$code"])) + return $GLOBALS['PRODS_ERR_CODES_REV']["$code"]; + else + return null; + } + + public static function rodsErrAbbrToCode($codeabbr) + { + if (isset($GLOBALS['PRODS_ERR_CODES']["$codeabbr"])) + return $GLOBALS['PRODS_ERR_CODES']["$codeabbr"]; + else + return null; + } + + public function getStackTrace() + { + if ($this->cause !== null) { + $arr = array(); + $trace = $this->getTrace(); + array_push($arr, $trace[0]); + unset($trace); + if (get_class($this->cause) == "RODSException") { + foreach ($this->cause->getStackTrace() as $key => $trace) { + array_push($arr, $trace); + } + } else { + foreach ($this->cause->getTrace() as $key => $trace) { + array_push($arr, $trace); + } + } + return $arr; + } else { + return $this->getTrace(); + } + } + + public function showStackTrace() + { + $htmldoc = "<p style=\"font-family: monospace; border: solid 1px #000000\"><span style=\"font-weight: bold; color: #000000;\">An exception was thrown :<br/></span>"; + $htmldoc .= "Exception code : $this->code<br/>"; + $htmldoc .= "Exception abbr : $this->code_abbr<br/>"; + $htmldoc .= "Exception message : $this->message<br/>"; + $htmldoc .= "<span style=\"color: #0000FF;\">"; + $i = 0; + foreach ($this->getStackTrace() as $key => $trace) { + $htmldoc .= $this->showTrace($trace, $i); + $i++; + } + $htmldoc .= "#$i {main}<br/>"; + unset($i); + $htmldoc .= "</span></p>"; + return $htmldoc; + } + + private function showTrace($_trace, $_i) + { + $htmldoc = "#$_i "; + if (array_key_exists("file", $_trace)) { + $htmldoc .= $_trace["file"]; + } + if (array_key_exists("line", $_trace)) { + $htmldoc .= "(" . $_trace["line"] . "): "; + } + if (array_key_exists("class", $_trace) && array_key_exists("type", $_trace)) { + $htmldoc .= $_trace["class"] . $_trace["type"]; + } + if (array_key_exists("function", $_trace)) { + $htmldoc .= $_trace["function"] . "("; + if (array_key_exists("args", $_trace)) { + if (count($_trace["args"]) > 0) { + $args = $_trace["args"]; + $type = gettype($args[0]); + $value = $args[0]; + unset($args); + if ($type == "boolean") { + if ($value) { + $htmldoc .= "true"; + } else { + $htmldoc .= "false"; + } + } elseif ($type == "integer" || $type == "double") { + if (settype($value, "string")) { + if (strlen($value) <= 20) { + $htmldoc .= $value; + } else { + $htmldoc .= substr($value, 0, 17) . "..."; + } + } else { + if ($type == "integer") { + $htmldoc .= "? integer ?"; + } else { + $htmldoc .= "? double or float ?"; + } + } + } elseif ($type == "string") { + if (strlen($value) <= 18) { + $htmldoc .= "'$value'"; + } else { + $htmldoc .= "'" . substr($value, 0, 15) . "...'"; + } + } elseif ($type == "array") { + $htmldoc .= "Array"; + } elseif ($type == "object") { + $htmldoc .= "Object"; + } elseif ($type == "resource") { + $htmldoc .= "Resource"; + } elseif ($type == "NULL") { + $htmldoc .= "null"; + } elseif ($type == "unknown type") { + $htmldoc .= "? unknown type ?"; + } + unset($type); + unset($value); + } + if (count($_trace["args"]) > 1) { + $htmldoc .= ",..."; + } + } + $htmldoc .= ")<br/>"; + } + return $htmldoc; + } + + /** + * Magic function to turn exception obj to a string + */ + public function __toString() + { + return __CLASS__ . ": [{$this->code} $this->code_abbr]: {$this->message}\n"; + //return $this->showStackTrace(); + } + +} + +?> |