diff --git a/src/php/HAB/Pica/Record/CopyRecord.php b/src/php/HAB/Pica/Record/CopyRecord.php index 98cc095e0b104345821bdcbac6983f87126225df..b3ac3fd9dda1fed45716cef25854455e6d13d079 100644 --- a/src/php/HAB/Pica/Record/CopyRecord.php +++ b/src/php/HAB/Pica/Record/CopyRecord.php @@ -125,4 +125,42 @@ class CopyRecord extends Record { $this->append(new Field('203@', $this->getItemNumber(), array(new Subfield('0', $epn)))); } } + + /** + * Set the containing local record. + * + * @param \HAB\Pica\Record\LocalRecord $record Local record + * @return void + */ + public function setLocalRecord (\HAB\Pica\Record\LocalRecord $record) { + $this->unsetLocalRecord(); + if (!$record->containsCopyRecord($this)) { + $record->addCopyRecord($this); + } + $this->_parent = $record; + } + + /** + * Unset the containing local record. + * + * @return void + */ + public function unsetLocalRecord () { + if ($this->_parent) { + if ($this->_parent->containsCopyRecord($this)) { + $this->_parent->removeCopyRecord($this); + } + $this->_parent = null; + } + } + + /** + * Return the containing local record. + * + * @return \HAB\Pica\Record\LocalRecord|null + */ + public function getLocalRecord () { + return $this->_parent; + } + } \ No newline at end of file diff --git a/src/php/HAB/Pica/Record/LocalRecord.php b/src/php/HAB/Pica/Record/LocalRecord.php index c959c999ab5451531442401323892f6b70c5e311..48c4fed6f6479eef5ecb64f56208f8712d39a911 100644 --- a/src/php/HAB/Pica/Record/LocalRecord.php +++ b/src/php/HAB/Pica/Record/LocalRecord.php @@ -68,6 +68,7 @@ class LocalRecord extends NestedRecord { throw new \InvalidArgumentException("Cannot add copy record: Copy record with item number {$record->getItemNumber()} already present"); } $this->addRecord($record); + $record->setLocalRecord($this); } /** @@ -79,6 +80,7 @@ class LocalRecord extends NestedRecord { */ public function removeCopyRecord (\HAB\Pica\Record\CopyRecord $record) { $this->removeRecord($record); + $record->unsetLocalRecord(); } /** @@ -131,6 +133,43 @@ class LocalRecord extends NestedRecord { return $this->containsRecord($record); } + /** + * Set the containing title record. + * + * @param \HAB\Pica\Record\TitleRecord $record Title record + * @return void + */ + public function setTitleRecord (\HAB\Pica\Record\TitleRecord $record) { + $this->unsetTitleRecord(); + if (!$record->containsLocalRecord($this)) { + $record->addLocalRecord($this); + } + $this->_parent = $record; + } + + /** + * Unset the containing title record. + * + * @return void + */ + public function unsetTitleRecord () { + if ($this->_parent) { + if ($this->_parent->containsLocalRecord($this)) { + $this->_parent->removeLocalRecord($this); + } + $this->_parent = null; + } + } + + /** + * Return the containing local record. + * + * @return \HAB\Pica\Record\TitleRecord|null + */ + public function getTitleRecord () { + return $this->_parent; + } + /** * Compare two copy records. * @@ -146,4 +185,5 @@ class LocalRecord extends NestedRecord { protected function compareRecords (\HAB\Pica\Record\Record $a, \HAB\Pica\Record\Record $b) { return $a->getItemNumber() - $b->getItemNumber(); } + } \ No newline at end of file diff --git a/src/php/HAB/Pica/Record/TitleRecord.php b/src/php/HAB/Pica/Record/TitleRecord.php index 6ec2c76505e99d3522997ecbb0fe9b41fcfd2376..6dd7fe58b0c05f39f94143544bc6d48016658887 100644 --- a/src/php/HAB/Pica/Record/TitleRecord.php +++ b/src/php/HAB/Pica/Record/TitleRecord.php @@ -103,6 +103,7 @@ class TitleRecord extends NestedRecord { */ public function addLocalRecord (\HAB\Pica\Record\LocalRecord $record) { $this->addRecord($record); + $record->setTitleRecord($this); } /** @@ -114,6 +115,7 @@ class TitleRecord extends NestedRecord { */ public function removeLocalRecord (\HAB\Pica\Record\LocalRecord $record) { $this->removeRecord($record); + $record->unsetTitleRecord(); } /** diff --git a/src/tests/unit-tests/php/HAB/Pica/Record/CopyRecordTest.php b/src/tests/unit-tests/php/HAB/Pica/Record/CopyRecordTest.php index c84ae0d7cad5c46a9d4574a0da169351ec30d7b5..86cf24aed3122bff58fc7dc8b3632daafae00832 100644 --- a/src/tests/unit-tests/php/HAB/Pica/Record/CopyRecordTest.php +++ b/src/tests/unit-tests/php/HAB/Pica/Record/CopyRecordTest.php @@ -42,6 +42,17 @@ class CopyRecordTest extends \PHPUnit_FrameWork_TestCase { $this->assertEquals('epn', $r->getEPN()); } + public function testLocalRecordReference () { + $l = new LocalRecord(); + $c = new CopyRecord(); + $this->assertNull($c->getLocalRecord()); + $l->addCopyRecord($c); + $this->assertSame($l, $c->getLocalRecord()); + $c->unsetLocalRecord(); + $this->assertNull($c->getLocalRecord()); + $this->assertFalse($l->containsCopyRecord($c)); + } + /// /** diff --git a/src/tests/unit-tests/php/HAB/Pica/Record/LocalRecordTest.php b/src/tests/unit-tests/php/HAB/Pica/Record/LocalRecordTest.php index 98536afae3ef56a8b559c97fac0d538a101395be..3e864474e93e8eff86e5b8a76bb96b766744137f 100644 --- a/src/tests/unit-tests/php/HAB/Pica/Record/LocalRecordTest.php +++ b/src/tests/unit-tests/php/HAB/Pica/Record/LocalRecordTest.php @@ -111,6 +111,17 @@ class LocalRecordTest extends \PHPUnit_FrameWork_TestCase { $this->assertTrue($r->containsCopyRecord($c)); } + public function testTitleRecordReference () { + $t = new TitleRecord(); + $l = new LocalRecord(); + $this->assertNull($l->getTitleRecord()); + $t->addLocalRecord($l); + $this->assertSame($t, $l->getTitleRecord()); + $l->unsetTitleRecord(); + $this->assertNull($l->getTitleRecord()); + $this->assertFalse($t->containsLocalRecord($l)); + } + /// /**