Exemplo n.º 1
0
 /**
  * Closes the logger process and writes the output file.
  *
  * @return void
  */
 public function close()
 {
     // Check for configured log file
     if ($this->logFile === null) {
         throw new PHP_Depend_Log_NoLogOutputException($this);
     }
     $metrics = $this->collectMetrics();
     $proportions = $this->computeProportions($metrics);
     $svg = new DOMDocument('1.0', 'UTF-8');
     $svg->load(dirname(__FILE__) . '/pyramid.svg');
     $items = array_merge($metrics, $proportions);
     foreach ($items as $name => $value) {
         $svg->getElementById("pdepend.{$name}")->nodeValue = $value;
         if (($threshold = $this->computeThreshold($name, $value)) === null) {
             continue;
         }
         if (($color = $svg->getElementById("threshold.{$threshold}")) === null) {
             continue;
         }
         if (($rect = $svg->getElementById("rect.{$name}")) === null) {
             continue;
         }
         preg_match('/fill:(#[^;"]+)/', $color->getAttribute('style'), $match);
         $style = $rect->getAttribute('style');
         $style = preg_replace('/fill:#[^;"]+/', "fill:{$match[1]}", $style);
         $rect->setAttribute('style', $style);
     }
     $temp = PHP_Depend_Util_FileUtil::getSysTempDir();
     $temp .= '/' . uniqid('pdepend_') . '.svg';
     $svg->save($temp);
     PHP_Depend_Util_ImageConvert::convert($temp, $this->logFile);
     // Remove temp file
     unlink($temp);
 }
Exemplo n.º 2
0
 /**
  * Constructs a new file storage instance and calculates the root directory
  * for the file storage.
  *
  * @param string $cacheDir Optional cache directory.
  */
 public function __construct($cacheDir = null)
 {
     $this->_engineInstanceKey = strtr(microtime(), ' ', '_');
     if ($cacheDir === null) {
         $cacheDir = PHP_Depend_Util_FileUtil::getSysTempDir();
     }
     $this->_dirname = $cacheDir . '/pdepend_storage';
     // Append the user identifier on *NIX systems
     if (function_exists('posix_getuid') === true) {
         $this->_dirname .= '-' . posix_getuid();
     }
 }
Exemplo n.º 3
0
 /**
  * Closes the logger process and writes the output file.
  *
  * @return void
  * @throws PHP_Depend_Log_NoLogOutputException If the no log target exists.
  */
 public function close()
 {
     // Check for configured log file
     if ($this->logFile === null) {
         throw new PHP_Depend_Log_NoLogOutputException($this);
     }
     $bias = 0.1;
     $svg = new DOMDocument('1.0', 'UTF-8');
     $svg->load(dirname(__FILE__) . '/chart.svg');
     $bad = $svg->getElementById('jdepend.bad');
     $good = $svg->getElementById('jdepend.good');
     $layer = $svg->getElementById('jdepend.layer');
     $legendTemplate = $svg->getElementById('jdepend.legend');
     $max = 0;
     $min = 0;
     $items = array();
     foreach ($this->code as $package) {
         if (!$package->isUserDefined()) {
             continue;
         }
         $metrics = $this->analyzer->getStats($package);
         if (count($metrics) === 0) {
             continue;
         }
         $size = $metrics['cc'] + $metrics['ac'];
         if ($size > $max) {
             $max = $size;
         } else {
             if ($min === 0 || $size < $min) {
                 $min = $size;
             }
         }
         $items[] = array('size' => $size, 'abstraction' => $metrics['a'], 'instability' => $metrics['i'], 'distance' => $metrics['d'], 'name' => $package->getName());
     }
     $diff = ($max - $min) / 10;
     // Sort items by size
     usort($items, create_function('$a, $b', 'return ($a["size"] - $b["size"]);'));
     foreach ($items as $item) {
         if ($item['distance'] < $bias) {
             $ellipse = $good->cloneNode(true);
         } else {
             $ellipse = $bad->cloneNode(true);
         }
         $r = 15;
         if ($diff !== 0) {
             $r = 5 + ($item['size'] - $min) / $diff;
         }
         $a = $r / 15;
         $e = 50 - $r + $item['abstraction'] * 320;
         $f = 20 - $r + 190 - $item['instability'] * 190;
         $transform = "matrix({$a}, 0, 0, {$a}, {$e}, {$f})";
         $ellipse->removeAttribute('xml:id');
         $ellipse->setAttribute('id', uniqid('pdepend_'));
         $ellipse->setAttribute('title', $item['name']);
         $ellipse->setAttribute('transform', $transform);
         $layer->appendChild($ellipse);
         $result = preg_match('#\\\\([^\\\\]+)$#', $item['name'], $found);
         if ($result && count($found)) {
             $angle = rand(0, 314) / 100 - 1.57;
             $legend = $legendTemplate->cloneNode(true);
             $legend->removeAttribute('xml:id');
             $legend->setAttribute('x', $e + $r * (1 + cos($angle)));
             $legend->setAttribute('y', $f + $r * (1 + sin($angle)));
             $legend->nodeValue = $found[1];
             $legendTemplate->parentNode->appendChild($legend);
         }
     }
     $bad->parentNode->removeChild($bad);
     $good->parentNode->removeChild($good);
     $legendTemplate->parentNode->removeChild($legendTemplate);
     $temp = PHP_Depend_Util_FileUtil::getSysTempDir();
     $temp .= '/' . uniqid('pdepend_') . '.svg';
     $svg->save($temp);
     PHP_Depend_Util_ImageConvert::convert($temp, $this->logFile);
     // Remove temp file
     unlink($temp);
 }
Exemplo n.º 4
0
 /**
  * testGetUserHomeDirOrSysTempDirReturnsExpectedUserHomeDirectory
  *
  * @return void
  */
 public function testGetUserHomeDirOrSysTempDirReturnsExpectedUserHomeDirectory()
 {
     self::assertEquals(getenv('HOME'), PHP_Depend_Util_FileUtil::getUserHomeDirOrSysTempDir());
 }
Exemplo n.º 5
0
 /**
  * testDefaultConfigurationHasExpectedCacheLocation
  *
  * @return void
  * @group pdepend
  * @group pdepend::util
  * @group pdepend::util::configuration
  * @group unittest
  */
 public function testDefaultConfigurationHasExpectedCacheLocation()
 {
     $factory = new PHP_Depend_Util_Configuration_Factory();
     $config = $factory->createDefault();
     self::assertEquals(PHP_Depend_Util_FileUtil::getUserHomeDirOrSysTempDir() . '/.pdepend', $config->cache->location);
 }
Exemplo n.º 6
0
 /**
  * Constructs a new factory instance and initializes the default configuration.
  */
 public function __construct()
 {
     $home = PHP_Depend_Util_FileUtil::getUserHomeDirOrSysTempDir();
     $this->default = new stdClass();
     $this->default->cache = new stdClass();
     $this->default->cache->driver = 'file';
     $this->default->cache->location = $home . '/.pdepend';
     $this->default->imageConvert = new stdClass();
     $this->default->imageConvert->fontSize = '11';
     $this->default->imageConvert->fontFamily = 'Arial';
     $this->default->parser = new stdClass();
     $this->default->parser->nesting = 8192;
 }