* SPDX-License-Identifier: AGPL-3.0-or-later */ namespace KTXF\Chrono\Collection; use KTXF\Resource\Provider\Node\NodeMutableAbstract; use KTXF\Resource\Provider\Node\NodePropertiesMutableInterface; /** * Abstract Chrono Collection Mutable Class * * Provides common implementation for mutable chrono collections * * @since 2025.05.01 */ abstract class CollectionMutableAbstract extends NodeMutableAbstract implements CollectionMutableInterface { protected CollectionPropertiesMutableAbstract $properties; /** * @inheritDoc */ public function getProperties(): CollectionPropertiesMutableInterface { return $this->properties; } /** * @inheritDoc */ public function setProperties(NodePropertiesMutableInterface $value): static { if (!$value instanceof CollectionPropertiesMutableInterface) { throw new \InvalidArgumentException('Properties must implement CollectionPropertiesMutableInterface'); } // Copy all property values $this->properties->setLabel($value->getLabel()); return $this; } }