Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pôle IS
Bundles Symfony 2
plantuml-bundle
Commits
61295671
Commit
61295671
authored
Mar 09, 2016
by
Guillaume Perréal
Browse files
Ajout d'un "FlatNamespace".
Permet de tout représenter sans afficher les boxes des namespaces.
parent
e721fb6a
Changes
13
Hide whitespace changes
Inline
Side-by-side
Command/EntitySchemaCommand.php
View file @
61295671
...
@@ -15,6 +15,7 @@ use Irstea\PlantUmlBundle\Model\Decorator\CompositeDecorator;
...
@@ -15,6 +15,7 @@ use Irstea\PlantUmlBundle\Model\Decorator\CompositeDecorator;
use
Irstea\PlantUmlBundle\Model\Decorator\FilteringDecorator
;
use
Irstea\PlantUmlBundle\Model\Decorator\FilteringDecorator
;
use
Irstea\PlantUmlBundle\Model\Decorator\InheritanceDecorator
;
use
Irstea\PlantUmlBundle\Model\Decorator\InheritanceDecorator
;
use
Irstea\PlantUmlBundle\Model\Filter\Whitelist
;
use
Irstea\PlantUmlBundle\Model\Filter\Whitelist
;
use
Irstea\PlantUmlBundle\Model\Namespace_\FlatNamespace
;
use
Irstea\PlantUmlBundle\Writer\OutputWriter
;
use
Irstea\PlantUmlBundle\Writer\OutputWriter
;
use
Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand
;
use
Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand
;
use
Symfony\Component\Console\Input\InputInterface
;
use
Symfony\Component\Console\Input\InputInterface
;
...
@@ -64,7 +65,7 @@ class EntitySchemaCommand extends ContainerAwareCommand
...
@@ -64,7 +65,7 @@ class EntitySchemaCommand extends ContainerAwareCommand
new
Whitelist
(
$classes
)
new
Whitelist
(
$classes
)
);
);
$visitor
=
new
ClassVisitor
(
$decorator
);
$visitor
=
new
ClassVisitor
(
$decorator
,
null
,
new
FlatNamespace
()
);
array_walk
(
$classes
,
[
$visitor
,
'visitClass'
]);
array_walk
(
$classes
,
[
$visitor
,
'visitClass'
]);
...
...
Model/ClassVisitor.php
View file @
61295671
...
@@ -27,7 +27,7 @@ use ReflectionClass;
...
@@ -27,7 +27,7 @@ use ReflectionClass;
class
ClassVisitor
implements
ClassVisitorInterface
,
WritableInterface
class
ClassVisitor
implements
ClassVisitorInterface
,
WritableInterface
{
{
/**
/**
* @var
Root
Namespace
* @var Namespace
Interface
*/
*/
protected
$rootNamespace
;
protected
$rootNamespace
;
...
@@ -41,11 +41,14 @@ class ClassVisitor implements ClassVisitorInterface, WritableInterface
...
@@ -41,11 +41,14 @@ class ClassVisitor implements ClassVisitorInterface, WritableInterface
*/
*/
protected
$decorator
;
protected
$decorator
;
public
function
__construct
(
DecoratorInterface
$decorator
=
null
,
ClassFilterInterface
$filter
=
null
)
public
function
__construct
(
{
DecoratorInterface
$decorator
=
null
,
$this
->
rootNamespace
=
new
RootNamespace
();
ClassFilterInterface
$filter
=
null
,
NamespaceInterface
$namespace
=
null
)
{
$this
->
filter
=
$filter
?:
AcceptAllFilter
::
instance
();
$this
->
filter
=
$filter
?:
AcceptAllFilter
::
instance
();
$this
->
decorator
=
$decorator
?:
NullDecorator
::
instance
();
$this
->
decorator
=
$decorator
?:
NullDecorator
::
instance
();
$this
->
rootNamespace
=
$namespace
?:
new
RootNamespace
();
}
}
/**
/**
...
@@ -98,15 +101,20 @@ class ClassVisitor implements ClassVisitorInterface, WritableInterface
...
@@ -98,15 +101,20 @@ class ClassVisitor implements ClassVisitorInterface, WritableInterface
*/
*/
protected
function
createNode
(
NamespaceInterface
$namespace
,
ReflectionClass
$class
)
protected
function
createNode
(
NamespaceInterface
$namespace
,
ReflectionClass
$class
)
{
{
$className
=
$class
->
getName
();
$id
=
str_replace
(
'\\'
,
'.'
,
$className
)
.
'_node'
;
$label
=
$namespace
->
getShortName
(
$className
);
if
(
$class
->
isTrait
())
{
if
(
$class
->
isTrait
())
{
return
new
Trait_
(
$namespace
,
$
class
->
getName
()
);
return
new
Trait_
(
$namespace
,
$
id
,
$label
);
}
}
if
(
$class
->
isInterface
())
{
if
(
$class
->
isInterface
())
{
return
new
Interface_
(
$namespace
,
$class
->
getName
());
return
new
Interface_
(
$namespace
,
$id
,
$label
,
$class
->
getName
());
}
}
return
new
Class_
(
$namespace
,
$
class
->
getName
()
,
$class
->
isAbstract
(),
$class
->
isFinal
());
return
new
Class_
(
$namespace
,
$
id
,
$label
,
$class
->
isAbstract
(),
$class
->
isFinal
());
}
}
public
function
outputTo
(
WriterInterface
$writer
)
public
function
outputTo
(
WriterInterface
$writer
)
...
...
Model/NamespaceInterface.php
View file @
61295671
...
@@ -22,6 +22,12 @@ interface NamespaceInterface extends WritableInterface
...
@@ -22,6 +22,12 @@ interface NamespaceInterface extends WritableInterface
*/
*/
public
function
getNamespace
(
$namespaceName
);
public
function
getNamespace
(
$namespaceName
);
/**
* @param string $name
* @return string
*/
public
function
getShortName
(
$name
);
/**
/**
* @param NodeInterface $node
* @param NodeInterface $node
* @return self
* @return self
...
...
Model/Namespace_/AbstractHierachicalNamespace.php
0 → 100644
View file @
61295671
<?php
/*
* © 2016 IRSTEA
* Guillaume Perréal <guillaume.perreal@irstea.fr>
* Tous droits réservés.
*/
namespace
Irstea\PlantUmlBundle\Model\Namespace_
;
use
Irstea\PlantUmlBundle\Model\NamespaceInterface
;
use
Irstea\PlantUmlBundle\Model\NodeInterface
;
use
Irstea\PlantUmlBundle\Writer\WritableInterface
;
use
Irstea\PlantUmlBundle\Writer\WriterInterface
;
/**
* Description of Namespace
*
* @author Guillaume Perréal <guillaume.perreal@irstea.fr>
*/
abstract
class
AbstractHierachicalNamespace
extends
AbstractNamespace
{
/**
* @var NamespaceInterface
*/
private
$children
=
[];
/**
* @param type $namespaceName
* @return NamespaceInterface
*/
public
function
getNamespace
(
$namespaceName
)
{
$namespaceName
=
trim
(
$namespaceName
,
'\\'
);
if
(
!
$namespaceName
)
{
return
$this
;
}
@
list
(
$head
,
$tail
)
=
explode
(
'\\'
,
$namespaceName
,
2
);
if
(
!
isset
(
$this
->
children
[
$head
]))
{
$this
->
children
[
$head
]
=
new
Namespace_
(
$this
,
$head
);
}
if
(
empty
(
$tail
))
{
return
$this
->
children
[
$head
];
}
return
$this
->
children
[
$head
]
->
getNamespace
(
$tail
);
}
/**
* @return $string
*/
abstract
protected
function
getNamespacePrefix
();
public
function
getShortName
(
$name
)
{
$prefix
=
$this
->
getNamespacePrefix
();
if
(
0
===
strpos
(
$name
,
$prefix
))
{
return
substr
(
$name
,
strlen
(
$prefix
));
}
return
$name
;
}
/**
* @param WriterInterface $writer
* @return self
*/
protected
function
outputChildrenTo
(
WriterInterface
$writer
)
{
foreach
(
$this
->
children
as
$child
)
{
$child
->
outputTo
(
$writer
);
}
return
$this
;
}
/**
* @return bool
*/
protected
function
isEmpty
()
{
return
parent
::
isEmpty
()
&&
empty
(
$this
->
children
);
}
}
Model/Namespace_/AbstractNamespace.php
View file @
61295671
...
@@ -25,11 +25,6 @@ abstract class AbstractNamespace implements WritableInterface, NamespaceInterfac
...
@@ -25,11 +25,6 @@ abstract class AbstractNamespace implements WritableInterface, NamespaceInterfac
*/
*/
private
$nodes
=
[];
private
$nodes
=
[];
/**
* @var NamespaceInterface
*/
private
$children
=
[];
/**
/**
*
*
* @param NodeInterface $node
* @param NodeInterface $node
...
@@ -40,26 +35,6 @@ abstract class AbstractNamespace implements WritableInterface, NamespaceInterfac
...
@@ -40,26 +35,6 @@ abstract class AbstractNamespace implements WritableInterface, NamespaceInterfac
return
$this
;
return
$this
;
}
}
/**
* @param type $namespaceName
* @return NamespaceInterface
*/
public
function
getNamespace
(
$namespaceName
)
{
$namespaceName
=
trim
(
$namespaceName
,
'\\'
);
if
(
!
$namespaceName
)
{
return
$this
;
}
@
list
(
$head
,
$tail
)
=
explode
(
'\\'
,
$namespaceName
,
2
);
if
(
!
isset
(
$this
->
children
[
$head
]))
{
$this
->
children
[
$head
]
=
new
Namespace_
(
$this
,
$head
);
}
if
(
empty
(
$tail
))
{
return
$this
->
children
[
$head
];
}
return
$this
->
children
[
$head
]
->
getNamespace
(
$tail
);
}
/**
/**
* @param WriterInterface $writer
* @param WriterInterface $writer
* @return self
* @return self
...
@@ -72,23 +47,11 @@ abstract class AbstractNamespace implements WritableInterface, NamespaceInterfac
...
@@ -72,23 +47,11 @@ abstract class AbstractNamespace implements WritableInterface, NamespaceInterfac
return
$this
;
return
$this
;
}
}
/**
* @param WriterInterface $writer
* @return self
*/
protected
function
outputChildrenTo
(
WriterInterface
$writer
)
{
foreach
(
$this
->
children
as
$child
)
{
$child
->
outputTo
(
$writer
);
}
return
$this
;
}
/**
/**
* @return bool
* @return bool
*/
*/
protected
function
isEmpty
()
protected
function
isEmpty
()
{
{
return
empty
(
$this
->
children
)
&&
empty
(
$this
->
nodes
);
return
empty
(
$this
->
nodes
);
}
}
}
}
Model/Namespace_/FlatNamespace.php
0 → 100644
View file @
61295671
<?php
/*
* © 2016 IRSTEA
* Guillaume Perréal <guillaume.perreal@irstea.fr>
* Tous droits réservés.
*/
namespace
Irstea\PlantUmlBundle\Model\Namespace_
;
use
Irstea\PlantUmlBundle\Model\ArrowInterface
;
use
Irstea\PlantUmlBundle\Writer\WriterInterface
;
/**
* Description of RootNamespace
*
* @author Guillaume Perréal <guillaume.perreal@irstea.fr>
*/
class
FlatNamespace
extends
AbstractNamespace
{
/**
* @var ArrowInterface[]
*/
private
$arrows
=
[];
public
function
addArrow
(
ArrowInterface
$arrow
)
{
$this
->
arrows
[]
=
$arrow
;
return
$this
;
}
public
function
outputTo
(
WriterInterface
$writer
)
{
$writer
->
write
(
"set namespaceSeparator none
\n
"
);
$this
->
outputNodesTo
(
$writer
)
->
outputArrowsTo
(
$writer
);
return
$this
;
}
protected
function
outputArrowsTo
(
WriterInterface
$writer
)
{
foreach
(
$this
->
arrows
as
$arrow
)
{
$arrow
->
outputTo
(
$writer
);
}
return
$this
;
}
public
function
getNamespace
(
$namespaceName
)
{
return
$this
;
}
public
function
getShortName
(
$name
)
{
return
$name
;
}
}
Model/Namespace_/Namespace_.php
View file @
61295671
...
@@ -17,10 +17,10 @@ use Irstea\PlantUmlBundle\Writer\WriterInterface;
...
@@ -17,10 +17,10 @@ use Irstea\PlantUmlBundle\Writer\WriterInterface;
*
*
* @author Guillaume Perréal <guillaume.perreal@irstea.fr>
* @author Guillaume Perréal <guillaume.perreal@irstea.fr>
*/
*/
class
Namespace_
extends
AbstractNamespace
class
Namespace_
extends
Abstract
Hierachical
Namespace
{
{
/**
/**
* @var Namespace
Interface
* @var
Abstract
Namespace
*/
*/
private
$parent
;
private
$parent
;
...
@@ -29,13 +29,13 @@ class Namespace_ extends AbstractNamespace
...
@@ -29,13 +29,13 @@ class Namespace_ extends AbstractNamespace
*/
*/
private
$name
;
private
$name
;
public
function
__construct
(
NamespaceInterf
ace
$parent
,
$name
)
public
function
__construct
(
AbstractHierachicalNamesp
ace
$parent
,
$name
)
{
{
$this
->
parent
=
$parent
;
$this
->
parent
=
$parent
;
$this
->
name
=
$name
;
$this
->
name
=
$name
;
}
}
/**
/**
* @param ArrowInterface $arrow
* @param ArrowInterface $arrow
* @return self
* @return self
*/
*/
...
@@ -46,6 +46,14 @@ class Namespace_ extends AbstractNamespace
...
@@ -46,6 +46,14 @@ class Namespace_ extends AbstractNamespace
}
}
/**
/**
* @return string
*/
protected
function
getNamespacePrefix
()
{
return
$this
->
parent
->
getNamespacePrefix
()
.
$this
->
name
.
'\\'
;
}
/**
* @param resource WriterInterface $writer
* @param resource WriterInterface $writer
* @return self
* @return self
*/
*/
...
...
Model/Namespace_/RootNamespace.php
View file @
61295671
...
@@ -16,7 +16,7 @@ use Irstea\PlantUmlBundle\Writer\WriterInterface;
...
@@ -16,7 +16,7 @@ use Irstea\PlantUmlBundle\Writer\WriterInterface;
*
*
* @author Guillaume Perréal <guillaume.perreal@irstea.fr>
* @author Guillaume Perréal <guillaume.perreal@irstea.fr>
*/
*/
class
RootNamespace
extends
AbstractNamespace
class
RootNamespace
extends
Abstract
Hierachical
Namespace
{
{
/**
/**
* @var ArrowInterface[]
* @var ArrowInterface[]
...
@@ -31,6 +31,7 @@ class RootNamespace extends AbstractNamespace
...
@@ -31,6 +31,7 @@ class RootNamespace extends AbstractNamespace
public
function
outputTo
(
WriterInterface
$writer
)
public
function
outputTo
(
WriterInterface
$writer
)
{
{
$writer
->
write
(
"set namespaceSeparator .
\n
"
);
$this
$this
->
outputNodesTo
(
$writer
)
->
outputNodesTo
(
$writer
)
->
outputChildrenTo
(
$writer
)
->
outputChildrenTo
(
$writer
)
...
@@ -45,4 +46,9 @@ class RootNamespace extends AbstractNamespace
...
@@ -45,4 +46,9 @@ class RootNamespace extends AbstractNamespace
}
}
return
$this
;
return
$this
;
}
}
protected
function
getNamespacePrefix
()
{
return
""
;
}
}
}
Model/Node/BaseNode.php
View file @
61295671
...
@@ -23,12 +23,12 @@ class BaseNode implements NodeInterface
...
@@ -23,12 +23,12 @@ class BaseNode implements NodeInterface
/**
/**
* @var string
* @var string
*/
*/
private
$
name
;
private
$
label
;
/**
/**
* @var string
* @var string
*/
*/
private
$
alias
;
private
$
id
;
/**
/**
* @var string
* @var string
...
@@ -52,18 +52,17 @@ class BaseNode implements NodeInterface
...
@@ -52,18 +52,17 @@ class BaseNode implements NodeInterface
/**
/**
* @param NamespaceInterface $namespace
* @param NamespaceInterface $namespace
* @param string $name
* @param string $id
* @param string $label
* @param string $nodeType
* @param string $nodeType
* @param array $classifiers
* @param array $classifiers
* @param array $stereotypes
* @param array $stereotypes
*/
*/
function
__construct
(
NamespaceInterface
$namespace
,
$
name
,
$nodeType
,
array
$classifiers
=
[],
array
$stereotypes
=
[])
function
__construct
(
NamespaceInterface
$namespace
,
$
id
,
$label
,
$nodeType
,
array
$classifiers
=
[],
array
$stereotypes
=
[])
{
{
$this
->
namespace
=
$namespace
;
$this
->
namespace
=
$namespace
;
$this
->
id
=
$id
;
$pos
=
strrpos
(
$name
,
'\\'
);
$this
->
label
=
$label
;
$this
->
name
=
substr
(
$name
,
$pos
+
1
);
$this
->
alias
=
str_replace
(
'\\'
,
'.'
,
$name
)
.
"_node"
;
$this
->
nodeType
=
$nodeType
;
$this
->
nodeType
=
$nodeType
;
$this
->
classifiers
=
$classifiers
;
$this
->
classifiers
=
$classifiers
;
...
@@ -82,12 +81,18 @@ class BaseNode implements NodeInterface
...
@@ -82,12 +81,18 @@ class BaseNode implements NodeInterface
return
$this
;
return
$this
;
}
}
public
function
setLabel
(
$label
)
{
$this
->
label
=
$label
;
return
$this
;
}
public
function
outputTo
(
WriterInterface
$writer
)
public
function
outputTo
(
WriterInterface
$writer
)
{
{
$this
$this
->
outputClassifiersTo
(
$writer
)
->
outputClassifiersTo
(
$writer
)
->
outputNodeTypeTo
(
$writer
);
->
outputNodeTypeTo
(
$writer
);
$writer
->
printf
(
'"%s" as %s'
,
$this
->
name
,
$this
->
alias
);
$writer
->
printf
(
'"%s" as %s'
,
$this
->
label
,
$this
->
id
);
$this
$this
->
outputStereotypesTo
(
$writer
);
->
outputStereotypesTo
(
$writer
);
$writer
$writer
...
@@ -104,7 +109,7 @@ class BaseNode implements NodeInterface
...
@@ -104,7 +109,7 @@ class BaseNode implements NodeInterface
public
function
outputAliasTo
(
WriterInterface
$writer
)
public
function
outputAliasTo
(
WriterInterface
$writer
)
{
{
$writer
->
write
(
$this
->
alias
);
$writer
->
write
(
$this
->
id
);
return
$this
;
return
$this
;
}
}
...
...
Model/Node/Class_.php
View file @
61295671
...
@@ -17,7 +17,7 @@ use Irstea\PlantUmlBundle\Model\NamespaceInterface;
...
@@ -17,7 +17,7 @@ use Irstea\PlantUmlBundle\Model\NamespaceInterface;
*/
*/
class
Class_
extends
BaseNode
class
Class_
extends
BaseNode
{
{
public
function
__construct
(
NamespaceInterface
$namespace
,
$
name
,
$isAbstract
,
$isFinal
)
public
function
__construct
(
NamespaceInterface
$namespace
,
$
id
,
$label
,
$isAbstract
,
$isFinal
)
{
{
$classifiers
=
[];
$classifiers
=
[];
if
(
$isAbstract
)
{
if
(
$isAbstract
)
{
...
@@ -25,6 +25,6 @@ class Class_ extends BaseNode
...
@@ -25,6 +25,6 @@ class Class_ extends BaseNode
}
elseif
(
$isFinal
)
{
}
elseif
(
$isFinal
)
{
$classifiers
[]
=
'final'
;
$classifiers
[]
=
'final'
;
}
}
parent
::
__construct
(
$namespace
,
$
name
,
"class"
,
$classifiers
,
[]);
parent
::
__construct
(
$namespace
,
$
id
,
$label
,
"class"
,
$classifiers
,
[]);
}
}
}
}
Model/Node/Interface_.php
View file @
61295671
...
@@ -17,8 +17,8 @@ use Irstea\PlantUmlBundle\Model\NamespaceInterface;
...
@@ -17,8 +17,8 @@ use Irstea\PlantUmlBundle\Model\NamespaceInterface;
*/
*/
class
Interface_
extends
BaseNode
class
Interface_
extends
BaseNode
{
{
public
function
__construct
(
NamespaceInterface
$namespace
,
$
name
)
public
function
__construct
(
NamespaceInterface
$namespace
,
$
id
,
$label
)
{
{
parent
::
__construct
(
$namespace
,
$
name
,
'interface'
,
[],
[]);
parent
::
__construct
(
$namespace
,
$
id
,
$label
,
'interface'
,
[],
[]);
}
}
}
}
Model/Node/Trait_.php
View file @
61295671
...
@@ -17,8 +17,8 @@ use Irstea\PlantUmlBundle\Model\NamespaceInterface;
...
@@ -17,8 +17,8 @@ use Irstea\PlantUmlBundle\Model\NamespaceInterface;
*/
*/
class
Trait_
extends
BaseNode
class
Trait_
extends
BaseNode
{
{
public
function
__construct
(
NamespaceInterface
$namespace
,
$
name
)
public
function
__construct
(
NamespaceInterface
$namespace
,
$
id
,
$label
)
{
{
parent
::
__construct
(
$namespace
,
$
name
,
'class'
,
[],
[
'trait'
]);
parent
::
__construct
(
$namespace
,
$
id
,
$label
,
'class'
,
[],
[
'trait'
]);
}
}
}
}
Model/NodeInterface.php
View file @
61295671
...
@@ -16,6 +16,12 @@ use Irstea\PlantUmlBundle\Writer\WritableNodeInterface;
...
@@ -16,6 +16,12 @@ use Irstea\PlantUmlBundle\Writer\WritableNodeInterface;
*/
*/
interface
NodeInterface
extends
WritableNodeInterface
interface
NodeInterface
extends
WritableNodeInterface
{
{
/**
* @param string $label
* @return self
*/
public
function
setLabel
(
$label
);
/**
/**
* @param ArrowInterface $arrow
* @param ArrowInterface $arrow
* @return self
* @return self
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment