248 lines
6.4 KiB
PHP
248 lines
6.4 KiB
PHP
<?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: 176 $
|
|
* @link http://pear.php.net/package/PHP_UML
|
|
* @since $Date: 2011-09-19 00:03:11 +0200 (lun., 19 sept. 2011) $
|
|
*/
|
|
|
|
/**
|
|
* This class generates the XMI from a UML model (PHP_UML_Metamodel)
|
|
*
|
|
* @category PHP
|
|
* @package PHP_UML
|
|
* @subpackage Output
|
|
* @subpackage Xmi
|
|
* @author Baptiste Autin <ohlesbeauxjours@yahoo.fr>
|
|
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
|
|
*/
|
|
class PHP_UML_Output_Xmi_Exporter extends PHP_UML_Output_ExporterAPI
|
|
{
|
|
/**
|
|
* Reference to an XmiDocument object. Such an object is needed by the export()
|
|
* method of Xmi_Exporter and its subclasses (unlike the ExporterAPI implementations,
|
|
* which work on the metamodel directly, and don't need to know anything about XMI).
|
|
*
|
|
* @var PHP_UML_Output_XmiDocument
|
|
*/
|
|
protected $xmiDocument;
|
|
|
|
/**
|
|
* Default XMI version used for serialization. Note that all XSL-based
|
|
* exporters will generate XMI with the default xmiVersion and encoding.
|
|
*
|
|
* @var float
|
|
*/
|
|
protected $xmiVersion = 2;
|
|
|
|
/**
|
|
* Default XML encoding of the XMI document.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $encoding = 'iso-8859-1';
|
|
|
|
/**
|
|
* A logical view is included in the model by default.
|
|
*
|
|
* @var boolean
|
|
*/
|
|
protected $logicalView = true;
|
|
|
|
/**
|
|
* A deployment view is not included in the model by default.
|
|
*
|
|
* @var boolean
|
|
*/
|
|
protected $deploymentView = false;
|
|
|
|
/**
|
|
* A component view is not included in the model by default.
|
|
*
|
|
* @var boolean
|
|
*/
|
|
protected $componentView = false;
|
|
|
|
/**
|
|
* Stereotypes are not included in the model by default.
|
|
*
|
|
* @var boolean
|
|
*/
|
|
protected $stereotypes = false;
|
|
|
|
|
|
/**
|
|
* Setter for the XML encoding
|
|
*
|
|
* @param string $encoding Encoding
|
|
*/
|
|
public function setEncoding($encoding)
|
|
{
|
|
$this->encoding = $encoding;
|
|
}
|
|
|
|
/**
|
|
* Setter for the XMI version
|
|
*
|
|
* @param float $version XMI version
|
|
*/
|
|
public function setXmiVersion($version)
|
|
{
|
|
$this->xmiVersion = $version;
|
|
}
|
|
|
|
/**
|
|
* Enables the inclusion of a logical view in the serialized model
|
|
*
|
|
* @param boolean $value True/False
|
|
*/
|
|
public function setLogicalView($value)
|
|
{
|
|
$this->logicalView = $value;
|
|
}
|
|
|
|
/**
|
|
* Enables the inclusion of a deployment view in the serialized model
|
|
*
|
|
* @param boolean $value True/False
|
|
*/
|
|
public function setDeploymentView($value)
|
|
{
|
|
$this->deploymentView = $value;
|
|
}
|
|
|
|
/**
|
|
* Enables the inclusion of a component view in the serialized model
|
|
*
|
|
* @param boolean $value True/False
|
|
*/
|
|
public function setComponentView($value)
|
|
{
|
|
$this->componentView = $value;
|
|
}
|
|
|
|
/**
|
|
* Enables the inclusion of the stereotypes in the serialized model
|
|
* If true, all the stereotypes related to the UML model (currently, these
|
|
* data correspond to the PHP docblocks) will be added to the XMI model.
|
|
*
|
|
* @param boolean $value True/False
|
|
*/
|
|
public function setStereotypes($value)
|
|
{
|
|
$this->stereotypes = $value;
|
|
}
|
|
|
|
/**
|
|
* Setter for the XmiDocument
|
|
*
|
|
* @param PHP_UML_Output_XmiDocument $xmiDocument XMI Document
|
|
*/
|
|
public function setXmiDocument(PHP_UML_Output_XmiDocument $xmiDocument)
|
|
{
|
|
$this->xmiDocument = $xmiDocument;
|
|
}
|
|
|
|
/**
|
|
* Getter for the XmiDocument
|
|
*
|
|
* @return PHP_UML_Output_XmiDocument
|
|
*/
|
|
public function getXmiDocument()
|
|
{
|
|
return $this->xmiDocument;
|
|
}
|
|
|
|
public function export($outDir)
|
|
{
|
|
if (empty($this->structure))
|
|
throw new PHP_UML_Exception('No model given.');
|
|
|
|
//if (empty($this->xmiDocument)) {
|
|
$this->generateXmi();
|
|
//}
|
|
|
|
if ($outDir=='')
|
|
return $this->xmiDocument->dump();
|
|
else {
|
|
if (!is_dir($outDir))
|
|
$this->save($outDir);
|
|
else
|
|
{
|
|
$fileName = empty($this->structure->packages) ? 'undefined' : $this->structure->packages->name;
|
|
$this->save($outDir.DIRECTORY_SEPARATOR.$fileName.'.xmi');
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Internal method to save the generated XMI to a file.
|
|
* Use export() instead if you need to save from outside the Exporter object.
|
|
*
|
|
* @param string $outputFile Filename
|
|
*/
|
|
protected function save($outputFile)
|
|
{
|
|
if ($ptr = fopen($outputFile, 'w+')) {
|
|
fwrite($ptr, $this->xmiDocument->dump());
|
|
fclose($ptr);
|
|
} else {
|
|
throw new PHP_UML_Exception(
|
|
'File '.$outputFile.' could not be created.'
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Serialize the metamodel (contained in the property $structure) into XMI code
|
|
*
|
|
* It is not necessary to call this method before calling export();
|
|
*/
|
|
public function generateXmi()
|
|
{
|
|
$builder = $this->getXmiBuilder();
|
|
|
|
$this->xmiDocument = $builder->getXmiDocument($this->structure);
|
|
}
|
|
|
|
/**
|
|
* Getter for the XMI factory
|
|
*
|
|
* @return PHP_UML_Output_Xmi_Builder An XMI builder object
|
|
*/
|
|
protected function getXmiBuilder()
|
|
{
|
|
$builder = PHP_UML_Output_Xmi_AbstractBuilder::getInstance($this->xmiVersion);
|
|
$builder->setEncoding($this->encoding);
|
|
$builder->setLogicalView($this->logicalView);
|
|
$builder->setComponentView($this->componentView);
|
|
$builder->setDeploymentView($this->deploymentView);
|
|
$builder->setStereotypes($this->stereotypes);
|
|
return $builder;
|
|
}
|
|
|
|
|
|
/**
|
|
* Read the content of an existing XMI file.
|
|
* If the file is UML/XMI 1, a conversion to version 2 is automatically applied.
|
|
*
|
|
* @param string $filepath Filename
|
|
*/
|
|
public function loadXmi($filepath)
|
|
{
|
|
if (empty($this->xmiDocument)) {
|
|
$this->xmiDocument = new PHP_UML_Output_XmiDocument();
|
|
}
|
|
$this->xmiDocument->load($filepath);
|
|
}
|
|
}
|
|
?>
|