[
https://issues.apache.org/jira/browse/PDFBOX-2459?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14544638#comment-14544638
]
John Hewson edited comment on PDFBOX-2459 at 5/14/15 11:58 PM:
---------------------------------------------------------------
While the getInheritableAttribute() is obviously an important and useful API,
as seen in PDPageTree, in PDField we also see that it has two counterparts
setInheritableAttribute() and removeInheritableAttribute(). However, those
methods are not meaningful, as rather than inheriting values down the
hierarchy, they attempt to propagate new values back up the hierarchy.
Setting and removing attributes must always be done on the local tree node,
it's not meaningful to try and propagate such changes upwards. For example, in
a form in which a group of fields all inherit the same value, e.g. "Please fill
this field", whenever we call setValue() on a given field,
setInheritableAttribute() will not set the local field value, but the parent
value, causing all fields to change their value and preventing the child fields
from ever having unique values. The same applies to any other inheritable
attribute, setting the border style of a child field will cause all its
siblings to be changed too. Worse still, with setInheritableAttribute() it's
impossible to fill fields which don't already have a value.
Instead, all field operations should be local, except for getting attributes,
which use getInheritableAttribute(). This is what the commit above does.
was (Author: jahewson):
While the getInheritableAttribute() is obviously an important and useful API,
as seen in PDPageTree, in PDField we also see that it has two counterparts
setInheritableAttribute() and removeInheritableAttribute(). However, those
methods are not meaningful, as rather than inheriting values down the
hierarchy, they attempt to propagate new values back up the hierarchy.
Setting and removing attributes must always be done on the local tree node,
it's not meaningful to try and propagate such changes upwards. For example, in
a form in which a group of fields all inherit the same value, e.g. "Please fill
this field", whenever we call setValue() on a given field,
setInheritableAttribute() will not set the local field value, but the parent
value, causing all fields to change their value and preventing the child fields
from ever having unique values. The same applies to any other inheritable
attribute, setting the border style of a child field will cause all its
siblings to be changed too.
Instead, all field operations should be local, except for getting attributes,
which use getInheritableAttribute(). This is what the commit above does.
> Share functionality between Page Tree and Field Tree
> ----------------------------------------------------
>
> Key: PDFBOX-2459
> URL: https://issues.apache.org/jira/browse/PDFBOX-2459
> Project: PDFBox
> Issue Type: Improvement
> Components: PDModel
> Affects Versions: 2.0.0
> Reporter: Maruan Sahyoun
> Assignee: John Hewson
> Priority: Minor
> Fix For: 2.0.0
>
>
> The PDFs page tree and AcroForms field tree share some common functionality
> e.g. resolving inheritable attributes, iterating through leafs and such which
> could be combined into a PDTree class.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]