From c0504b7de3e471e5846875f3b649427b88b1cfb1 Mon Sep 17 00:00:00 2001 From: David Maus <maus@hab.de> Date: Mon, 6 Aug 2012 13:50:10 +0200 Subject: [PATCH] Set and get containing parent records * php/HAB/Pica/Record/TitleRecord.php (removeLocalRecord) (addLocalRecord): Set and unset parent record reference. * php/HAB/Pica/Record/LocalRecord.php (getTitleRecord) (unsetTitleRecord, setTitleRecord): New functions. Set, get, unset containing title record. (addCopyRecord, removeCopyRecord): Set and unset parent record reference. * php/HAB/Pica/Record/CopyRecord.php (getLocalRecord) (unsetLocalRecord, setLocalRecord): New functions. Set, get, unset containing local record. --- src/php/HAB/Pica/Record/CopyRecord.php | 38 ++++++++++++++++++ src/php/HAB/Pica/Record/LocalRecord.php | 40 +++++++++++++++++++ src/php/HAB/Pica/Record/TitleRecord.php | 2 + .../php/HAB/Pica/Record/CopyRecordTest.php | 11 +++++ .../php/HAB/Pica/Record/LocalRecordTest.php | 11 +++++ 5 files changed, 102 insertions(+) diff --git a/src/php/HAB/Pica/Record/CopyRecord.php b/src/php/HAB/Pica/Record/CopyRecord.php index 98cc095..b3ac3fd 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 c959c99..48c4fed 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 6ec2c76..6dd7fe5 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 c84ae0d..86cf24a 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 98536af..3e86447 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)); + } + /// /** -- GitLab