org.freeplane.plugin.script.proxy

## Interface Proxy.Attributes

- All Superinterfaces:
    Proxy.AttributesRO
  Enclosing interface:
    Proxy

      public static interface Proxy.Attributes
      extends Proxy.AttributesRO

  Node's attribute table: `node.attributes` - read-write.

  Notes on attribute setters:

  - All setter methods try to convert strings to dates, numbers or URIs.
  - All setter methods apply a default formatting (for display) of the value for dates and numbers.
  - Attributes don't have style properties so the value objects must know about the right formatting for themselves.
  - To enforce a certain formatting use format():

        node['creationDate'] = format(new Date(), 'MM/yyyy')

  Examples:

         // == text
         node["attribute name"] = "a value"
         assert node["attribute name"].text == "a value"
         assert node.attributes.getFirst("attribute name") == "a value" // the same

         // == numbers and others
         // converts numbers and other stuff with toString()
         node["a number"] = 1.2
         assert node["a number"].text == "1.2"
         assert node["a number"].num == 1.2d

           *   // == dates
         def date = new Date()
         node["a date"] = date
         assert node["a date"].object.getClass().simpleName == "FormattedDate"
         assert node["a date"].date == format(date)

         // == enforce formats on attribute values
         node["another date"] = format(date, 'yyyy|MM|dd')
         assert node["another date"].date == format(date, 'yyyy|MM|dd')

         // change the date while keeping the silly format
         def index = node.attributes.findAttribute("another date")
         node.attributes.set(index, new Date(0L))

         // == URIs
         def uri = new URI("http://www.freeplane.org")
         node["uri"] = uri
         assert node["uri"].object.getClass().simpleName == "URI"
         assert node["uri"].object == uri

         // == remove an attribute
         node["removed attribute"] = "to be removed"
         assert node["removed attribute"] == "to be removed"
         node["removed attribute"] = null
         assert node.attributes.findFirst("removed attribute") == -1

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `add(java.lang.String name, java.lang.Object value)` adds an attribute no matter if an attribute with the given name already exists.
    `void` | `clear()` removes all attributes.
    `java.util.Iterator<java.util.Map.Entry<java.lang.String,java.lang.Object>>` | `iterator()` allows application of Groovy collection methods like each(), collect(), ...
    `void` | `optimizeWidths()` optimize widths of attribute view columns according to contents.
    `void` | `remove(int index)` removes the attribute at the given index.
    `boolean` | `remove(java.lang.String name)` Deprecated. before 1.1 - use `remove(int)` or `removeAll(String)` instead.
    `boolean` | `removeAll(java.lang.String name)` removes all attributes with this name.
    `void` | `set(int index, java.lang.Object value)` sets the value of the attribute at an index.
    `void` | `set(int index, java.lang.String name, java.lang.Object value)` sets name and value of the attribute at the given index.
    `void` | `set(java.lang.String name, java.lang.Object value)` adds an attribute if there is no attribute with the given name or changes the value of the first attribute with the given name.

    - ### Methods inherited from interface org.freeplane.plugin.script.proxy.Proxy.AttributesRO

      `containsKey, findAttribute, findFirst, findValues, get, get, getAll, getAttributeNames, getFirst, getKey, getMap, getNames, getValues, isEmpty, size`

- - ### Method Detail

    - #### set

          void set(int index,
                   java.lang.Object value)

      sets the value of the attribute at an index. This method will not create new attributes.
      Throws:
        `java.lang.IndexOutOfBoundsException` - if index is out of range `(index < 0 || index >= size())`.

    - #### set

          void set(int index,
                   java.lang.String name,
                   java.lang.Object value)

      sets name and value of the attribute at the given index. This method will not create new attributes.
      Throws:
        `java.lang.IndexOutOfBoundsException` - if index is out of range `(index < 0 || index >= size())`.

    - #### remove

          @Deprecated
          boolean remove(java.lang.String name)

      Deprecated. before 1.1 - use `remove(int)` or `removeAll(String)` instead.
      removes the first attribute with this name.
      Returns:
        true on removal of an existing attribute and false otherwise.

    - #### removeAll

          boolean removeAll(java.lang.String name)

      removes all attributes with this name.
      Returns:
        true on removal of an existing attribute and false otherwise.

    - #### remove

          void remove(int index)

      removes the attribute at the given index.
      Throws:
        `java.lang.IndexOutOfBoundsException` - if index is out of range `(index < 0 || index >= size())`.

    - #### set

          void set(java.lang.String name,
                   java.lang.Object value)

      adds an attribute if there is no attribute with the given name or changes the value of the first attribute with the given name.

    - #### add

          void add(java.lang.String name,
                   java.lang.Object value)

      adds an attribute no matter if an attribute with the given name already exists.

    - #### clear

          void clear()

      removes all attributes.
      Since:
        1.2

    - #### iterator

          java.util.Iterator<java.util.Map.Entry<java.lang.String,java.lang.Object>> iterator()

      allows application of Groovy collection methods like each(), collect(), ...

             def keyList = node.attributes.collect { it.key }
             def values = node.attributes.collect { it.value }
             node.attributes.each {
                 if (it.key =~ /.*day/)
                     it.value += ' days'
             }

      Since:
        1.3.2

    - #### optimizeWidths

          void optimizeWidths()

      optimize widths of attribute view columns according to contents.
      Since:
        1.4