Source of file AbstractExporter.php
Size: 6,191 Bytes - Last Modified: 2013-05-11T09:51:12+02:00
/home/theseer/Downloads/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 | <?php /* * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This software consists of voluntary contributions made by many individuals * and is licensed under the MIT license. For more information, see * <http://www.doctrine-project.org>. */ namespace Doctrine\ORM\Tools\Export\Driver; use Doctrine\ORM\Mapping\ClassMetadataInfo; use Doctrine\ORM\Tools\Export\ExportException; /** * Abstract base class which is to be used for the Exporter drivers * which can be found in \Doctrine\ORM\Tools\Export\Driver * * * @link www.doctrine-project.org * @since 2.0 * @author Jonathan Wage <jonwage@gmail.com> */ abstract class AbstractExporter { protected $_metadata = array(); protected $_outputDir; protected $_extension; protected $_overwriteExistingFiles = false; public function __construct($dir = null) { $this->_outputDir = $dir; } public function setOverwriteExistingFiles($overwrite) { $this->_overwriteExistingFiles = $overwrite; } /** * Converts a single ClassMetadata instance to the exported format * and returns it * * @param ClassMetadataInfo $metadata * @return mixed $exported */ abstract public function exportClassMetadata(ClassMetadataInfo $metadata); /** * Set the array of ClassMetadataInfo instances to export * * @param array $metadata * @return void */ public function setMetadata(array $metadata) { $this->_metadata = $metadata; } /** * Get the extension used to generated the path to a class * * @return string $extension */ public function getExtension() { return $this->_extension; } /** * Set the directory to output the mapping files to * * [php] * $exporter = new YamlExporter($metadata); * $exporter->setOutputDir(__DIR__ . '/yaml'); * $exporter->export(); * * @param string $dir * @return void */ public function setOutputDir($dir) { $this->_outputDir = $dir; } /** * Export each ClassMetadata instance to a single Doctrine Mapping file * named after the entity * * @return void */ public function export() { if ( ! is_dir($this->_outputDir)) { mkdir($this->_outputDir, 0777, true); } foreach ($this->_metadata as $metadata) { //In case output is returned, write it to a file, skip otherwise if($output = $this->exportClassMetadata($metadata)){ $path = $this->_generateOutputPath($metadata); $dir = dirname($path); if ( ! is_dir($dir)) { mkdir($dir, 0777, true); } if (file_exists($path) && !$this->_overwriteExistingFiles) { throw ExportException::attemptOverwriteExistingFile($path); } file_put_contents($path, $output); } } } /** * Generate the path to write the class for the given ClassMetadataInfo instance * * @param ClassMetadataInfo $metadata * @return string $path */ protected function _generateOutputPath(ClassMetadataInfo $metadata) { return $this->_outputDir . '/' . str_replace('\\', '.', $metadata->name) . $this->_extension; } /** * Set the directory to output the mapping files to * * [php] * $exporter = new YamlExporter($metadata, __DIR__ . '/yaml'); * $exporter->setExtension('.yml'); * $exporter->export(); * * @param string $extension * @return void */ public function setExtension($extension) { $this->_extension = $extension; } protected function _getInheritanceTypeString($type) { switch ($type) { case ClassMetadataInfo::INHERITANCE_TYPE_NONE: return 'NONE'; break; case ClassMetadataInfo::INHERITANCE_TYPE_JOINED: return 'JOINED'; break; case ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE: return 'SINGLE_TABLE'; break; case ClassMetadataInfo::INHERITANCE_TYPE_TABLE_PER_CLASS: return 'PER_CLASS'; break; } } protected function _getChangeTrackingPolicyString($policy) { switch ($policy) { case ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT: return 'DEFERRED_IMPLICIT'; break; case ClassMetadataInfo::CHANGETRACKING_DEFERRED_EXPLICIT: return 'DEFERRED_EXPLICIT'; break; case ClassMetadataInfo::CHANGETRACKING_NOTIFY: return 'NOTIFY'; break; } } protected function _getIdGeneratorTypeString($type) { switch ($type) { case ClassMetadataInfo::GENERATOR_TYPE_AUTO: return 'AUTO'; break; case ClassMetadataInfo::GENERATOR_TYPE_SEQUENCE: return 'SEQUENCE'; break; case ClassMetadataInfo::GENERATOR_TYPE_TABLE: return 'TABLE'; break; case ClassMetadataInfo::GENERATOR_TYPE_IDENTITY: return 'IDENTITY'; break; } } } |