public function offsetSet($name, $setting)
{
if (isset($this->entities[$name])) {
$entity =& $this->entities[$name];
} else {
$entity = new $this->entityClass();
$entity->name = $name;
foreach ($this->defaultProperties as $property => &$value) {
$entity->{$property} =& $value;
}
$this->entities[$entity->name] =& $entity;
$this->data[$entity->name] =& $entity->value;
unset($value);
}
if ($setting instanceof $this->entityClass) {
$entity = $setting;
$entity->name = $name;
foreach ($this->defaultProperties as $property => &$value) {
if (empty($entity->{$property})) {
$entity->{$property} =& $value;
}
}
$this->data[$entity->name] =& $entity->value;
} else {
if (is_object($setting) || is_array($setting)) {
foreach ($setting as $property => $value) {
$entity->{$property} = $value;
}
} else {
$entity->value = $setting;
}
}
$this->modified[$entity->name] = $entity;
}