{
    "TRIGGER": [
        {
            "name": "Timer",
            "description": "The Timer Trigger will fire a workflow on a scheduled interval.",
            "type": "TRIGGER",
            "nodeClazz": "TimerNode",
            "configClazz": "TimerNodeConfiguration",
            "defaultConfiguration": {
                "scheduleType": "SIMPLE_INTERVAL",
                "interval": 1,
                "timeUnit": "MINUTES"
            },
            "inEnabled": false,
            "outPortType": "SINGLE",
            "outPorts": [
                ""
            ],
            "icon": "clock"
        },
        {
            "name": "Virtual Button",
            "description": "fire a rule chain when the \"virtual button\" is pressed",
            "type": "TRIGGER",
            "nodeClazz": "VirtualButtonNode",
            "configClazz": "VirtualButtonNodeConfiguration",
            "defaultConfiguration": {
                "payload": "{\"key\":\"value\"}"
            },
            "inEnabled": false,
            "outPortType": "SINGLE",
            "outPorts": [
                ""
            ],
            "icon": "dot-circle"
        }
    ],
    "LOGIC": [
        {
            "name": "Broadcast",
            "description": "broadcast",
            "type": "LOGIC",
            "nodeClazz": "BroadcastNode",
            "configClazz": "BroadcastNodeConfiguration",
            "defaultConfiguration": {
                "outputCount": 0
            },
            "inEnabled": true,
            "outPortType": "BROADCAST",
            "outPorts": [
                ""
            ],
            "icon": "sitemap"
        },
        {
            "name": "Delay",
            "description": "delay",
            "type": "LOGIC",
            "nodeClazz": "DelayNode",
            "configClazz": "DelayNodeConfiguration",
            "defaultConfiguration": {
                "delaySec": 0
            },
            "inEnabled": true,
            "outPortType": "SINGLE",
            "outPorts": [
                ""
            ],
            "icon": "pause"
        },
        {
            "name": "Filter",
            "description": "filter",
            "type": "LOGIC",
            "nodeClazz": "FilterNode",
            "configClazz": "FilterNodeConfiguration",
            "defaultConfiguration": {
                "jsScript": "return false;"
            },
            "inEnabled": true,
            "outPortType": "STATIC",
            "outPorts": [
                "true",
                "false"
            ],
            "icon": "filter"
        },
        {
            "name": "Function",
            "description": "function",
            "type": "LOGIC",
            "nodeClazz": "FunctionNode",
            "configClazz": "FunctionNodeConfiguration",
            "defaultConfiguration": {
                "jsScript": "message.payload.measurement.temperature = (message.payload.measurement.temperature - 32) / 1.8;\nreturn message;"
            },
            "inEnabled": true,
            "outPortType": "SINGLE",
            "outPorts": [
                ""
            ],
            "icon": "superscript"
        },
        {
            "name": "Switch",
            "description": "switch",
            "type": "LOGIC",
            "nodeClazz": "SwitchNode",
            "configClazz": "SwitchNodeConfiguration",
            "defaultConfiguration": {
                "routes": [
                    "normal",
                    "warning",
                    "error"
                ],
                "jsScript": "if(message.payload.measurement.temperature > message.vars.threshold2) {\nreturn 'error';\n} else if(message.payload.measurement.temperature > message.vars.threshold1) {\nreturn 'warning';\n} else {\nreturn 'normal';\n}"
            },
            "inEnabled": true,
            "outPortType": "DYNAMIC",
            "outPorts": [
                ""
            ],
            "icon": "random"
        }
    ],
    "DATA": [
        {
            "name": "Counter: Get",
            "description": "Get counter",
            "type": "DATA",
            "nodeClazz": "CounterGetNode",
            "configClazz": "CounterGetNodeConfiguration",
            "defaultConfiguration": {
                "keyTemplate": null,
                "resultPath": "counter"
            },
            "inEnabled": true,
            "outPortType": "SINGLE",
            "outPorts": [
                ""
            ],
            "icon": ""
        },
        {
            "name": "Counter: Set",
            "description": "Set counter",
            "type": "DATA",
            "nodeClazz": "CounterSetNode",
            "configClazz": "CounterSetNodeConfiguration",
            "defaultConfiguration": {
                "keyTemplate": null,
                "operation": "INCREMENT",
                "valueTemplate": null
            },
            "inEnabled": true,
            "outPortType": "SINGLE",
            "outPorts": [
                ""
            ],
            "icon": ""
        }
    ],
    "ACTION": [
        {
            "name": "Debug",
            "description": "debug",
            "type": "ACTION",
            "nodeClazz": "DebugNode",
            "configClazz": "DebugNodeConfiguration",
            "defaultConfiguration": {
                "loggingLevel": "INFO",
                "messageTemplate": null
            },
            "inEnabled": true,
            "outPortType": "SINGLE",
            "outPorts": [
                ""
            ],
            "icon": "bug"
        },
        {
            "name": "Email",
            "description": "Send email",
            "type": "ACTION",
            "nodeClazz": "EmailNode",
            "configClazz": "EmailNodeConfiguration",
            "defaultConfiguration": {
                "subjectTemplate": "Temperature high!",
                "receiversTemplate": "user.name@example.com",
                "textTemplate": "Temperature is {{data.measurement.temperature}}",
                "resultPath": "mail"
            },
            "inEnabled": true,
            "outPortType": "SINGLE",
            "outPorts": [
                ""
            ],
            "icon": "envelope"
        }
    ]
}
