Class FetchGroup<T>

  • Type Parameters:
    T - Class that this FetchGroup is for
    All Implemented Interfaces:
    java.io.Serializable

    public class FetchGroup<T>
    extends java.lang.Object
    implements java.io.Serializable
    Group of fields for fetching, to be used by a FetchPlan. Defined at runtime, via the API (aka dynamic fetch group). Shared by FetchPlan's, so can be used by multiple threads.
    See Also:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String ALL  
      static java.lang.String BASIC  
      private java.lang.Class<T> cls
      The class that this group is for.
      static java.lang.String DEFAULT  
      private java.util.Set<java.lang.String> memberNames
      Names of the fields/properties of the class that are part of this group.
      static java.lang.String MULTIVALUED  
      private java.lang.String name
      Name of the group.
      private NucleusContext nucleusCtx
      Context.
      private java.util.Collection<FetchPlan> planListeners
      FetchPlans listening to this group for changes.
      private boolean postLoad
      Whether the postLoad callback is to be called when this group is loaded.
      private java.util.Map<java.lang.String,​java.lang.Integer> recursionDepthByMemberName
      Map of recursion depth, keyed by the member name.
      static java.lang.String RELATIONSHIP  
      private static long serialVersionUID  
      private boolean unmodifiable
      Whether this group can be modified.
    • Constructor Summary

      Constructors 
      Constructor Description
      FetchGroup​(FetchGroup<T> grp)
      Constructor to take a copy of the supplied group, but modifiable.
      FetchGroup​(NucleusContext nucleusCtx, java.lang.String name, java.lang.Class<T> cls)
      Constructor.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      FetchGroup addCategory​(java.lang.String categoryName)
      Convenience method to add the members for the specified category.
      FetchGroup addMember​(java.lang.String memberName)
      Method to add a field of the class to the fetch group.
      FetchGroup addMembers​(java.lang.String[] members)  
      private void assertNotMember​(java.lang.String memberName)
      Method to throw an exception if the specified member is not a member of this class.
      private void assertUnmodifiable()
      Method to throw an exception if the fetch group is currently unmodifiable.
      void deregisterListener​(FetchPlan plan)
      Method to deregister a listener for changes to this FetchGroup.
      void disconnectFromListeners()
      Method to disconnect this fetch group from all listeners since the group is removed from use.
      boolean equals​(java.lang.Object obj)  
      java.util.Collection<FetchPlan> getListenerFPs()  
      private java.lang.String[] getMemberNamesForCategory​(java.lang.String categoryName)
      Convenience accessor to return the member names for the specified category name.
      java.util.Set<java.lang.String> getMembers()  
      private AbstractClassMetaData getMetaDataForClass()  
      java.lang.String getName()
      Accessor for the group name.
      boolean getPostLoad()
      Accessor for whether to call postLoad when this group is loaded.
      int getRecursionDepth​(java.lang.String memberName)
      Accessor for the recursion depth for the specified field/property.
      java.lang.Class<T> getType()
      Accessor for the class that this group is for.
      int hashCode()  
      boolean isUnmodifiable()
      Accessor for modifiability status of this group.
      private void notifyListeners()
      Method to notify all FetchPlan listeners that this group has changed.
      void registerListener​(FetchPlan plan)
      Method to register a listener for changes to this FetchGroup.
      FetchGroup removeCategory​(java.lang.String categoryName)
      Convenience method to remove the members for the specified category.
      FetchGroup removeMember​(java.lang.String memberName)
      Method to remove a field of the class from the fetch group.
      FetchGroup removeMembers​(java.lang.String[] members)  
      void setPostLoad​(boolean postLoad)
      Mutator for whether the postLoad callback should be called on loading this fetch group.
      FetchGroup setRecursionDepth​(java.lang.String memberName, int recursionDepth)
      Method to set the recursion depth for the specified field/property.
      FetchGroup setUnmodifiable()
      Method to make the group unmodifiable.
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    • Field Detail

      • name

        private java.lang.String name
        Name of the group.
      • cls

        private java.lang.Class<T> cls
        The class that this group is for.
      • postLoad

        private boolean postLoad
        Whether the postLoad callback is to be called when this group is loaded.
      • memberNames

        private java.util.Set<java.lang.String> memberNames
        Names of the fields/properties of the class that are part of this group.
      • recursionDepthByMemberName

        private java.util.Map<java.lang.String,​java.lang.Integer> recursionDepthByMemberName
        Map of recursion depth, keyed by the member name. Only has entries when not using default.
      • planListeners

        private java.util.Collection<FetchPlan> planListeners
        FetchPlans listening to this group for changes.
      • unmodifiable

        private boolean unmodifiable
        Whether this group can be modified.
    • Constructor Detail

      • FetchGroup

        public FetchGroup​(NucleusContext nucleusCtx,
                          java.lang.String name,
                          java.lang.Class<T> cls)
        Constructor.
        Parameters:
        nucleusCtx - Context
        name - Name of the group
        cls - The class
      • FetchGroup

        public FetchGroup​(FetchGroup<T> grp)
        Constructor to take a copy of the supplied group, but modifiable.
        Parameters:
        grp - The existing group
    • Method Detail

      • getName

        public java.lang.String getName()
        Accessor for the group name.
        Returns:
        Name of the group
      • getType

        public java.lang.Class<T> getType()
        Accessor for the class that this group is for.
        Returns:
        the class
      • setPostLoad

        public void setPostLoad​(boolean postLoad)
        Mutator for whether the postLoad callback should be called on loading this fetch group.
        Parameters:
        postLoad - Whether the postLoad callback should be called.
      • getPostLoad

        public boolean getPostLoad()
        Accessor for whether to call postLoad when this group is loaded.
        Returns:
        Whether to call postLoad
      • getRecursionDepth

        public int getRecursionDepth​(java.lang.String memberName)
        Accessor for the recursion depth for the specified field/property.
        Parameters:
        memberName - Name of field/property
        Returns:
        The recursion depth
      • setRecursionDepth

        public FetchGroup setRecursionDepth​(java.lang.String memberName,
                                            int recursionDepth)
        Method to set the recursion depth for the specified field/property.
        Parameters:
        memberName - Name of field/property
        recursionDepth - Recursion depth
        Returns:
        The fetch group
      • setUnmodifiable

        public FetchGroup setUnmodifiable()
        Method to make the group unmodifiable. Once unmodifiable it cannot be made modifiable again.
        Returns:
        This group
      • isUnmodifiable

        public boolean isUnmodifiable()
        Accessor for modifiability status of this group.
        Returns:
        Whether it is no longer modifiable
      • addCategory

        public FetchGroup addCategory​(java.lang.String categoryName)
        Convenience method to add the members for the specified category. Supports the categories defined in the JDO spec.
        Parameters:
        categoryName - Name of the category
        Returns:
        This group
      • removeCategory

        public FetchGroup removeCategory​(java.lang.String categoryName)
        Convenience method to remove the members for the specified category. Supports the categories defined in the JDO spec.
        Parameters:
        categoryName - Name of the category
        Returns:
        This group
      • getMemberNamesForCategory

        private java.lang.String[] getMemberNamesForCategory​(java.lang.String categoryName)
        Convenience accessor to return the member names for the specified category name.
        Parameters:
        categoryName - Name of the category
        Returns:
        The member names
      • getMembers

        public java.util.Set<java.lang.String> getMembers()
      • addMember

        public FetchGroup addMember​(java.lang.String memberName)
        Method to add a field of the class to the fetch group.
        Parameters:
        memberName - Name of the field/property
        Returns:
        This FetchGroup
        Throws:
        NucleusUserException - if the field/property doesn't exist for this class
      • removeMember

        public FetchGroup removeMember​(java.lang.String memberName)
        Method to remove a field of the class from the fetch group.
        Parameters:
        memberName - Name of the field/property
        Returns:
        This FetchGroup
        Throws:
        NucleusUserException - if the field/property doesn't exist for this class
      • addMembers

        public FetchGroup addMembers​(java.lang.String[] members)
      • removeMembers

        public FetchGroup removeMembers​(java.lang.String[] members)
      • notifyListeners

        private void notifyListeners()
        Method to notify all FetchPlan listeners that this group has changed.
      • getListenerFPs

        public java.util.Collection<FetchPlan> getListenerFPs()
      • registerListener

        public void registerListener​(FetchPlan plan)
        Method to register a listener for changes to this FetchGroup.
        Parameters:
        plan - The FetchPlan that is listening
      • deregisterListener

        public void deregisterListener​(FetchPlan plan)
        Method to deregister a listener for changes to this FetchGroup.
        Parameters:
        plan - The FetchPlan that is no longer listening
      • disconnectFromListeners

        public void disconnectFromListeners()
        Method to disconnect this fetch group from all listeners since the group is removed from use.
      • assertUnmodifiable

        private void assertUnmodifiable()
        Method to throw an exception if the fetch group is currently unmodifiable.
      • assertNotMember

        private void assertNotMember​(java.lang.String memberName)
        Method to throw an exception if the specified member is not a member of this class.
        Parameters:
        memberName - Name of the field/property
        Throws:
        NucleusUserException
      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object