Created Polyglot compatibility (markdown)

Enrique Zamudio
2016-07-04 10:21:49 -05:00
parent f2000f6cf9
commit 7708a6c2cc
+66
@@ -0,0 +1,66 @@
# Groovy compatibility
## Isn't ANY Java library compatible with Groovy?
Yes, of course. You can use j8583 in Groovy just as you would use any other Java library. However,
some j8583 classes have certain methods in them written specifically for usage within Groovy.
### j8583 short-hand in Groovy
In Java, you can deal with values in an IsoMessage like this:
```java
message.setValue(32, "Some value", IsoType.LLVAR, 0);
IsoValue isoValue = message.getField(32);
String value = (String)message.getObjectValue(32);
Object value2 = message.getField(32).getValue();
```
In Groovy you can do the same like this
```groovy
message[32] = IsoType.LLVAR("Some value")
message[7] = IsoType.DATE10(new Date())
message[41] = IsoType.ALPHA("Term", 16)
message[11] = IsoType.NUMERIC(123, 6)
IsoValue isoValue = message[32]
def value = message[32]?.value
```
This is because the `IsoMessage` class has get `getAt()` and `putAt()` methods that work similar
to `getField()` and `setField`, and the `IsoType` class has two `call()` methods, with and without
length, which return `IsoValue` instances with the proper type and length. The variant that has a length parameter
must be used with NUMERIC and ALPHA types, and the other types can use the variant without length.
# Scala compatibility
In a similar fashion, you can use a shorter notation in Scala to set and get fields:
```scala
message(32) = IsoType.LLVAR("Some value")
message(7) = IsoType.DATE10(new Date())
message(41) = IsoType.ALPHA("Term", 16)
message(11) = IsoType.NUMERIC(123, 6)
val v1:String = message(32).getValue
val v2:String = message.getObjectValue(32)
```
This is because IsoMessage also implements the `apply()` and `update()` methods that work similarly to `getField()` and `setField()`. Also, `IsoType` now implements `apply()` so that you can create IsoValues from IsoTypes.
### Builder Pattern
In any language, you can use the builder pattern, since now the `setValue` and `setField` methods return the message itself:
```java
message.setValue(4, amount, IsoType.AMOUNT, 12)
.setValue(7, new Date(), IsoType.DATE, 10)
.setValue(11, trace, IsoType.NUMERIC, 6);
```
Of course it can be more succint in Groovy or Scala:
```groovy
message.setField(4, IsoType.AMOUNT(amount))
.setField(7, IsoType.DATE(new Date()))
.setField(11, IsoType.NUMERIC(trace, 6))
```