Initial Commit
This commit is contained in:
143
database/php/pear/PHP/UML/Output/ExporterAPI.php
Normal file
143
database/php/pear/PHP/UML/Output/ExporterAPI.php
Normal file
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP_UML
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @category PHP
|
||||
* @package PHP_UML
|
||||
* @author Baptiste Autin <ohlesbeauxjours@yahoo.fr>
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
|
||||
* @version SVN: $Revision: 169 $
|
||||
* @link http://pear.php.net/package/PHP_UML
|
||||
* @since $Date: 2011-09-12 01:28:43 +0200 (lun., 12 sept. 2011) $
|
||||
*/
|
||||
|
||||
/**
|
||||
* This is the exportation class relying on the API (= on the full hierarchy of
|
||||
* metaclasses stored in the model). Note that another way to export a model would
|
||||
* be to use ExporterXSL, which is based on an XSL transformation of XMI.
|
||||
* A class implementing ExporterAPI must reside in a subfolder containing a class
|
||||
* named PHP_UML_<name of the output format>_Exporter. This class must also have a
|
||||
* public method "generate", which is used to start the serialization process.
|
||||
*
|
||||
* @category PHP
|
||||
* @package PHP_UML
|
||||
* @subpackage Output
|
||||
* @author Baptiste Autin <ohlesbeauxjours@yahoo.fr>
|
||||
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
|
||||
*/
|
||||
abstract class PHP_UML_Output_ExporterAPI extends PHP_UML_Output_Exporter
|
||||
{
|
||||
/**
|
||||
* Object storing some contextual data
|
||||
*
|
||||
* @var PHP_UML_Output_ApiContextPackage
|
||||
*/
|
||||
protected $ctx;
|
||||
|
||||
public function export($outDir)
|
||||
{
|
||||
if (!file_exists($outDir))
|
||||
throw new PHP_UML_Exception('Export directory ('.$outDir.') does not exist.');
|
||||
if (empty($this->structure) || empty($this->structure->packages)) {
|
||||
throw new PHP_UML_Exception('No model to export');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the ApiContextPackage currently associated to the rendering
|
||||
*
|
||||
* @return PHP_UML_Output_ApiContextPackage
|
||||
*/
|
||||
public function getContextPackage()
|
||||
{
|
||||
return $this->ctx;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the allInherited/-ing arrays with all the classifiers that a given
|
||||
* classifier inherits from
|
||||
*
|
||||
* @param PHP_UML_Metamodel_Classifier $s The initial reference classifier
|
||||
* @param PHP_UML_Metamodel_Classifier $t The current classifier to check
|
||||
*/
|
||||
protected function setAllInherited(PHP_UML_Metamodel_Classifier $s, PHP_UML_Metamodel_Classifier $t)
|
||||
{
|
||||
if (!empty($t->superClass) && is_object($t->superClass[0])) {
|
||||
$h = $t->superClass[0];
|
||||
$this->setAllInherited($s, $h);
|
||||
$this->ctx->allInherited[$s->id][] = $h;
|
||||
$this->ctx->allInheriting[$h->id][] = $s;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the allImplemented/-ing arrays with all the interfaces that a given
|
||||
* class implements (including those of the inherited classes)
|
||||
*
|
||||
* @param PHP_UML_Metamodel_Class $s The initial reference class
|
||||
* @param PHP_UML_Metamodel_Classifier $t The current classifier to check
|
||||
*/
|
||||
protected function setAllImplemented(PHP_UML_Metamodel_Class $s, PHP_UML_Metamodel_Classifier $t)
|
||||
{
|
||||
if (!empty($t->superClass) && is_object($t->superClass[0])) {
|
||||
$this->setAllImplemented($s, $t->superClass[0]);
|
||||
}
|
||||
if (isset($t->implements) && is_array($t->implements)) {
|
||||
foreach ($t->implements as $impl) {
|
||||
if (is_object($impl)) {
|
||||
$this->setAllImplemented($s, $impl);
|
||||
$this->ctx->allImplemented[$s->id][] = $impl;
|
||||
$this->ctx->allImplementing[$impl->id][] = $s;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Recurses into all the packages to build a list of all the generalizations
|
||||
* and realizations between elements.
|
||||
* We normally do this before creating the detailed files.
|
||||
*
|
||||
* @param PHP_UML_Metamodel_Package $pkg Starting package
|
||||
*/
|
||||
protected function setAllSuperClassifiers(PHP_UML_Metamodel_Package $pkg)
|
||||
{
|
||||
foreach ($pkg->ownedType as $type) {
|
||||
switch (get_class($type)) {
|
||||
case PHP_UML_Metamodel_Superstructure::META_CLASS:
|
||||
$this->setAllImplemented($type, $type);
|
||||
case PHP_UML_Metamodel_Superstructure::META_INTERFACE:
|
||||
$this->setAllInherited($type, $type);
|
||||
}
|
||||
}
|
||||
foreach ($pkg->nestedPackage as $np) {
|
||||
$this->setAllSuperClassifiers($np);
|
||||
}
|
||||
}
|
||||
|
||||
protected function initContextPackage(PHP_UML_Metamodel_Package $pkg, $dir, $rpt)
|
||||
{
|
||||
$this->ctx->classes = array();
|
||||
$this->ctx->interfaces = array();
|
||||
$this->ctx->datatypes = array();
|
||||
|
||||
$this->ctx->dir = $dir;
|
||||
$this->ctx->rpt = $rpt;
|
||||
|
||||
foreach ($pkg->ownedType as $type) {
|
||||
switch (get_class($type)) {
|
||||
case PHP_UML_Metamodel_Superstructure::META_INTERFACE:
|
||||
$this->ctx->interfaces[] = $type;
|
||||
break;
|
||||
case PHP_UML_Metamodel_Superstructure::META_DATATYPE:
|
||||
$this->ctx->datatypes[] = $type;
|
||||
break;
|
||||
default:
|
||||
$this->ctx->classes[] = $type;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user