@Uݫe setFontWeight1UKsj setfontweightUpUPUxQ0Q`ȱU0 U%ǽC getFontFamilyUPUPU^QPQ`ȱU0U~ getfontfamilyUUPU^QQ`ȱU0U׎ getFontSize10U ؎ getfontsizepUUPU^QQ`ȱU0`Ui getFontStyle1U"i getfontstylePUUPU^QQ`ȱU0@UĠC getFontWeight1U ~ getfontweightUpUPU^QPQ`ȱUUpropagateWrite($id, $data); // Then write this result in current layer $data = $this->saveWritePropagationResult($id, $data); return $data; } /** * Propagate read to the lower layer. * * @param string $field The field to read * * @return mixed|null * * @throws DataLayerException */ protected function propagateRead($field) { if (isset($this->lowerDataLayer)) { return $this->lowerDataLayer->read($field); } return null; } /** * Propagate write to lower layer. * * @param mixed $id * The data object identifier * @param mixed $data * The data object to write into this field * * @return mixed * The data object to be written by the upper data layer * * @throws DataLayerException * When write fails */ protected function propagateWrite($id, $data) { if (isset($this->lowerDataLayer)) { return $this->lowerDataLayer->write($id, $data); } return $data; } /** * Save data object received from lower layers after a Read request. * * This data object is written in the current layer to avoid read propagation next time. * * @param mixed $id * Data object identifier * @param mixed $data * Data object received from lower layers * * @throws DataLayerException * When write failed */ protected function saveReadPropagationResult($id, $data) { if ($this->isWritable()) { try { $this->doWrite($id, $data); } catch (Exception $e) { throw new DataLayerException('Unable to write into "' . $id . '"" (data layer : "' . get_class($this) . '")', 0, $e); } } } /** * Save data object received from lower layers after a Write request. * * This data object is written in the current layer after lower layers have hydrated/updated (and written) it * * @param mixed $id * Data object identifier * @param mixed $data * Data object received from lower layers * * @return mixed * Data object to be written by upper layer * * @throws DataLayerException * When write failed */ protected function saveWritePropagationResult($id, $data) { if ($this->isWritable()) { // If update needed before write $data = $this->beforeWrite($data); try { $this->doWrite($id, $data); } catch (Exception $e) { throw new DataLayerException('Unable to write into "' . $id . '" (data layer "' . get_class($this) . '")', 0, $e); } // If update needed after write $data = $this->afterWrite($data); } return $data; } /** * Process some updates on $data before writing it in the current layer. * * @param mixed $data * Data object to be updated before write * * @return mixed * The updated data object */ protected function beforeWrite($data) { return $data; } /** * Process some updates on $data after writing it in the current layer. * * @param mixed $data * Data object to be updated after write * * @return mixed * The updated data object */ protected function afterWrite($data) { return $data; } /** * Actually read a data object into the current layer. * * Might be a file access, cache read, DB select... * * @param mixed $id The data object identifier * * @return mixed|null The wanted data object (null if not found) * * @throws DataLayerException When read fails */ abstract protected function doRead($id); /** * Actually write a data object into the current layer. * * Might be a file edit, cache update, DB insert/update... * * @param mixed $id * The data object identifier * @param mixed $data * The data object to be written * * @throws DataLayerException * When write fails */ abstract protected function doWrite($id, $data); }