Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015 final class PrimitiveIdentifierList extends PrimitiveIdentifier
00016 {
00017 protected $value = array();
00018 private $ignoreEmpty = false;
00019
00023 public function clean()
00024 {
00025 parent::clean();
00026
00027
00028 $this->value = array();
00029
00030 return $this;
00031 }
00032
00036 public function setValue($value)
00037 {
00038 if ($value) {
00039 Assert::isArray($value);
00040 Assert::isInstance(current($value), $this->className);
00041 }
00042
00043 $this->value = $value;
00044
00045 return $this;
00046 }
00047
00048 public function importValue($value)
00049 {
00050 if ($value instanceof UnifiedContainer) {
00051 if ($value->isLazy())
00052 return $this->import(
00053 array($this->name => $value->getList())
00054 );
00055 elseif (
00056 $value->getParentObject()->getId()
00057 && ($list = $value->getList())
00058 ) {
00059 return $this->import(
00060 array($this->name => ArrayUtils::getIdsArray($list))
00061 );
00062 } else {
00063 return parent::importValue(null);
00064 }
00065 }
00066
00067 if (is_array($value)) {
00068 try {
00069 if ($this->scalar)
00070 Assert::isScalar(current($value));
00071 else
00072 Assert::isInteger(current($value));
00073
00074 return $this->import(
00075 array($this->name => $value)
00076 );
00077 } catch (WrongArgumentException $e) {
00078 return $this->import(
00079 array($this->name => ArrayUtils::getIdsArray($value))
00080 );
00081 }
00082 }
00083
00084 return parent::importValue($value);
00085 }
00086
00087 public function import($scope)
00088 {
00089 if (!$this->className)
00090 throw new WrongStateException(
00091 "no class defined for PrimitiveIdentifierList '{$this->name}'"
00092 );
00093
00094 if (!BasePrimitive::import($scope))
00095 return null;
00096
00097 if (!is_array($scope[$this->name]))
00098 return false;
00099
00100 $list = array_unique($scope[$this->name]);
00101
00102 $values = array();
00103
00104 foreach ($list as $id) {
00105 if ((string) $id == "" && $this->isIgnoreEmpty())
00106 continue;
00107
00108 if (
00109 ($this->scalar && !Assert::checkScalar($id))
00110 || (!$this->scalar && !Assert::checkInteger($id))
00111 )
00112 return false;
00113
00114 $values[] = $id;
00115 }
00116
00117 $objectList = $this->dao()->getListByIds($values);
00118
00119 if (
00120 count($objectList) == count($values)
00121 && !($this->min && count($values) < $this->min)
00122 && !($this->max && count($values) > $this->max)
00123 ) {
00124 $this->value = $objectList;
00125 return true;
00126 }
00127
00128 return false;
00129 }
00130
00131 public function exportValue()
00132 {
00133 if (!$this->value)
00134 return null;
00135
00136 return ArrayUtils::getIdsArray($this->value);
00137 }
00138
00139 public function setIgnoreEmpty($orly = true)
00140 {
00141 $this->ignoreEmpty = ($orly === true);
00142
00143 return $this;
00144 }
00145
00146 public function isIgnoreEmpty()
00147 {
00148 return $this->ignoreEmpty;
00149 }
00150 }
00151 ?>