You might also consider overloaded methods on interface FetchGroup,
just for completeness:
// (importing java.lang.reflect.Field)
FetchGroup add(Field field);
FetchGroup remove(Field field);
boolean hasField(Field field); // or has(Field) -- I'd consider
better verb
Field[] getFields();
The add & remove methods should throw if the Field isn't contained in
the class.
-matthew
On Nov 13, 2007, at 2:32 AM, Andy Jefferson wrote:
> Below is a proposal that could possibly be included in a JDO2.2 (or
> in JDO2.1
> if feedback is positive for that, and JPOX already implements it).
>
> ========================================
> Problem : fetch groups are static, defined in metadata (XML/
> annotations).
> Sometimes it would be more convenient to be able to define fetch
> groups
> dynamically, for example based on user interaction in a web system.
>
> ========================================
> Proposal :
> We add a new interface defining a FetchGroup, where a FetchGroup has a
> symbolic name and is for a class defining the fields of that class
> that are
> in the fetch group.
>
> public interface FetchGroup
> {
> String getName(); // Symbolic name (as also used in MetaData)
> String getClassName(); // Class to which this group refers
> FetchGroup add(String fieldName); // Add a field
> FetchGroup remove(String fieldName); // Remove a field
>
> boolean hasField(String fieldName);
> String[] getFieldNames();
>
> void setPostLoad(boolean postLoad);
> boolean getPostLoad();
> }
>
> We allow users to register/deregister their FetchGroups with the PMF
>
> PersistenceManagerFactory
> {
> ...
> void addFetchGroup(FetchGroup grp);
> void removeFetchGroup(String name, Class cls);
> FetchGroup createFetchGroup(String name, Class cls);
> FetchGroup getFetchGroup(String grpName, Class cls);
> FetchGroup[] getFetchGroups();
> void clearFetchGroups();
> }
>
> ========================================
> Usage:
> FetchGroup grp1 = pmf.createFetchGroup("myGroup1", MyClass.class);
> grp1.add("field1").add("field2").add("field4");
> pmf.addFetchGroup(grp1); // FetchGroup registered
>
> pm.getFetchPlan().setGroup("myGroup1"); // FetchGroup used in this
> plan
> // FetchPlan now has MyClass {field1, field2, field4}
>
> We can then also allow dynamic changes like
> pmf.getFetchGroup("myGroup1", MyClass.class).add("field7");
> and this is directly reflected in the FetchPlan
>
>
>
> Possible changes:-
> 1. PMF has createFetchGroup and addFetchGroup and we could merge
> these so when
> creating a FetchGroup it is added
> 2. Doesnt support "recursion-depth" specification when adding a
> field to a
> FetchGroup, so we could add a method "add(String fieldName, int
> depth)"
>
>
> --
> Andy (Java Persistent Objects -
http://www.jpox.org)