[ 
https://issues.apache.org/jira/browse/JDO-483?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14663297#comment-14663297
 ] 

Tilmann Zäschke edited comment on JDO-483 at 8/9/15 7:17 AM:
-------------------------------------------------------------

I understand that this method basically provides state interrogation for 
fields. Would it make sense (also building on Andy's comment) to do something 
like the following instead? 

FieldState getFieldState(Object pc, String field);

enum FieldState {  HOLLOW, CLEAN, DIRTY, NOT_SUPPORTED; }

This could even be extended with DETACHED or similar.

Independent of this, I'm not sure that returning Boolean/null is ideal, even 
though it would be consistent with other parts of JDO. I think it is a bit 
awkward to always have to check for (!= null) before using a return value. An 
API may be easier to use if 'null' is avoided as return value.


was (Author: tilmann):
I understand that this method basically provides state interrogation for 
fields. Would it make sense (also building on Andy's comment) to do something 
like the following instead? 

FieldState getFieldState(Object pc, String field);

enum FieldState {  HOLLOW, CLEAN, DIRTY, NOT_SUPPORTED; };

This could even be extended with DETACHED or similar.

Independent of this, I'm not sure that returning Boolean/null is ideal, even 
though it would be consistent with other parts of JDO. I think it is a bit 
awkward to always have to check for (!= null) before using a return value. An 
API may be easier to use if 'null' is avoided as return value.

> Add JDOHelper.isLoaded methods
> ------------------------------
>
>                 Key: JDO-483
>                 URL: https://issues.apache.org/jira/browse/JDO-483
>             Project: JDO
>          Issue Type: Improvement
>          Components: api, api2-legacy
>    Affects Versions: JDO 2 maintenance release 1 (2.1)
>            Reporter: Matthew T. Adams
>             Fix For: JDO 3.2
>
>
> I'm putting forth a proposal to add a method to JDOHelper that allows users 
> to determine whether or not a given object's field is loaded.  There are two 
> options to handle implementations that won't/can't support loaded field 
> checking, especially when detached (essentially binary compatible v. 
> non-binary compatible implementations).  Option A adopts an approach that 
> uses Boolean objects instead of primitives, leaving null as a return value 
> for implementations that won't/can't support it.  Option B takes an 
> exception-based approach and uses boolean primitives.  I'm not sure which I 
> prefer; let's discuss.
>  
> <proposal option="A">
>  
> JDOHelper
>  
> Checking whether fields are loaded
>  
> In some use cases, an application may need to know whether or not a given 
> field is loaded, for example when marshaling data from detached objects to 
> data transfer objects (DTOs).
>  
> Transient fields
>  
> Transient fields are always considered loaded.
>  
> Implementation support
>  
> Some implementations may not be able to support the ability to check the 
> loaded status of a field, especially when the object is detached.  If the 
> implementation does not support checking whether a field is loaded, then it 
> must return null from the isLoaded methods.
>  
> Boolean isLoaded(String fieldName, Object pc);
>  
> If the field in the most-derived class of the given object's class identified 
> by the given name is loaded in the given object, Boolean.TRUE is returned.  
> If the field is not loaded, Boolean.FALSE is returned.  If the given field 
> name is not declared by the given object's class or its direct or indirect 
> superclasses, then JDOUserException is thrown.  If the implementation does 
> not support checking the loaded state of a field, null is returned.  This 
> method is equivalent to calling isLoaded(fieldName, pc, pc.getClass());
>  
> Boolean isLoaded(String fieldName, Object pc, Class c);
>  
> This method exists to support the case where a class hides fields defined in 
> a superclass and an application wants to determine the loaded state of the 
> field in the superclass.  In most cases, the given Class, c, will be 
> identical to the class of the given object, pc (that is, c == pc.getClass() 
> will return true).  If the class of the given object, pc, is a subclass of 
> the given Class, c, then the loaded state of the field defined on c is given. 
>  If the given Class c is not identical to the class of or a superclass of the 
> given object, pc, then JDOUserException is thrown.  If the given Class 
> represents an interface, then JDOUserException is thrown.
>  
> If the field of the given class is loaded, Boolean.TRUE is returned.  If the 
> field is not loaded, Boolean.FALSE is returned.  If the implementation does 
> not supporting checking the loaded state of a field, null is returned.
>  
> </proposal>
>  
> <proposal option="B">
>  
> JDOHelper
>  
> Checking whether fields are loaded
>  
> In some use cases, an application may need to know whether or not a given 
> field is loaded, for example, when marshaling data from detached objects to 
> data transfer objects (DTOs).
>  
> Transient fields
>  
> Transient fields are always considered loaded.
>  
> Implementation support
>  
> Some implementations may not be able to support the ability to check the 
> loaded status of a field, especially when the object is detached.  If the 
> implementation does not support checking whether a field is loaded, then it 
> must throw JDOUnsupportedOperationException from the isLoaded methods.
>  
> boolean isLoaded(String fieldName, Object pc);
>  
> If the field in the most-derived class of the given object's class identified 
> by the given name is loaded in the given object, true is returned, otherwise 
> false is returned.  If the given field name is not defined by the given 
> object's class or its direct or indirect superclasses, then a 
> JDOUserException is thrown.  If the implementation does not support checking 
> the loaded state of a field, JDOUnsupportedOptionException is thrown.  This 
> method is equivalent to calling isLoaded(fieldName, pc, pc.getClass());
>  
> boolean isLoaded(String fieldName, Object pc, Class c);
>  
> This method exists to support the case where a class hides fields defined in 
> a superclass and an application wants to determine the loaded state of the 
> field in the superclass.  In most cases, the given Class, c, will be 
> identical to the class of the given object, pc.  If the class of the given 
> object, pc, is a subclass of the given Class, c, then the loaded state of the 
> field defined on c is given.  If the given Class c is not identical to the 
> class and is not a superclass of the given object, pc, then a 
> JDOUserException is thrown.  If the given Class represents an interface, then 
> JDOUserException is thrown.
>  
> If the field of the given class is loaded, true is returned, otherwise false 
> is returned.  If the implementation does not support checking the loaded 
> state of a field, JDOUnsupportedOptionException is thrown.
>  
> </proposal>



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to