vendor/mondator/src/Mandango/Mondator/Definition/Definition.php
changeset 18 c85b9d1ddf19
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/mondator/src/Mandango/Mondator/Definition/Definition.php	Thu Oct 27 05:47:14 2011 +0200
@@ -0,0 +1,443 @@
+<?php
+
+/*
+ * This file is part of Mandango.
+ *
+ * (c) Pablo Díez <pablodip@gmail.com>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Mandango\Mondator\Definition;
+
+/**
+ * Represents a definition of a class.
+ *
+ * @author Pablo Díez <pablodip@gmail.com>
+ *
+ * @api
+ */
+class Definition
+{
+    private $class;
+    private $parentClass;
+    private $interfaces;
+    private $final;
+    private $abstract;
+    private $properties;
+    private $methods;
+    private $docComment;
+
+    /**
+     * Constructor.
+     *
+     * @param string $class The class.
+     *
+     * @api
+     */
+    public function __construct($class)
+    {
+        $this->setClass($class);
+        $this->interfaces = array();
+        $this->final = false;
+        $this->abstract = false;
+        $this->properties = array();
+        $this->methods = array();
+    }
+
+    /**
+     * Set the class.
+     *
+     * @param string $class The class.
+     *
+     * @api
+     */
+    public function setClass($class)
+    {
+        $this->class = $class;
+    }
+
+    /**
+     * Returns the class.
+     *
+     * @return string The class.
+     *
+     * @api
+     */
+    public function getClass()
+    {
+        return $this->class;
+    }
+
+    /**
+     * Returns the namespace.
+     *
+     * @return string|null The namespace.
+     *
+     * @api
+     */
+    public function getNamespace()
+    {
+        if (false !== $pos = strrpos($this->class, '\\')) {
+            return substr($this->class, 0, $pos);
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns the class name.
+     *
+     * @return string|null The class name.
+     *
+     * @api
+     */
+    public function getClassName()
+    {
+        if (false !== $pos = strrpos($this->class, '\\')) {
+            return substr($this->class, $pos + 1);
+        }
+
+        return $this->class;
+    }
+
+    /**
+     * Set the parent class.
+     *
+     * @param string $parentClass The parent class.
+     *
+     * @api
+     */
+    public function setParentClass($parentClass)
+    {
+        $this->parentClass = $parentClass;
+    }
+
+    /**
+     * Returns the parent class.
+     *
+     * @return string The parent class.
+     *
+     * @api
+     */
+    public function getParentClass()
+    {
+        return $this->parentClass;
+    }
+
+    /**
+     * Add an interface.
+     *
+     * @param string $interface The interface.
+     *
+     * @api
+     */
+    public function addInterface($interface)
+    {
+        $this->interfaces[] = $interface;
+    }
+
+    /**
+     * Set the interfaces.
+     *
+     * @param array $interfaces The interfaces.
+     *
+     * @api
+     */
+    public function setInterfaces(array $interfaces)
+    {
+        $this->interfaces = array();
+        foreach ($interfaces as $interface) {
+            $this->addInterface($interface);
+        }
+    }
+
+    /**
+     * Returns the interfaces.
+     *
+     * @return array The interfaces.
+     *
+     * @api
+     */
+    public function getInterfaces()
+    {
+        return $this->interfaces;
+    }
+
+    /**
+     * Set if the class is final.
+     *
+     * @param bool $final If the class is final.
+     *
+     * @api
+     */
+    public function setFinal($final)
+    {
+        $this->final = (bool) $final;
+    }
+
+    /**
+     * Returns if the class is final.
+     *
+     * @return bool Returns if the class is final.
+     *
+     * @api
+     */
+    public function isFinal()
+    {
+        return $this->final;
+    }
+
+    /**
+     * Set if the class is abstract.
+     *
+     * @param bool $abstract If the class is abstract.
+     *
+     * @api
+     */
+    public function setAbstract($abstract)
+    {
+        $this->abstract = (bool) $abstract;
+    }
+
+    /**
+     * Returns if the class is abstract.
+     *
+     * @return bool If the class is abstract.
+     *
+     * @api
+     */
+    public function isAbstract()
+    {
+        return $this->abstract;
+    }
+
+    /**
+     * Add a property.
+     *
+     * @param Mandango\Mondator\Definition\Property $property The property.
+     *
+     * @api
+     */
+    public function addProperty(Property $property)
+    {
+        $this->properties[] = $property;
+    }
+
+    /**
+     * Set the properties.
+     *
+     * @param array $properties An array of properties.
+     *
+     * @api
+     */
+    public function setProperties(array $properties)
+    {
+        $this->properties = array();
+        foreach ($properties as $name => $property) {
+            $this->addProperty($property);
+        }
+    }
+
+    /**
+     * Returns the properties.
+     *
+     * @return array The properties.
+     *
+     * @api
+     */
+    public function getProperties()
+    {
+        return $this->properties;
+    }
+
+    /**
+     * Returns if a property exists by name.
+     *
+     * @param string $name The property name.
+     *
+     * @return bool If the property exists.
+     *
+     * @api
+     */
+    public function hasPropertyByName($name)
+    {
+        foreach ($this->properties as $property) {
+            if ($property->getName() == $name) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns a property by name.
+     *
+     * @param string $name The property name.
+     *
+     * @return Mandango\Mondator\Definition\Property The property.
+     *
+     * @throws \InvalidArgumentException If the property does not exists.
+     *
+     * @api
+     */
+    public function getPropertyByName($name)
+    {
+        foreach ($this->properties as $property) {
+            if ($property->getName() == $name) {
+                return $property;
+            }
+        }
+
+        throw new \InvalidArgumentException(sprintf('The property "%s" does not exists.', $name));
+    }
+
+    /**
+     * Remove property by name.
+     *
+     * @param string $name The property name.
+     *
+     * @throws \InvalidArgumentException If the property does not exists.
+     *
+     * @api
+     */
+    public function removePropertyByName($name)
+    {
+        foreach ($this->properties as $key => $property) {
+            if ($property->getName() == $name) {
+                unset($this->properties[$key]);
+                return;
+            }
+        }
+
+        throw new \InvalidArgumentException(sprintf('The property "%s" does not exists.', $name));
+    }
+
+    /**
+     * Add a method.
+     *
+     * @param Mandango\Mondator\Definition\Method $method The method.
+     *
+     * @api
+     */
+    public function addMethod(Method $method)
+    {
+        $this->methods[] = $method;
+    }
+
+    /**
+     * Set the methods.
+     *
+     * @param array $methods An array of methods.
+     *
+     * @api
+     */
+    public function setMethods(array $methods)
+    {
+        $this->methods = array();
+        foreach ($methods as $name => $method) {
+            $this->addMethod($method);
+        }
+    }
+
+    /**
+     * Returns the methods.
+     *
+     * @return array The methods.
+     *
+     * @api
+     */
+    public function getMethods()
+    {
+        return $this->methods;
+    }
+
+    /**
+     * Returns if exists a method by name.
+     *
+     * @param string $name The method name.
+     *
+     * @return bool If the method exists.
+     *
+     * @api
+     */
+    public function hasMethodByName($name)
+    {
+        foreach ($this->methods as $method) {
+            if ($method->getName() == $name) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Return a method by name.
+     *
+     * @param string $name The method name.
+     *
+     * @return Mandango\Mondator\Definition\Method The method.
+     *
+     * @throws \InvalidArgumentException If the method does not exists.
+     *
+     * @api
+     */
+    public function getMethodByName($name)
+    {
+        foreach ($this->methods as $method) {
+            if ($method->getName() == $name) {
+                return $method;
+            }
+        }
+
+        throw new \InvalidArgumentException(sprintf('The method "%s" does not exists.', $name));
+    }
+
+    /**
+     * Remove a method by name.
+     *
+     * @param string $name The method name.
+     *
+     * @throws \InvalidArgumentException If the method does not exists.
+     *
+     * @api
+     */
+    public function removeMethodByName($name)
+    {
+        foreach ($this->methods as $key => $method) {
+            if ($method->getName() == $name) {
+                unset($this->methods[$key]);
+                return;
+            }
+        }
+
+        throw new \InvalidArgumentException(sprintf('The method "%s" does not exists.', $name));
+    }
+
+    /**
+     * Set the doc comment.
+     *
+     * @param string|null $docComment The doc comment.
+     *
+     * @api
+     */
+    public function setDocComment($docComment)
+    {
+        $this->docComment = $docComment;
+    }
+
+    /**
+     * Returns the doc comment.
+     *
+     * @return string|null The doc comment.
+     *
+     * @api
+     */
+    public function getDocComment()
+    {
+        return $this->docComment;
+    }
+}