{
  "factory": {
    "id": "base-object",
    "type": "entaxy.runtime.object",
    "displayName": "Base abstract object",
    "description": "Abstract object",
    "isAbstract": true,
    "label": "object",
    "@LOCALS": {
    	"displayName": {
    		"defaultValue": "",
    		"required": true
    	}
    }
  },
  "entaxy.runtime.object": {
  	"isEntaxyObject": true
  },
  "fields": {
		"objectId": {
			"displayName": "Object Id",
			"type": "String",
			"required": true,
			"immutable": true,
			"@TYPEINFO": {
				"validation": {
					"rules": [
						{
							"length": {
								"min": 3
							}
						},
						{
							"content": {
								"regex": "^[a-zA-Z][a-zA-Z0-9-]*$",
								"errorMessage": "Value can contain only latin letters, numbers and hyphen and should start with a letter"
							}
						}
					]
				}
			},
			"addToOutput": "*"
		},
		"##publish": {
			"type": "Map",
			"required": true,
			"isHidden": true,
			"configurable": false,
			"defaultValue":{
				"name": {
					"@CALCULATED": {
						"expression": "${objectId}",
						"lazy": true
					}
				},
				"factory": {
					"@CALCULATED": {
						"expression": "${factoryId}",
						"lazy": false
					}
				},
				"label": {
					"@CALCULATED": {
						"expression": "${#FACTORY#.factory.label}",
						"lazy": false
					}
				},
				"scope": {
					"@CALCULATED": {
						"expression": "${scope}",
						"allowObjects": false,
						"lazy": false
					}
				}
			}	
		}
  },
  "outputs": {
    "init": {
      "isDefault": true,
      "fields": {
		  "##publish": {}
      }
    }
  }
}