Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
82.50% |
33 / 40 |
CRAP | |
93.24% |
138 / 148 |
XMLEntity | |
0.00% |
0 / 1 |
|
82.50% |
33 / 40 |
61.11 | |
93.24% |
138 / 148 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
8 / 8 |
|||
toXML | |
100.00% |
1 / 1 |
4 | |
100.00% |
13 / 13 |
|||
databaseSpecificToXML | |
0.00% |
0 / 1 |
4.05 | |
85.71% |
6 / 7 |
|||
fromXML | |
100.00% |
1 / 1 |
1 | |
100.00% |
11 / 11 |
|||
fromTable | |
100.00% |
1 / 1 |
4 | |
100.00% |
19 / 19 |
|||
readEntityDataFromXML | |
100.00% |
1 / 1 |
1 | |
100.00% |
7 / 7 |
|||
readXMLConstructor | |
100.00% |
1 / 1 |
2 | |
100.00% |
6 / 6 |
|||
readXMLServiceClass | |
100.00% |
1 / 1 |
2 | |
100.00% |
6 / 6 |
|||
readAttributeDataFromXML | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
readReferenceDataFromXML | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
readIndexDataFromXML | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
readCollectionFromXML | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
readCollectionManyFromXML | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
readStoredProcedureDataFromXML | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
getXMLAttributeList | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getXMLReferenceList | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getXMLIndexList | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getXMLCollectionList | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getXMLCollectionManyList | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getXMLStoredProcedureList | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getDatabaseSpecificAttributeList | |
0.00% |
0 / 1 |
2.06 | |
75.00% |
3 / 4 |
|||
getCustomAttribute | |
0.00% |
0 / 1 |
2.15 | |
66.67% |
2 / 3 |
|||
getClassShortName | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setClassShortName | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getNamespaceName | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setNamespaceName | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getTableName | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setTableName | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getIsDelimit | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setIsDelimit | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getTargetPath | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setTargetPath | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
getIsReplication | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setIsReplication | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getXmlConstructor | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setXmlConstructor | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getXmlServiceClass | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setXmlServiceClass | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getXmlAccess | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
setXmlAccess | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
<?php | |
declare(strict_types = 1); | |
namespace Siesta\XML; | |
use Siesta\Database\MetaData\TableMetaData; | |
use Siesta\NamingStrategy\NamingStrategyRegistry; | |
/** | |
* @author Gregor Müller | |
*/ | |
class XMLEntity | |
{ | |
const ELEMENT_ENTITY_NAME = "entity"; | |
const CLASS_SHORT_NAME = "name"; | |
const NAMESPACE_NAME = "namespace"; | |
const TABLE_NAME = "table"; | |
const DELIMIT = "delimit"; | |
const TARGET_PATH = "targetPath"; | |
const REPLICATION = "replication"; | |
/** | |
* @var string | |
*/ | |
protected $classShortName; | |
/** | |
* @var string | |
*/ | |
protected $namespaceName; | |
/** | |
* @var string | |
*/ | |
protected $tableName; | |
/** | |
* @var bool | |
*/ | |
protected $isDelimit; | |
/** | |
* @var bool; | |
*/ | |
protected $isReplication; | |
/** | |
* @var string | |
*/ | |
protected $targetPath; | |
/** | |
* @var XMLConstructor | |
*/ | |
protected $xmlConstructor; | |
/** | |
* @var XMLServiceClass | |
*/ | |
protected $xmlServiceClass; | |
/** | |
* @var XMLAttribute[] | |
*/ | |
protected $xmlAttributeList; | |
/** | |
* @var XMLReference[] | |
*/ | |
protected $xmlReferenceList; | |
/** | |
* @var XMLIndex[] | |
*/ | |
protected $xmlIndexList; | |
/** | |
* @var XMLCollection[] | |
*/ | |
protected $xmlCollectionList; | |
/** | |
* @var XMLCollectionMany[] | |
*/ | |
protected $xmlCollectionManyList; | |
/** | |
* @var XMLStoredProcedure[] | |
*/ | |
protected $xmlStoredProcedureList; | |
/** | |
* @var XMLAccess | |
*/ | |
protected $xmlAccess; | |
/** | |
* @var array | |
*/ | |
protected $databaseSpecific; | |
/** | |
* XMLEntity constructor. | |
*/ | |
public function __construct() | |
{ | |
$this->xmlAttributeList = []; | |
$this->xmlReferenceList = []; | |
$this->xmlIndexList = []; | |
$this->xmlCollectionList = []; | |
$this->xmlCollectionManyList = []; | |
$this->xmlStoredProcedureList = []; | |
$this->databaseSpecific = []; | |
} | |
/** | |
* @param XMLWrite $parent | |
* | |
* @return string | |
*/ | |
public function toXML(XMLWrite $parent) | |
{ | |
$xmlWrite = $parent->appendChild(self::ELEMENT_ENTITY_NAME); | |
$xmlWrite->setAttribute(self::TABLE_NAME, $this->getTableName()); | |
$xmlWrite->setAttribute(self::CLASS_SHORT_NAME, $this->getClassShortName()); | |
$xmlWrite->setAttribute(self::NAMESPACE_NAME, $this->getNamespaceName()); | |
$xmlWrite->setAttribute(self::TARGET_PATH, $this->getTargetPath()); | |
$this->databaseSpecificToXML($xmlWrite); | |
foreach ($this->getXMLAttributeList() as $xmlAttribute) { | |
$xmlAttribute->toXML($xmlWrite); | |
} | |
foreach ($this->getXMLReferenceList() as $xmlReference) { | |
$xmlReference->toXML($xmlWrite); | |
} | |
foreach ($this->getXMLIndexList() as $xmlIndex) { | |
$xmlIndex->toXML($xmlWrite); | |
} | |
} | |
/** | |
* @param XMLWrite $parent | |
*/ | |
protected function databaseSpecificToXML(XMLWrite $parent) | |
{ | |
if ($this->databaseSpecific === null) { | |
return; | |
} | |
foreach ($this->databaseSpecific as $dbName => $keyValueList) { | |
$dbSpecific = $parent->appendChild(self::ELEMENT_ENTITY_NAME . '-' . $dbName); | |
foreach ($keyValueList as $key => $value) { | |
$dbSpecific->setAttribute($key, $value); | |
} | |
} | |
} | |
/** | |
* @param XMLAccess $xmlAccess | |
*/ | |
public function fromXML(XMLAccess $xmlAccess) | |
{ | |
$this->xmlAccess = $xmlAccess; | |
$this->readEntityDataFromXML($xmlAccess); | |
$this->readXMLConstructor($xmlAccess); | |
$this->readXMLServiceClass($xmlAccess); | |
$this->readAttributeDataFromXML($xmlAccess); | |
$this->readReferenceDataFromXML($xmlAccess); | |
$this->readIndexDataFromXML($xmlAccess); | |
$this->readCollectionFromXML($xmlAccess); | |
$this->readCollectionManyFromXML($xmlAccess); | |
$this->readStoredProcedureDataFromXML($xmlAccess); | |
} | |
/** | |
* @param TableMetaData $table | |
*/ | |
public function fromTable(TableMetaData $table) | |
{ | |
$tableName = $table->getName(); | |
$classNaming = NamingStrategyRegistry::getClassNamingStrategy(); | |
$className = $classNaming->transform($tableName); | |
$this->setTableName($tableName); | |
$this->setClassShortName($className); | |
$this->databaseSpecific = $table->getDataBaseSpecific(); | |
foreach ($table->getColumnList() as $column) { | |
$xmlAttribute = new XMLAttribute(); | |
$xmlAttribute->fromColumnMetaData($column); | |
$this->xmlAttributeList[] = $xmlAttribute; | |
} | |
foreach ($table->getConstraintList() as $constraint) { | |
$xmlReference = new XMLReference(); | |
$xmlReference->fromConstraintMetaData($constraint); | |
$this->xmlReferenceList[] = $xmlReference; | |
} | |
foreach ($table->getIndexList() as $indexMetaData) { | |
$xmlIndex = new XMLIndex(); | |
$xmlIndex->fromIndexMetaData($indexMetaData); | |
$this->xmlIndexList[] = $xmlIndex; | |
} | |
} | |
/** | |
* @param XMLAccess $xmlAccess | |
*/ | |
protected function readEntityDataFromXML(XMLAccess $xmlAccess) | |
{ | |
$this->setClassShortName($xmlAccess->getAttribute(self::CLASS_SHORT_NAME)); | |
$this->setNamespaceName($xmlAccess->getAttribute(self::NAMESPACE_NAME)); | |
$this->setTableName($xmlAccess->getAttribute(self::TABLE_NAME)); | |
$this->setIsDelimit($xmlAccess->getAttributeAsBool(self::DELIMIT)); | |
$this->setIsReplication($xmlAccess->getAttributeAsBool(self::REPLICATION)); | |
$this->setTargetPath($xmlAccess->getAttribute(self::TARGET_PATH)); | |
} | |
/** | |
* @param XMLAccess $xmlAccess | |
*/ | |
protected function readXMLConstructor(XMLAccess $xmlAccess) | |
{ | |
$xmlConstructorAccess = $xmlAccess->getFirstChildByName(XMLConstructor::ELEMENT_CONSTRUCTOR_NAME); | |
if ($xmlConstructorAccess === null) { | |
return; | |
} | |
$this->xmlConstructor = new XMLConstructor(); | |
$this->xmlConstructor->fromXML($xmlConstructorAccess); | |
} | |
/** | |
* @param XMLAccess $xmlAccess | |
*/ | |
protected function readXMLServiceClass(XMLAccess $xmlAccess) | |
{ | |
$xmlServiceClass = $xmlAccess->getFirstChildByName(XMLServiceClass::ELEMENT_SERVICE_CLASS_NAME); | |
if ($xmlServiceClass === null) { | |
return; | |
} | |
$this->xmlServiceClass = new XMLServiceClass(); | |
$this->xmlServiceClass->fromXMLAccess($xmlServiceClass); | |
} | |
/** | |
* @param XMLAccess $xmlAccess | |
*/ | |
protected function readAttributeDataFromXML(XMLAccess $xmlAccess) | |
{ | |
foreach ($xmlAccess->getXMLChildElementListByName(XMLAttribute::ELEMENT_ATTRIBUTE_NAME) as $xmlAttributeAccess) { | |
$xmlAttribute = new XMLAttribute(); | |
$xmlAttribute->fromXML($xmlAttributeAccess); | |
$this->xmlAttributeList[] = $xmlAttribute; | |
} | |
} | |
/** | |
* @param XMLAccess $xmlAccess | |
*/ | |
protected function readReferenceDataFromXML(XMLAccess $xmlAccess) | |
{ | |
foreach ($xmlAccess->getXMLChildElementListByName(XMLReference::ELEMENT_REFERENCE_NAME) as $xmlReferenceAccess) { | |
$xmlReference = new XMLReference(); | |
$xmlReference->fromXML($xmlReferenceAccess); | |
$this->xmlReferenceList[] = $xmlReference; | |
} | |
} | |
/** | |
* @param XMLAccess $xmlAccess | |
*/ | |
protected function readIndexDataFromXML(XMLAccess $xmlAccess) | |
{ | |
foreach ($xmlAccess->getXMLChildElementListByName(XMLIndex::ELEMENT_INDEX_NAME) as $xmlIndexAccess) { | |
$xmlIndex = new XMLIndex(); | |
$xmlIndex->fromXML($xmlIndexAccess); | |
$this->xmlIndexList[] = $xmlIndex; | |
} | |
} | |
/** | |
* @param XMLAccess $xmlAccess | |
*/ | |
protected function readCollectionFromXML(XMLAccess $xmlAccess) | |
{ | |
foreach ($xmlAccess->getXMLChildElementListByName(XMLCollection::ELEMENT_COLLECTION_NAME) as $xmlCollectionAccess) { | |
$xmlCollection = new XMLCollection(); | |
$xmlCollection->fromXML($xmlCollectionAccess); | |
$this->xmlCollectionList[] = $xmlCollection; | |
} | |
} | |
/** | |
* @param XMLAccess $xmlAccess | |
*/ | |
protected function readCollectionManyFromXML(XMLAccess $xmlAccess) | |
{ | |
foreach ($xmlAccess->getXMLChildElementListByName(XMLCollectionMany::ELEMENT_COLLECTION_MANY_NAME) as $xmlCollectionManyAccess) { | |
$xmlCollectionMany = new XMLCollectionMany(); | |
$xmlCollectionMany->fromXML($xmlCollectionManyAccess); | |
$this->xmlCollectionManyList[] = $xmlCollectionMany; | |
} | |
} | |
/** | |
* @param XMLAccess $xmlAccess | |
*/ | |
protected function readStoredProcedureDataFromXML(XMLAccess $xmlAccess) | |
{ | |
foreach ($xmlAccess->getXMLChildElementListByName(XMLStoredProcedure::ELEMENT_SP_NAME) as $xmlSPAccess) { | |
$xmlSP = new XMLStoredProcedure(); | |
$xmlSP->fromXML($xmlSPAccess); | |
$this->xmlStoredProcedureList[] = $xmlSP; | |
} | |
} | |
/** | |
* @return XMLAttribute[] | |
*/ | |
public function getXMLAttributeList() : array | |
{ | |
return $this->xmlAttributeList; | |
} | |
/** | |
* @return XMLReference[] | |
*/ | |
public function getXMLReferenceList() : array | |
{ | |
return $this->xmlReferenceList; | |
} | |
/** | |
* @return XMLIndex[] | |
*/ | |
public function getXMLIndexList() : array | |
{ | |
return $this->xmlIndexList; | |
} | |
/** | |
* @return XMLCollection[] | |
*/ | |
public function getXMLCollectionList() : array | |
{ | |
return $this->xmlCollectionList; | |
} | |
/** | |
* @return XMLCollectionMany[] | |
*/ | |
public function getXMLCollectionManyList() : array | |
{ | |
return $this->xmlCollectionManyList; | |
} | |
/** | |
* @return XMLStoredProcedure[] | |
*/ | |
public function getXMLStoredProcedureList() : array | |
{ | |
return $this->xmlStoredProcedureList; | |
} | |
/** | |
* @param $databaseName | |
* | |
* @return array | |
*/ | |
public function getDatabaseSpecificAttributeList($databaseName) | |
{ | |
if ($this->xmlAccess === null) { | |
return []; | |
} | |
$tagName = self::ELEMENT_ENTITY_NAME . "-" . $databaseName; | |
return $this->xmlAccess->getDatabaseSpecificAttributeList($tagName); | |
} | |
/** | |
* @param string $name | |
* | |
* @return null|string | |
*/ | |
public function getCustomAttribute(string $name) | |
{ | |
if ($this->xmlAccess === null) { | |
return null; | |
} | |
return $this->xmlAccess->getAttribute($name); | |
} | |
/** | |
* @return string | |
*/ | |
public function getClassShortName() | |
{ | |
return $this->classShortName; | |
} | |
/** | |
* @param string $classShortName | |
*/ | |
public function setClassShortName($classShortName) | |
{ | |
$this->classShortName = $classShortName; | |
} | |
/** | |
* @return string | |
*/ | |
public function getNamespaceName() | |
{ | |
return $this->namespaceName; | |
} | |
/** | |
* @param string $namespaceName | |
*/ | |
public function setNamespaceName($namespaceName) | |
{ | |
$this->namespaceName = trim($namespaceName, "\\"); | |
} | |
/** | |
* @return string | |
*/ | |
public function getTableName() | |
{ | |
return $this->tableName; | |
} | |
/** | |
* @param string $tableName | |
*/ | |
public function setTableName($tableName) | |
{ | |
$this->tableName = $tableName; | |
} | |
/** | |
* @return boolean | |
*/ | |
public function getIsDelimit() | |
{ | |
return $this->isDelimit; | |
} | |
/** | |
* @param boolean $isDelimit | |
*/ | |
public function setIsDelimit($isDelimit) | |
{ | |
$this->isDelimit = $isDelimit; | |
} | |
/** | |
* @return string | |
*/ | |
public function getTargetPath() | |
{ | |
return $this->targetPath; | |
} | |
/** | |
* @param string $targetPath | |
*/ | |
public function setTargetPath($targetPath) | |
{ | |
if ($targetPath !== null) { | |
$this->targetPath = trim($targetPath, DIRECTORY_SEPARATOR); | |
} | |
} | |
/** | |
* @return boolean | |
*/ | |
public function getIsReplication() : bool | |
{ | |
return $this->isReplication; | |
} | |
/** | |
* @param boolean $isReplication | |
*/ | |
public function setIsReplication($isReplication) | |
{ | |
$this->isReplication = $isReplication; | |
} | |
/** | |
* @return XMLConstructor | |
*/ | |
public function getXmlConstructor() | |
{ | |
return $this->xmlConstructor; | |
} | |
/** | |
* @param XMLConstructor $xmlConstructor | |
*/ | |
public function setXmlConstructor($xmlConstructor) | |
{ | |
$this->xmlConstructor = $xmlConstructor; | |
} | |
/** | |
* @return XMLServiceClass | |
*/ | |
public function getXmlServiceClass() | |
{ | |
return $this->xmlServiceClass; | |
} | |
/** | |
* @param XMLServiceClass $xmlServiceClass | |
*/ | |
public function setXmlServiceClass($xmlServiceClass) | |
{ | |
$this->xmlServiceClass = $xmlServiceClass; | |
} | |
/** | |
* @return XMLAccess | |
*/ | |
public function getXmlAccess() | |
{ | |
return $this->xmlAccess; | |
} | |
/** | |
* @param XMLAccess $xmlAccess | |
*/ | |
public function setXmlAccess($xmlAccess) | |
{ | |
$this->xmlAccess = $xmlAccess; | |
} | |
} |