Skip to content

Commit

Permalink
refactor YumlMetadataGrapher and stringGenerator + fix inheritance tree
Browse files Browse the repository at this point in the history
  • Loading branch information
Nono1971 committed Jul 24, 2016
1 parent d7595a4 commit 7f5f8b8
Show file tree
Hide file tree
Showing 15 changed files with 777 additions and 178 deletions.
4 changes: 2 additions & 2 deletions README.md
@@ -1,4 +1,4 @@
# Metagatagrapher for Yuml data preparation v 1.0
# Metagatagrapher for Yuml data preparation v 1.1

[![Build Status](https://travis-ci.org/Nono1971/Doctrine-MetadataGrapher.svg?branch=master)](https://travis-ci.org/Nono1971/Doctrine-MetadataGrapher) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/Nono1971/Doctrine-MetadataGrapher/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/Nono1971/Doctrine-MetadataGrapher/?branch=master) [![Code Coverage](https://scrutinizer-ci.com/g/Nono1971/Doctrine-MetadataGrapher/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/Nono1971/Doctrine-MetadataGrapher/?branch=master) [![Build Status](https://scrutinizer-ci.com/g/Nono1971/Doctrine-MetadataGrapher/badges/build.png?b=master)](https://scrutinizer-ci.com/g/Nono1971/Doctrine-MetadataGrapher/build-status/master) [![Latest Stable Version](https://poser.pugx.org/onurb/doctrine-metadata-grapher/v/stable)](https://packagist.org/packages/onurb/doctrine-metadata-grapher) [![Total Downloads](https://poser.pugx.org/onurb/doctrine-metadata-grapher/downloads)](https://packagist.org/packages/onurb/doctrine-metadata-grapher)

Expand All @@ -14,7 +14,7 @@ to generate visual objects mapping graphs
// ...
require: {
// ...
"onurb/doctrine-metadata-grapher": "~1.0"
"onurb/doctrine-metadata-grapher": "~1.1"
}
}
```
Expand Down
4 changes: 2 additions & 2 deletions composer.json
Expand Up @@ -14,8 +14,8 @@
"homepage": "http://www.doctrine-project.org/",
"authors": [
{
"name": "Bruno Heron",
"email": "herobrun@gmail.com"
"name": "Bruno Heron",
"email": "herobrun@gmail.com"
},
{
"name": "Marco Pivetta",
Expand Down
104 changes: 79 additions & 25 deletions lib/Onurb/Doctrine/ORMMetadataGrapher/YUMLMetadataGrapher.php
Expand Up @@ -44,8 +44,12 @@ class YUMLMetadataGrapher implements YUMLMetadataGrapherInterface
protected $stringGenerator;

/**
* Generate a yUML compatible `dsl_text` to describe a given array
* of entities
* @var array
*/
protected $str = array();

/**
* Generate a yUML compatible `dsl_text` to describe a given array of entities
*
* @param $metadata ClassMetadata[]
*
Expand All @@ -56,40 +60,90 @@ public function generateFromMetadata(array $metadata)
$this->classStore = new ClassStore($metadata);
$this->stringGenerator = new StringGenerator($this->classStore);

// $this->storeClasses($metadata);
$str = array();

foreach ($metadata as $class) {
if ($parent = $this->classStore->getParent($class)) {
$str[] = $this->stringGenerator->getClassString($parent) . '^'
. $this->stringGenerator->getClassString($class);
}
$this->writeParentAssociation($class);

$associations = $class->getAssociationNames();

if (empty($associations)
&& !isset(
$this->stringGenerator->getAssociationLogger()
->getVisitedAssociations()[$class->getName()]
)
) {
$str[] = $this->stringGenerator->getClassString($class);
if (empty($associations)) {
$this->writeSingleClass($class);
} else {
$this->writeClassAssociations($class, $associations);
}
}

return implode(',', $this->str);
}

/**
* @param ClassMetadata $class
*/
private function writeParentAssociation(ClassMetadata $class)
{
if ($parent = $this->classStore->getParent($class)) {
$this->str[] = $this->stringGenerator->getClassString($parent) . '^'
. $this->stringGenerator->getClassString($class);
}
}

/**
* @param ClassMetadata $class
*/
private function writeSingleClass(ClassMetadata $class)
{
if (!$this->stringGenerator->getAssociationLogger()->isVisitedAssociation($class->getName())) {
$this->str[] = $this->stringGenerator->getClassString($class);
}
}

/**
* @param ClassMetadata $class
* @param array $associations
*/
private function writeClassAssociations(ClassMetadata $class, $associations)
{
$inheritanceAssociations = $this->getInheritanceAssociations($class);

foreach ($associations as $associationName) {
if (in_array($associationName, $inheritanceAssociations)) {
continue;
}

foreach ($associations as $associationName) {
if ($parent && in_array($associationName, $parent->getAssociationNames())) {
continue;
}
$this->writeAssociation($class, $associationName);
}
}

if ($this->stringGenerator->getAssociationLogger()
->visitAssociation($class->getName(), $associationName)
) {
$str[] = $this->stringGenerator->getAssociationString($class, $associationName);
/**
* @param ClassMetadata $class
* @param string $association
*/
private function writeAssociation(ClassMetadata $class, $association)
{
if ($this->stringGenerator->getAssociationLogger()
->visitAssociation($class->getName(), $association)
) {
$this->str[] = $this->stringGenerator->getAssociationString($class, $association);
}
}

/**
* Recursive function to get all associations in inheritance
*
* @param ClassMetadata $class
* @param array $associations
* @return array
*/
private function getInheritanceAssociations(ClassMetadata $class, $associations = array())
{
if ($parent = $this->classStore->getParent($class)) {
foreach ($parent->getAssociationNames() as $association) {
if (!in_array($association, $associations)) {
$associations[] = $association;
}
}
$associations = $this->getInheritanceAssociations($parent, $associations);
}
return implode(',', $str);

return $associations;
}
}
Expand Up @@ -81,7 +81,7 @@ public function getParent(ClassMetadata $class)
*/
public function getClassByName($className)
{
return isset($this->metadata[$className]) && !empty($this->metadata[$className])?
$this->metadata[$className]: null;
return isset($this->metadata[$className]) && !empty($this->metadata[$className]) ?
$this->metadata[$className] : null;
}
}

0 comments on commit 7f5f8b8

Please sign in to comment.