Gloop object types
Data models are like JavaBeans in that they have fields (or in Java-speak, properties). This page describes the types of properties you can add to a Data Model, and what types of objects or values they can store.
A Gloop object is an instance of any of those types. Gloop objects of all types have extra properties of their own, which we will call meta-properties. These meta-properties assist Gloop in reading and writing to XML, JSON, and YAML; help enrich the user interfaces of Martini; and help better describe Gloop APIs when they're exposed as REST and SOAP web services.
Available object types
Below is a table that shows the types of properties that a model can store (in alphabetical order). Also in this list is
an Object
type. This means that a Gloop object isn't limited to having a basic type; you could use a Gloop
Object
object1 to reference a Java or Groovy object (via setting its class name).
Gloop Object Type | Wrapped Java Equivalent |
---|---|
BigDecimal |
java.math.BigDecimal |
BigInteger |
java.math.BigInteger |
Boolean |
java.lang.Boolean |
Byte |
java.lang.Byte |
ByteArray |
byte [] |
Character |
java.lang.Character |
Date |
java.util.Date |
Double |
java.lang.Double |
Float |
java.lang.Float |
Integer |
java.lang.Integer |
Long |
java.lang.Long |
Model |
N/A |
Object |
java.lang.Object |
Short |
java.lang.Short |
String |
java.lang.String |
Meta-properties
This section describes all of the meta-properties and lists which objects support them. The meta-properties below will help your Gloop objects and Data Models perform self-validation, as well as help you when reading and writing Gloop data in various formats.
Some meta-properties are only present in certain Gloop object types. Refer to the table below to know which types support which meta-properties (X's indicate support):
Gloop object type | Name | Alias | Comments | Default Value | Required | Allow Null | Array | Minimum Array Size | Maximum Array Size | Validation Expression | Output Expression | Namespace URI | Choices | Allow Other Values | Minimum | Maximum | XML Attribute | Date Formats | XML Type | Allow Extra Properties | Reference | Object Class Name | Minimum Length | Maximum Length |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BigDecimal |
X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||
BigInteger |
X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||
Boolean |
X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||||||
Byte |
X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||
ByteArray |
X | X | X | X | X | X | X | X | X | X | X | X | ||||||||||||
Character |
X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||
Date |
X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||||
Double |
X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||
Float |
X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||
Integer |
X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||
Long |
X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||
Model |
X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||||||
Object |
X | X | X | X | X | X | X | X | X | X | X | X | X | |||||||||||
Short |
X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | ||||||
String |
X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
Name
The name of the Gloop object. This is what you will see in the Martini UI, and is normally used to access the property in your Groovy code. Think of this as the name of your variable.
If the name is a reserved Java or Groovy keyword, or an invalid Java or Gloop variable name, then the meta-property
Alias
will contain the original name value (which is used when serializing to XML, JSON,
YAML, and others). The new name will be prefixed with an underscore, and should be used when manipulating Gloop objects
in Groovy code.
Alias
This is the value that's used as the variable's name (name in JSON/YAML, attribute/element name in XML) when serialising as JSON, XML, YAML, flat files, etc. Normally the name is okay, but if the name contains characters or a sequence that renders it invalid for Gloop, then the name is sanitised for use in Gloop code and the alias is used when serialising.
When your Gloop property name requires an alias, the alias will be shown after the name in brackets in Martini. Below
is a screenshot of a property in Martini, and its representation in JSON and XML. To access the property in the
screenshot below in Groovy code, myModel._1invalidProperty
would be used. However when the property is read and
written, 1invalidProperty
would be used.
Comments
You can add comments to document any extra information about a Gloop object. When your a Data Model property has
a comment, they appear after the name and //
in Martini.
Comments that are added to properties automatically end up in your Gloop API files.
Default Value
If the Gloop object has no actual value (value == null
), then the configured Default Value
is used. This is the same
as initialising a field in Java, for example:
1 |
|
All Gloop object types, except Data Models, can have default values.
Required
This is used to determine whether to show the variable in XML, JSON, or YAML; regardless if the value is null
. If this
variable has a null
value and Required
is set to false
, then it will not be serialised. If Required
is true
,
then it will be serialised as follows:
JSON
1 |
|
XML
1 |
|
YAML
1 |
|
Allow Null
This will determine whether the Gloop object allows null
values or not. Gloop validates the objects' Allow Null
property before invoking services or Groovy services. At runtime, if a property has an
Allow Null
value of false
and its value is null
, an exception will be thrown.
In the screenshot below, you will notice that while coding, when a property has a false
Allow Null
value, it will be
shown in bold in the Mapper view. Martini will also show an error next to the step in your service while you're
coding your applications if the value appears to be null
.
Array
This tells Gloop whether the property should be treated as an array or not. Array properties can be mapped to
Gloop cursors. When a property is marked as an array, Gloop holds the values in a
java.util.List
. Also, if you look closely, your property will appear with array brackets on the bottom
right corner of its icon.
Array ninja[]
Gloop allows you to map arrays to non-arrays and vice versa. When mapping an array to a non-array, the first element in the array will be mapped. When mapping a non-array to an array, the array will be cleared, and the mapped value will be the first entry in the newly-cleared array.
You also have three ways in which to toggle whether a Gloop object is an array or not. Via the (1) Convert To context menu (which is activated when right-clicking on a property), (2) Properties table, or (3) by pressing .
Minimum Array Size
This property tells Gloop what the minimum size of the array must be. If the property is empty, then it will not
perform this validation. Gloop validates the objects' Minimum Array Size
property before invoking Services. If a
property has an array whose size is less than the Minimum Array Size
value, an Exception
will be thrown.
Maximum Array Size
This property tells Gloop what the maximum size of the array must be. If the property is empty, then it will not
perform this validation. Gloop validates the objects' Maximum Array Size
property before invoking services. If a
property has an array whose size is greater than the Maximum Array Size
value, an Exception
will be thrown.
Validation Expression
This property is used by Gloop to validate the value of the object.
The expression must be written in any language supported by Gloop.
If the property is an array, then Gloop will evaluate the expression for every value in the array.
Gloop expects the expression to return a boolean
.
When the expression returns true
, Gloop will assume the value is valid.
When the expression is executed, Gloop will provide up to four variables:
-
gloopObject
The actual Gloop object.
-
val
This is the actual value to check.
Validation scripts in Kotlin
Gloop uses a variable called
val
when executing validation expressions. Since this is a reserved word in Kotlin, Kotlin scripts should use_val
instead. In fact, all variables that use Kotlin reserved words are prefixed with an underscore at runtime. For other languages, usingval
is permitted. -
index
If the property is an array, this variable will be the index of the value in the array; otherwise, it will be
null
. -
collection
If the property is an array, this variable will be the actual
java.util.List
; otherwise, it will benull
.
Examples
To ensure that the year of a certain date property is the current year, you could do something like:
1 |
|
To ensure that a number property is even, you could do:
1 |
|
Output Expression
This is used by Gloop when objects are being written to flat files, XML, JSON, and YAML. This property is
particularly useful for formatting Gloop object values, like formatting numbers such as 1234567
to
$1,234,567
or formatting date objects to any format you like. If the property is an array,
then Gloop will evaluate the expression for every value in the array. The Output Expression
could be a simple
expression that does something with the given value val
, or the expression can return another variable for the
given serialization type
.
For example:
1 2 3 4 5 6 7 8 |
|
Using the code above as the value of Output Expression
, the value will be written to JSON as upper case, lower case
for XML, trimmed for CSV files, prefixed with Hello
for fixed-width flat file values, and prefixed with Excel
says
for Excel spreadsheets. Alternatively, the expression can ignore the type and be:
1 |
|
This will then write the value as lower case for all output format types. When the expression is executed, Gloop will provide up to five variables:
-
gloopObject
The actual Gloop object.
-
val
This is the actual value to format.
-
index
If the property is an array, this variable will be the index of the value in the array; otherwise, it will be
null
. -
collection
If the property is an array, this variable will be the actual
java.util.List
; otherwise, it will benull
. -
type
This variable tells you what format the variable will be written to. The values are either
txt
(for fixed-width file output cursors),csv
(for delimited file output cursors),xml
,json
, oryaml
.
Call Groovy classes in your output expressions
Since Output Expressions
are written in Groovy, you could place all of your output code in one place
(a Groovy file), and invoke it from your Output Expression
.
Namespace URI
Gloop uses this when converting Gloop objects to XML, by declaring namespaces when necessary.
Choices
This property can be used to make an object behave like an enum which restricts the values that this Gloop object will accept. Martini also uses this property when setting variables by displaying the list choices instead of a text area.
Allow Other Values
This tells Gloop whether the object will allow other values outside of the choices. If this is false
and the value
of the object is set to something that is not in the choices list, an Exception
will be thrown. If this is true
,
Martini will display the choices when setting the value of the property but also display a text field which in case
you want to set the value to something that isn't in the list of choices.
Martini Online doesn't display the text field used to enter a different value
In Martini Online v1.2, you cannot set a property to a value which is not included in the list of choices because in this version, Martini Online does not display the textbox. This issue was patched up in v1.3.
Minimum
This is the lowest value this object is allowed to have. At runtime, if the value of this object is less than the
Minimum
, an Exception
will be thrown.
Maximum
This is the highest value this object is allowed to have. At runtime, if the value of this object is greater than the
Maximum
, an Exception
will be thrown.
XML Attribute
This property tells Gloop whether to marshall this Gloop object as an XML attribute or not. When set to
true
, a small attribute badge appears on the top left corner of the object's icon in Martini.
Date Formats
If you set the value of a Gloop Date
to an object that is an instance of
java.lang.CharSequence
, the Gloop Date
will iterate through the list of
Java DateFormat
patterns until it finds one that it is able to parse it to a Date
object.
XML Type
This property tells Gloop how to write the Date
or String
value when being written as XML.
For Date
s, values of this property should be any of the following:
null
dateTime
date
duration
time
gYearMonth
gMonthDay
gYear
gMonth
gDay
For String
s, possible values are:
null
normalizedString
token
Allow Extra Properties
When this property is set to true
, the Data Model will allow new properties to be added to it at runtime. Many
languages refer to classes like these as an Expando
class.
Reference
This property is used when you would like a model to inherit properties from another model. In Gloop terms, this
means that the model will reference another one (or extend
, in Java terms). Having this
populated with Allow Extra Properties
set to false
is the same as having a
final
Java class.
Object Class Name
Only Object
types have this meta-property. This is the class name of the value that the Gloop Object
will store.
Use this when you want to store an object that none of the other Gloop object types are compatible with.
Minimum Length
Only String
types have this meta-property. This property determines the minimum allowable length of a String
value.
Maximum Length
Only String
types have this meta-property. This property determines the maximum allowable length of a String
value.
-
A Gloop object whose type is
Object
as opposed to the general term Gloop object, in which the type is unspecified. ↩