Specification Audit
...
‘Groups’ refers to collection of configurations of a plugin. An example structure of a configuration JSON would look like this - Sample JSON
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "metadata": {...}, "inputs": null, "configuration-groups": [ {group1}, {group2}, ... ], "output": [ {configuration-output-1}, {configuration-output-2}, ... ] } |
...
In the above mentioned sample JSON, fields 1 & 2 are configurations of CustomPlugin defined in the backend. We could now configure them in the JSON so that it gets easier to use view/edit them in hydrator.
Configurations for a field
Configurations of a field are the set of properties that we define in the JSON, that governs what/how that particular plugin field gets rendered in hydrator.
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "configuration-groups": [ { "label": "My Group Title", "properties": [ { "name": "Field1", "widget-type": "numberbox", "widget-attributes": { "default": "1" }, "plugin-function": { "method": "POST", "endpoint": "getSchema", "output-property": "schema" } }, { "name": "Field2", "widget-type": "json-editor" } ] } ], "output": [ {output-property1} {output-property2} ... ] } |
Widgets
A widget in UI represents a component that we could use to set the value of a property of a plugin. It could be anything representable in HTML. For instance if our CustomPlugin has a property that requires a JSON value, we could use a json-editor to set value to it. A widget, in general, is a component that we can use to represent a property of a plugin to attach a value to it. The following are the list of widgets that we right now have in CDAP that could be readily be used.
Widget-type | Description | Attributes | Output data type | Sample JSON | |||||||
textbox | Default html HTML textbox to enter any string |
| string |
| |||||||
number | Default html HTML number textbox. Can enter only valid numbers. | default : default value for the widgetmin : minimum value for the number boxmax : maximum value for the number box | intstring |
| |||||||
passwordboxpassword | Default html HTML password box. | No attributes | string |
| |||||||
datetime | Date time picker. Used to set date (in string) for any property | default, format (format could be ISO, long, short or full format dates. Reference | string |
| |||||||
csv | Comma separated values. Each value is entered in a separate box | No attributes | comma-separated string |
| |||||||
dsv | Delimiter-separated values; each value is entered in a separate box |
| delimiter-separated string |
| |||||||
json-editor | Json editor to pretty-print and auto format JSON while typing |
| string |
| |||||||
javascript-editor, python-editor | An editor to write Javscript (javascript-editor) or Python (python-editor) as a value for a property. |
| string |
| |||||||
keyvalue | A key-value editor which allows you to construct map. | delimiter : delimiter for the key-value pairskv-delimiter : delimiter between key and value | string |
| |||||||
keyvalue-dropdown | Similar to keyvalue widget, but with a drop-down value list | delimiter : delimiter for the key-value pairskv-delimiter : delimiter between key and valuedropdownOptions : list of drop-down options to display | string |
| |||||||
select | An HTML drop-down with a list of values; allows one choice from the list | values : list of values for the drop-downdefault : default value from the list | string |
| |||||||
dataset-selector, stream-selector | A type-ahead textbox with a list of datasets (dataset-selector ) or streams (stream-selector ) from the CDAP instance | No attributes | string |
| |||||||
ds-multiplevalues | A delimiter separated values widget that allows to specify a list of values separated by a delimiter. |
values-delimiter : delimiter between valuesdelimiter : delimiter between set of valuesplaceholders : list of placeholders for each value textboxes | string |
|
Versioning
The versioning of plugin config json is closely tied to plugin deployment and maintenance. Every time a hydrator plugin developer deploys a plugin(artifact) he(she) will couple the plugin JARs with config JSON and documentation. The CLI or UI that is deploying the artifact (plugin) will add the config JSON and documentation with it. The config JSON and documentation will be added as properties of an artifact. Each plugin under an artifact will be added as a property to the artifact and each property (plugin) will have JSON as its value with doc and widgets as keys. an example structure would look something like this,
...