An error occurred while loading the file. Please try again.
-
Guillaume Perréal authored23467d72
<?php
/*
* © 2016 IRSTEA
* Guillaume Perréal <guillaume.perreal@irstea.fr>
* Tous droits réservés.
*/
namespace Irstea\PlantUmlBundle\Doctrine;
use Doctrine\ORM\Mapping\ClassMetadata;
use Irstea\PlantUmlBundle\Model\Arrow\BaseArrow;
use Irstea\PlantUmlBundle\Model\ClassVisitorInterface;
use Irstea\PlantUmlBundle\Model\Node\Member\Member;
use Irstea\PlantUmlBundle\Model\NodeInterface;
use ReflectionClass;
/**
* Description of RelationDecorator
*
* @author Guillaume Perréal <guillaume.perreal@irstea.fr>
*/
class AssociationDecorator extends AbstractDoctrineDecorator
{
use \Irstea\PlantUmlBundle\Model\Decorator\InheritableItemDecoratorTrait;
protected function extractItems(ReflectionClass $class)
{
return $this->withMetadata(
function ($metadata) {
return $metadata->getAssociationMappings();
},
$class
);
}
protected function decorateItem(ReflectionClass $class, NodeInterface $node, ClassVisitorInterface $visitor, $association)
{
if (!$association['isOwningSide']) {
return;
}
$target = $visitor->visitClass($association['targetEntity']);
if ($target === false) {
$type = $association['targetEntity'];
if ($association["type"] & ClassMetadata::TO_MANY != 0) {
$type .= '[]';
}
$node->addAttribute(new Member($association['fieldName'], $type));
return;
}
$linkSource = '';
$linkTarget = ">";
if ($association["isCascadeRemove"]) {
$linkSource = "o";
}
$sourceCardinality = "";
$targetCardinality = "";
switch($association["type"]) {
case ClassMetadata::ONE_TO_ONE:
$sourceCardinality = '1';
$targetCardinality = '1';
break;
case ClassMetadata::ONE_TO_MANY:
$sourceCardinality = '1';
$targetCardinality = '*';
break;
case ClassMetadata::MANY_TO_MANY:
717273747576777879808182838485
$sourceCardinality = '*';
$targetCardinality = '*';
break;
case ClassMetadata::MANY_TO_ONE:
$sourceCardinality = '*';
$targetCardinality = '1';
break;
}
$node->addArrow(
new BaseArrow($node, $target, "--", $association["fieldName"]." >", $linkSource, $linkTarget, $sourceCardinality, $targetCardinality)
);
}
}