org.freeplane.plugin.script.proxy

## Class Convertible

- java.lang.Object
- - groovy.lang.GroovyObjectSupport
  - - org.freeplane.plugin.script.proxy.Convertible

- All Implemented Interfaces:
    groovy.lang.GroovyObject

      public class Convertible
      extends groovy.lang.GroovyObjectSupport

  Utility class that is used to convert node texts to different types. It's especially important for Formulas.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `Convertible(java.lang.Object text)` same as toString(text), i.e. conversion is done properly.
    `Convertible(java.lang.String text)` doesn't evaluate formulas since this would require a calculation rule or NodeModel.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `asBoolean()` For implicit conversion to boolean: true if the text is not empty.
    `int` | `compareTo(Convertible convertible)`
    `int` | `compareTo(java.lang.Object string)`
    `boolean` | `equals(java.lang.Object obj)` note: if obj is a String the result is true if String.equals(text).
    `boolean` | `getBool()` parses the text (case insensitive) as boolean via `Boolean.parseBoolean(String)`.
    `java.util.Calendar` | `getCalendar()` returns a Calendar for the parsed text.
    `java.util.Date` | `getDate()` returns a Date for the parsed text.
    `java.lang.Number` | `getNum()` returns a Long or a Double, whatever fits best.
    `java.lang.Number` | `getNum0()` "Safe" variant of getNum(): returns a Long or a Double if text is convertible to it or 0 otherwise (even if text is null).
    `java.lang.Object` | `getObject()` Uses the following priority ranking to determine the type of the text: null Long Double Date String
    `java.lang.String` | `getPlain()`
    `java.lang.Object` | `getProperty(java.lang.String property)` pretend we are a String if we don't provide a property for ourselves.
    `java.lang.String` | `getString()`
    `java.lang.String` | `getText()`
    `Convertible` | `getTo()` Allow statements like this: `node['attr_name'].to.num`.
    `java.net.URI` | `getUri()`
    `int` | `hashCode()` since equals handles Strings special we have to stick to that here too since equal objects have to have the same hasCode.
    `java.lang.Object` | `invokeMethod(java.lang.String name, java.lang.Object args)` pretend we are a String if we don't provide a method for ourselves.
    `boolean` | `isDate()` returns true if the text is convertible to date.
    `boolean` | `isNum()` returns true if the text is convertible to number.
    `void` | `setProperty(java.lang.String property, java.lang.Object newValue)`
    `java.lang.String` | `toString()`
    `static java.lang.String` | `toString(java.lang.Object value)` has special conversions for Date and Calendar are converted by org.apache.commons.lang.time.DateFormatUtils.format(date, "yyyy-MM-dd'T'HH:mm:ss.SSSZ"), i.e. to GMT timestamps, e.g.: "2010-08-16T22:31:55.123+0000".

    - ### Methods inherited from class groovy.lang.GroovyObjectSupport

      `getMetaClass, setMetaClass`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### Convertible

          public Convertible(java.lang.String text)

      doesn't evaluate formulas since this would require a calculation rule or NodeModel.

    - #### Convertible

          public Convertible(java.lang.Object text)

      same as toString(text), i.e. conversion is done properly.

  - ### Method Detail

    - #### getNum

          public java.lang.Number getNum()
                                  throws org.freeplane.plugin.script.proxy.ConversionException

      returns a Long or a Double, whatever fits best. All Java number literals are allowed as described by `Long.decode(String)`
      Throws:
        `ConversionException` - if text is not a number.

    - #### getNum0

          public java.lang.Number getNum0()

      "Safe" variant of getNum(): returns a Long or a Double if text is convertible to it or 0 otherwise (even if text is null).
      Throws:
        `nothing` - - on any error (long) 0 is returned.

    - #### getString

          public java.lang.String getString()

    - #### getText

          public java.lang.String getText()

    - #### getPlain

          public java.lang.String getPlain()

    - #### getDate

          public java.util.Date getDate()
                                 throws org.freeplane.plugin.script.proxy.ConversionException

      returns a Date for the parsed text. The valid date patterns are "yyyy-MM-dd HH:dd:ss.SSSZ" with optional '-', ':'. ' ' may be replaced by 'T'.
      Throws:
        `ConversionException` - if the text is not convertible to a date.

    - #### getCalendar

          public java.util.Calendar getCalendar()
                                         throws org.freeplane.plugin.script.proxy.ConversionException

      returns a Calendar for the parsed text.
      Throws:
        `ConversionException` - if the text is not convertible to a date.

    - #### getUri

          public java.net.URI getUri()
                              throws org.freeplane.plugin.script.proxy.ConversionException

      Throws:
        `org.freeplane.plugin.script.proxy.ConversionException`

    - #### getObject

          public java.lang.Object getObject()

      Uses the following priority ranking to determine the type of the text:
      1. null
      2. Long
      3. Double
      4. Date
      5. String
      Returns:
        Object - the type that fits best.

    - #### getTo

          public Convertible getTo()

      Allow statements like this: `node['attr_name'].to.num`.

    - #### isNum

          public boolean isNum()

      returns true if the text is convertible to number.

    - #### isDate

          public boolean isDate()

      returns true if the text is convertible to date.

    - #### getProperty

          public java.lang.Object getProperty(java.lang.String property)

      pretend we are a String if we don't provide a property for ourselves.
      Specified by:
        `getProperty` in interface `groovy.lang.GroovyObject`
      Overrides:
        `getProperty` in class `groovy.lang.GroovyObjectSupport`

    - #### invokeMethod

          public java.lang.Object invokeMethod(java.lang.String name,
                                               java.lang.Object args)

      pretend we are a String if we don't provide a method for ourselves.
      Specified by:
        `invokeMethod` in interface `groovy.lang.GroovyObject`
      Overrides:
        `invokeMethod` in class `groovy.lang.GroovyObjectSupport`

    - #### toString

          public static java.lang.String toString(java.lang.Object value)

      has special conversions for
      - Date and Calendar are converted by org.apache.commons.lang.time.DateFormatUtils.format(date, "yyyy-MM-dd'T'HH:mm:ss.SSSZ"), i.e. to GMT timestamps, e.g.: "2010-08-16T22:31:55.123+0000".
      - null is "converted" to null
      All other types are converted via value.toString().

    - #### compareTo

          public int compareTo(java.lang.Object string)

    - #### compareTo

          public int compareTo(Convertible convertible)

    - #### hashCode

          public int hashCode()

      since equals handles Strings special we have to stick to that here too since equal objects have to have the same hasCode.
      Overrides:
        `hashCode` in class `java.lang.Object`

    - #### equals

          public boolean equals(java.lang.Object obj)

      note: if obj is a String the result is true if String.equals(text).
      Overrides:
        `equals` in class `java.lang.Object`

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`

    - #### setProperty

          public void setProperty(java.lang.String property,
                                  java.lang.Object newValue)

      Specified by:
        `setProperty` in interface `groovy.lang.GroovyObject`
      Overrides:
        `setProperty` in class `groovy.lang.GroovyObjectSupport`

    - #### getBool

          public boolean getBool()

      parses the text (case insensitive) as boolean via `Boolean.parseBoolean(String)`.

    - #### asBoolean

          public boolean asBoolean()

      For implicit conversion to boolean: true if the text is not empty.