PDepend\Report\Jdepend\Chart::close PHP Метод

close() публичный Метод

Closes the logger process and writes the output file.
public close ( ) : void
Результат void
    public function close()
    {
        // Check for configured log file
        if ($this->logFile === null) {
            throw new NoLogOutputException($this);
        }
        $bias = 0.1;
        $svg = new \DOMDocument('1.0', 'UTF-8');
        $svg->loadXML(file_get_contents(dirname(__FILE__) . '/chart.svg'));
        $layer = $svg->getElementById('jdepend.layer');
        $bad = $svg->getElementById('jdepend.bad');
        $bad->removeAttribute('xml:id');
        $good = $svg->getElementById('jdepend.good');
        $good->removeAttribute('xml:id');
        $legendTemplate = $svg->getElementById('jdepend.legend');
        $legendTemplate->removeAttribute('xml:id');
        $max = 0;
        $min = 0;
        $items = array();
        foreach ($this->code as $namespace) {
            if (!$namespace->isUserDefined()) {
                continue;
            }
            $metrics = $this->analyzer->getStats($namespace);
            if (count($metrics) === 0) {
                continue;
            }
            $size = $metrics['cc'] + $metrics['ac'];
            if ($size > $max) {
                $max = $size;
            } elseif ($min === 0 || $size < $min) {
                $min = $size;
            }
            $items[] = array('size' => $size, 'abstraction' => $metrics['a'], 'instability' => $metrics['i'], 'distance' => $metrics['d'], 'name' => Utf8Util::ensureEncoding($namespace->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->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->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 = FileUtil::getSysTempDir();
        $temp .= '/' . uniqid('pdepend_') . '.svg';
        $svg->save($temp);
        ImageConvert::convert($temp, $this->logFile);
        // Remove temp file
        unlink($temp);
    }

Usage Example

 /**
  * Tests that the logger generates an image file.
  *
  * @return void
  */
 public function testGeneratesImageFile()
 {
     if (extension_loaded('imagick') === false) {
         $this->markTestSkipped('No pecl/imagick extension.');
     }
     $fileName = self::createRunResourceURI('jdepend-test-out.png');
     if (file_exists($fileName)) {
         unlink($fileName);
     }
     $nodes = new ASTArtifactList($this->_createPackages(true, true));
     $analyzer = new DependencyAnalyzer();
     $analyzer->analyze($nodes);
     $logger = new Chart();
     $logger->setLogFile($fileName);
     $logger->setArtifacts($nodes);
     $logger->log($analyzer);
     $this->assertFileNotExists($fileName);
     $logger->close();
     $this->assertFileExists($fileName);
     $info = getimagesize($fileName);
     $this->assertEquals(390, $info[0]);
     $this->assertEquals(250, $info[1]);
     $this->assertEquals('image/png', $info['mime']);
     unlink($fileName);
 }