Class ArrayFieldSetter

  • All Implemented Interfaces:
    Getter, Setter

    final class ArrayFieldSetter
    extends java.lang.Object
    implements Getter, Setter
    Setter that allows multiple values to be stored into one array field.

    Because of the CmdLineParser abstractions of allowing incremental parsing of options, this implementation creates a whole new array each time a new value is found. This is also why we don't support a setter method that takes list/array as arguments.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.Object bean  
      private java.lang.Object defaultArray  
      private java.lang.reflect.Field f  
    • Constructor Summary

      Constructors 
      Constructor Description
      ArrayFieldSetter​(java.lang.Object bean, java.lang.reflect.Field f)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addValue​(java.lang.Object value)
      Adds/sets a value to the property of the option bean.
      java.lang.reflect.AnnotatedElement asAnnotatedElement()
      Returns the AnnotatedElement by which you can access annotations written on this setter.
      FieldSetter asFieldSetter()
      If this setter encapsulates a field, return the direct access to that field as FieldSetter.
      private void doAddValue​(java.lang.Object bean, java.lang.Object value)  
      private void doSetDefault​(java.lang.Object bean)  
      java.lang.Class getType()
      Gets the type of the underlying method/field.
      java.util.List<java.lang.Object> getValueList()
      Gets the current value of the property.
      boolean isMultiValued()
      Whether this setter is intrinsically multi-valued.
      private void trySetDefault​(java.lang.Object bean1)
      Remember default so we throw away the default when adding user values.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • bean

        private final java.lang.Object bean
      • f

        private final java.lang.reflect.Field f
      • defaultArray

        private java.lang.Object defaultArray
    • Constructor Detail

      • ArrayFieldSetter

        public ArrayFieldSetter​(java.lang.Object bean,
                                java.lang.reflect.Field f)
    • Method Detail

      • trySetDefault

        private void trySetDefault​(java.lang.Object bean1)
                            throws java.lang.IllegalAccessError
        Remember default so we throw away the default when adding user values.
        Throws:
        java.lang.IllegalAccessError
      • doSetDefault

        private void doSetDefault​(java.lang.Object bean)
                           throws java.lang.IllegalAccessException
        Throws:
        java.lang.IllegalAccessException
      • asFieldSetter

        public FieldSetter asFieldSetter()
        Description copied from interface: Setter
        If this setter encapsulates a field, return the direct access to that field as FieldSetter. This method serves two purposes:
        1. This lets OptionHandlers bypass the collection/array handling of fields. This is useful if you're defining an option handler that produces array or collection from a single argument.
        2. The other is to retrieve the current value of the field (via FieldSetter.getValueList()).
        Specified by:
        asFieldSetter in interface Setter
        Returns:
        null if this setter wraps a method.
      • asAnnotatedElement

        public java.lang.reflect.AnnotatedElement asAnnotatedElement()
        Description copied from interface: Setter
        Returns the AnnotatedElement by which you can access annotations written on this setter. This is the same AnnotatedElement that had Option/Argument.

        This enables OptionHandler to further tweak its behavior based on additional annotations.

        Specified by:
        asAnnotatedElement in interface Setter
      • isMultiValued

        public boolean isMultiValued()
        Description copied from interface: Setter
        Whether this setter is intrinsically multi-valued.

        When parsing arguments (instead of options), intrinsically multi-valued setters consume all the remaining arguments. So, if the setter can store multiple values, this method should return true.

        This characteristics of a setter doesn't affect option parsing at all; any options can be specified multiple times. In many cases, this is a no-op--but when your shell script expands multiple environment variables (each of which may contain options), tolerating such redundant options can be useful.

        Specified by:
        isMultiValued in interface Setter
      • getType

        public java.lang.Class getType()
        Description copied from interface: Setter
        Gets the type of the underlying method/field.
        Specified by:
        getType in interface Setter
      • addValue

        public void addValue​(java.lang.Object value)
        Description copied from interface: Setter
        Adds/sets a value to the property of the option bean.

        A Setter object has an implicit knowledge about the property it's setting, and the instance of the option bean.

        Specified by:
        addValue in interface Setter
      • doAddValue

        private void doAddValue​(java.lang.Object bean,
                                java.lang.Object value)
                         throws java.lang.IllegalAccessException
        Throws:
        java.lang.IllegalAccessException
      • getValueList

        public java.util.List<java.lang.Object> getValueList()
        Description copied from interface: Getter
        Gets the current value of the property.

        A Getter object has an implicit knowledge about the property it's getting, and the instance of the option bean.

        Specified by:
        getValueList in interface Getter
        Returns:
        empty list or null if there's no current value.