{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-routing-core",
      "artifactVersion": "2023.8.13",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.routing.api",
          "org.nuxeo.ecm.platform.routing.core",
          "org.nuxeo.ecm.platform.routing.dashboard",
          "org.nuxeo.ecm.platform.routing.default",
          "org.nuxeo.ecm.platform.routing.default.jsf",
          "org.nuxeo.ecm.platform.routing.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing",
        "id": "grp:org.nuxeo.ecm.platform.routing",
        "name": "org.nuxeo.ecm.platform.routing",
        "parentIds": [
          "grp:org.nuxeo.ecm.routing"
        ],
        "readmes": [],
        "version": "2023.8"
      },
      "bundleId": "org.nuxeo.ecm.platform.routing.core",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.CoreExtensions/Contributions/org.nuxeo.ecm.platform.routing.CoreExtensions--schema",
              "id": "org.nuxeo.ecm.platform.routing.CoreExtensions--schema",
              "registrationOrder": 46,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"document_route_instance\" prefix=\"docri\" src=\"schemas/document_route_instance.xsd\"/>\n    <schema name=\"document_route_model\" prefix=\"docrm\" src=\"schemas/document_route_model.xsd\"/>\n    <schema name=\"info_comments\" prefix=\"infocom\" src=\"schemas/info_comments.xsd\"/>\n    <schema name=\"route_node\" prefix=\"rnode\" src=\"schemas/route_node.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.CoreExtensions/Contributions/org.nuxeo.ecm.platform.routing.CoreExtensions--doctype",
              "id": "org.nuxeo.ecm.platform.routing.CoreExtensions--doctype",
              "registrationOrder": 44,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"Routable\"/>\n    <facet name=\"DocumentRoute\" perDocumentQuery=\"false\"/>\n\n    <facet name=\"RoutingTask\" perDocumentQuery=\"false\"/>\n\n    <facet name=\"CommentsInfoHolder\">\n      <schema name=\"info_comments\"/>\n    </facet>\n\n    <doctype extends=\"TaskDoc\" name=\"RoutingTask\">\n      <facet name=\"RoutingTask\"/>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"DocumentRouteInstancesRoot\">\n      <facet name=\"HiddenInNavigation\"/>\n      <facet name=\"SystemDocument\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <subtypes>\n        <type>Folder</type>\n        <type>HiddenFolder</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"DocumentRouteModelsRoot\">\n      <facet name=\"HiddenInNavigation\"/>\n      <facet name=\"SystemDocument\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <subtypes>\n        <type>Folder</type>\n      </subtypes>\n    </doctype>\n\n    <doctype append=\"true\" name=\"Domain\">\n      <subtypes>\n        <type>DocumentRouteInstancesRoot</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"OrderedFolder\" name=\"DocumentRoute\">\n      <facet name=\"HiddenInNavigation\"/>\n      <facet name=\"ForceAudit\"/>\n      <facet name=\"DocumentRoute\"/>\n      <facet name=\"SystemDocument\"/>\n      <schema name=\"document_route_instance\"/>\n      <schema name=\"document_route_model\"/>\n      <subtypes>\n        <type>RouteNode</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"RouteNode\">\n      <facet name=\"HiddenInNavigation\"/>\n      <facet name=\"SystemDocument\"/>\n      <facet name=\"NotFulltextIndexable\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"route_node\"/>\n      <prefetch>rnode:nodeId</prefetch>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.CoreExtensions",
          "name": "org.nuxeo.ecm.platform.routing.CoreExtensions",
          "requirements": [
            "org.nuxeo.ecm.plateform.task.type",
            "org.nuxeo.ecm.platform.audit.core.types-contrib",
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 737,
          "services": [],
          "startOrder": 441,
          "version": "2023.8.13",
          "xmlFileContent": "\n<component name=\"org.nuxeo.ecm.platform.routing.CoreExtensions\"\n  version=\"1.0\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <require>org.nuxeo.ecm.plateform.task.type</require>\n  <require>org.nuxeo.ecm.platform.audit.core.types-contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"schema\">\n    <schema name=\"document_route_instance\" prefix=\"docri\"\n      src=\"schemas/document_route_instance.xsd\" />\n    <schema name=\"document_route_model\" prefix=\"docrm\"\n      src=\"schemas/document_route_model.xsd\" />\n    <schema name=\"info_comments\" src=\"schemas/info_comments.xsd\"\n      prefix=\"infocom\" />\n    <schema name=\"route_node\" prefix=\"rnode\" src=\"schemas/route_node.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n\n    <facet name=\"Routable\" />\n    <facet name=\"DocumentRoute\" perDocumentQuery=\"false\" />\n\n    <facet name=\"RoutingTask\" perDocumentQuery=\"false\" />\n\n    <facet name=\"CommentsInfoHolder\">\n      <schema name=\"info_comments\" />\n    </facet>\n\n    <doctype name=\"RoutingTask\" extends=\"TaskDoc\">\n      <facet name=\"RoutingTask\"/>\n    </doctype>\n\n    <doctype name=\"DocumentRouteInstancesRoot\" extends=\"Folder\">\n      <facet name=\"HiddenInNavigation\" />\n      <facet name=\"SystemDocument\" />\n      <facet name=\"HiddenInCreation\" />\n      <subtypes>\n        <type>Folder</type>\n        <type>HiddenFolder</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"DocumentRouteModelsRoot\" extends=\"Folder\">\n      <facet name=\"HiddenInNavigation\" />\n      <facet name=\"SystemDocument\" />\n      <facet name=\"HiddenInCreation\" />\n      <subtypes>\n        <type>Folder</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Domain\" append=\"true\">\n      <subtypes>\n        <type>DocumentRouteInstancesRoot</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"DocumentRoute\" extends=\"OrderedFolder\">\n      <facet name=\"HiddenInNavigation\" />\n      <facet name=\"ForceAudit\" />\n      <facet name=\"DocumentRoute\" />\n      <facet name=\"SystemDocument\" />\n      <schema name=\"document_route_instance\" />\n      <schema name=\"document_route_model\" />\n      <subtypes>\n        <type>RouteNode</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"RouteNode\" extends=\"Document\">\n      <facet name=\"HiddenInNavigation\" />\n      <facet name=\"SystemDocument\" />\n      <facet name=\"NotFulltextIndexable\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"route_node\" />\n      <prefetch>rnode:nodeId</prefetch>\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.types/Contributions/org.nuxeo.ecm.platform.routing.types--types",
              "id": "org.nuxeo.ecm.platform.routing.types--types",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n\n    <type id=\"DocumentRouteInstancesRoot\">\n      <default-view>view_documents</default-view>\n      <label>DocumentRouteInstancesRoot</label>\n      <icon>/icons/folder.gif</icon>\n    </type>\n\n    <type id=\"DocumentRouteModelsRoot\">\n      <default-view>view_documents</default-view>\n      <label>DocumentRouteModelsRoot</label>\n      <icon>/icons/folder.gif</icon>\n    </type>\n\n    <type coreType=\"DocumentRoute\" id=\"DocumentRoute\">\n      <label>DocumentRoute</label>\n      <icon>/icons/route.png</icon>\n      <bigIcon>/icons/route_100.png</bigIcon>\n      <category>Collaborative</category>\n      <description>Folder.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>step_folder</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <layouts mode=\"header\">\n        <layout>document_route_header</layout>\n      </layouts>\n      <layouts mode=\"summary\">\n        <layout>summary_document_route_layout</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>orderable_document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView>document_trash_content</contentView>\n      </contentViews>\n    </type>\n\n    <type coreType=\"RouteNode\" id=\"RouteNode\">\n      <label>Node</label>\n      <icon>/icons/step.png</icon>\n      <bigIcon>/icons/step_100.png</bigIcon>\n      <category>Steps</category>\n      <description>File.description</description>\n      <default-view>view_documents</default-view>\n      <edit-view>edit_route_element</edit-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n      </layouts>\n    </type>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.types",
          "name": "org.nuxeo.ecm.platform.routing.types",
          "requirements": [],
          "resolutionOrder": 738,
          "services": [],
          "startOrder": 470,
          "version": "2023.8.13",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.routing.types\">\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n\n    <type id=\"DocumentRouteInstancesRoot\">\n      <default-view>view_documents</default-view>\n      <label>DocumentRouteInstancesRoot</label>\n      <icon>/icons/folder.gif</icon>\n    </type>\n\n    <type id=\"DocumentRouteModelsRoot\">\n      <default-view>view_documents</default-view>\n      <label>DocumentRouteModelsRoot</label>\n      <icon>/icons/folder.gif</icon>\n    </type>\n\n    <type id=\"DocumentRoute\" coreType=\"DocumentRoute\">\n      <label>DocumentRoute</label>\n      <icon>/icons/route.png</icon>\n      <bigIcon>/icons/route_100.png</bigIcon>\n      <category>Collaborative</category>\n      <description>Folder.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>step_folder</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <layouts mode=\"header\">\n        <layout>document_route_header</layout>\n      </layouts>\n      <layouts mode=\"summary\">\n        <layout>summary_document_route_layout</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>orderable_document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView>document_trash_content</contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"RouteNode\" coreType=\"RouteNode\">\n      <label>Node</label>\n      <icon>/icons/step.png</icon>\n      <bigIcon>/icons/step_100.png</bigIcon>\n      <category>Steps</category>\n      <description>File.description</description>\n      <default-view>view_documents</default-view>\n      <edit-view>edit_route_element</edit-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n      </layouts>\n    </type>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-ecm-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.lifecycle.contrib/Contributions/org.nuxeo.ecm.platform.routing.lifecycle.contrib--lifecycle",
              "id": "org.nuxeo.ecm.platform.routing.lifecycle.contrib--lifecycle",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"lifecycle\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n    <lifecycle defaultInitial=\"draft\" name=\"documentRouteElement\">\n      <transitions>\n        <transition destinationState=\"validated\" name=\"toValidated\">\n          <description>the model is validated</description>\n        </transition>\n        <transition destinationState=\"ready\" name=\"toReady\">\n          <description>the element is ready to be executed</description>\n        </transition>\n        <transition destinationState=\"running\" name=\"toRunning\">\n          <description>the element starts</description>\n        </transition>\n        <transition destinationState=\"done\" name=\"toDone\">\n          <description>the element finishes</description>\n        </transition>\n        <transition destinationState=\"waiting\" name=\"toWaiting\">\n          <description>the element waits for a join</description>\n        </transition>\n        <transition destinationState=\"suspended\" name=\"toSuspended\">\n          <description>the element waits for a task</description>\n        </transition>\n        <transition destinationState=\"ready\" name=\"backToReady\">\n          <description>the element finishes</description>\n        </transition>\n        <transition destinationState=\"canceled\" name=\"toCanceled\">\n          <description>cancel this element</description>\n        </transition>\n        <transition destinationState=\"draft\" name=\"toDraft\">\n          <description>\n            go to the draft state, this is done when creating a new instance\n            from a model\n          </description>\n        </transition>\n      </transitions>\n      <states>\n        <state description=\"Default state\" initial=\"true\" name=\"draft\">\n          <transitions>\n            <transition>toValidated</transition>\n          </transitions>\n        </state>\n        <state description=\"The element is validated\" initial=\"true\" name=\"validated\">\n          <transitions>\n            <transition>toReady</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state description=\"The element is ready\" initial=\"true\" name=\"ready\">\n          <transitions>\n            <transition>toRunning</transition>\n            <transition>toWaiting</transition>\n            <transition>toSuspended</transition>\n            <transition>toCanceled</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state description=\"The element is running\" name=\"running\">\n          <transitions>\n            <transition>toDone</transition>\n            <transition>backToReady</transition>\n            <transition>toCanceled</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state description=\"The element is done\" name=\"done\">\n          <transitions>\n            <transition>backToReady</transition>\n            <transition>toCanceled</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state description=\"The element waits for a join\" name=\"waiting\">\n          <transitions>\n            <transition>toReady</transition>\n            <transition>toSuspended</transition>\n            <transition>toCanceled</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state description=\"The element waits for a task\" name=\"suspended\">\n          <transitions>\n            <transition>toReady</transition>\n            <transition>toWaiting</transition>\n            <transition>toCanceled</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state description=\"The element is cancelled\" name=\"canceled\">\n          <transitions>\n            <transition>backToReady</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.lifecycle.contrib/Contributions/org.nuxeo.ecm.platform.routing.lifecycle.contrib--types",
              "id": "org.nuxeo.ecm.platform.routing.lifecycle.contrib--types",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"DocumentRoute\" noRecursionForTransitions=\"toValidated,toReady,toRunning,toDone,toCanceled,backToReady\">\n        documentRouteElement\n      </type>\n      <type name=\"RouteNode\">documentRouteElement</type>\n      <type name=\"RoutingTask\">task</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.lifecycle.contrib",
          "name": "org.nuxeo.ecm.platform.routing.lifecycle.contrib",
          "requirements": [],
          "resolutionOrder": 739,
          "services": [],
          "startOrder": 463,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.lifecycle.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"lifecycle\">\n\n    <lifecycle name=\"documentRouteElement\" defaultInitial=\"draft\">\n      <transitions>\n        <transition name=\"toValidated\" destinationState=\"validated\">\n          <description>the model is validated</description>\n        </transition>\n        <transition name=\"toReady\" destinationState=\"ready\">\n          <description>the element is ready to be executed</description>\n        </transition>\n        <transition name=\"toRunning\" destinationState=\"running\">\n          <description>the element starts</description>\n        </transition>\n        <transition name=\"toDone\" destinationState=\"done\">\n          <description>the element finishes</description>\n        </transition>\n        <transition name=\"toWaiting\" destinationState=\"waiting\">\n          <description>the element waits for a join</description>\n        </transition>\n        <transition name=\"toSuspended\" destinationState=\"suspended\">\n          <description>the element waits for a task</description>\n        </transition>\n        <transition name=\"backToReady\" destinationState=\"ready\">\n          <description>the element finishes</description>\n        </transition>\n        <transition name=\"toCanceled\" destinationState=\"canceled\">\n          <description>cancel this element</description>\n        </transition>\n        <transition name=\"toDraft\" destinationState=\"draft\">\n          <description>\n            go to the draft state, this is done when creating a new instance\n            from a model\n          </description>\n        </transition>\n      </transitions>\n      <states>\n        <state name=\"draft\" description=\"Default state\" initial=\"true\">\n          <transitions>\n            <transition>toValidated</transition>\n          </transitions>\n        </state>\n        <state name=\"validated\" description=\"The element is validated\" initial=\"true\">\n          <transitions>\n            <transition>toReady</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state name=\"ready\" description=\"The element is ready\" initial=\"true\">\n          <transitions>\n            <transition>toRunning</transition>\n            <transition>toWaiting</transition>\n            <transition>toSuspended</transition>\n            <transition>toCanceled</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state name=\"running\" description=\"The element is running\">\n          <transitions>\n            <transition>toDone</transition>\n            <transition>backToReady</transition>\n            <transition>toCanceled</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state name=\"done\" description=\"The element is done\">\n          <transitions>\n            <transition>backToReady</transition>\n            <transition>toCanceled</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state name=\"waiting\" description=\"The element waits for a join\">\n          <transitions>\n            <transition>toReady</transition>\n            <transition>toSuspended</transition>\n            <transition>toCanceled</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state name=\"suspended\" description=\"The element waits for a task\">\n          <transitions>\n            <transition>toReady</transition>\n            <transition>toWaiting</transition>\n            <transition>toCanceled</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n        <state name=\"canceled\" description=\"The element is cancelled\">\n          <transitions>\n            <transition>backToReady</transition>\n            <transition>toDraft</transition>\n          </transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"types\">\n    <types>\n      <type name=\"DocumentRoute\"\n        noRecursionForTransitions=\"toValidated,toReady,toRunning,toDone,toCanceled,backToReady\">\n        documentRouteElement\n      </type>\n      <type name=\"RouteNode\">documentRouteElement</type>\n      <type name=\"RoutingTask\">task</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-life-cycle-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.routing.core.impl.DocumentRoutingEngineServiceImpl",
          "documentation": "\n    The Document Routing Persistence service is use to move the tolken from step\n    to step inside a DocumentRoute instance. The tolken represent the flow of\n    the RouteInstance.\n  \n",
          "documentationHtml": "<p>\nThe Document Routing Persistence service is use to move the tolken from step\nto step inside a DocumentRoute instance. The tolken represent the flow of\nthe RouteInstance.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.engine.service",
          "name": "org.nuxeo.ecm.platform.routing.engine.service",
          "requirements": [],
          "resolutionOrder": 740,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.routing.engine.service",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.engine.service/Services/org.nuxeo.ecm.platform.routing.core.api.DocumentRoutingEngineService",
              "id": "org.nuxeo.ecm.platform.routing.core.api.DocumentRoutingEngineService",
              "overriden": false,
              "version": "2023.8.13"
            }
          ],
          "startOrder": 871,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.engine.service\">\n\n  <documentation>\n    The Document Routing Persistence service is use to move the tolken from step\n    to step inside a DocumentRoute instance. The tolken represent the flow of\n    the RouteInstance.\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.routing.core.impl.DocumentRoutingEngineServiceImpl\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.routing.core.api.DocumentRoutingEngineService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-engine-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.routing.core.impl.DocumentRoutingServiceImpl",
          "documentation": "\n    The Document Routing Service allows to create and start\n    new DocumentRoute\n    instance.\n  \n",
          "documentationHtml": "<p>\nThe Document Routing Service allows to create and start\nnew DocumentRoute\ninstance.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.routing.service",
              "descriptors": [
                "org.nuxeo.ecm.platform.routing.core.impl.PersisterDescriptor"
              ],
              "documentation": "\n      Use to provide a persister. A persister should implement\n      DocumentRoutingPersister. It is responsible to persist instances\n      of route.\n      <code>\n    <persister class=\"org.my.implementation.of.Persister\"/>\n</code>\n",
              "documentationHtml": "<p>\nUse to provide a persister. A persister should implement\nDocumentRoutingPersister. It is responsible to persist instances\nof route.\n</p><p></p><pre><code>    &lt;persister class&#61;&#34;org.my.implementation.of.Persister&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.service/ExtensionPoints/org.nuxeo.ecm.platform.routing.service--persister",
              "id": "org.nuxeo.ecm.platform.routing.service--persister",
              "label": "persister (org.nuxeo.ecm.platform.routing.service)",
              "name": "persister",
              "version": "2023.8.13"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.routing.service",
              "descriptors": [
                "org.nuxeo.ecm.platform.routing.api.RouteModelResourceType"
              ],
              "documentation": "\n      Use to provide a resource path to import route models\n      <code>\n    <template-resource path=\"the path of the zip containing an xml export of the models to import \"/>\n</code>\n",
              "documentationHtml": "<p>\nUse to provide a resource path to import route models\n</p><p></p><pre><code>    &lt;template-resource path&#61;&#34;the path of the zip containing an xml export of the models to import &#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.service/ExtensionPoints/org.nuxeo.ecm.platform.routing.service--routeModelImporter",
              "id": "org.nuxeo.ecm.platform.routing.service--routeModelImporter",
              "label": "routeModelImporter (org.nuxeo.ecm.platform.routing.service)",
              "name": "routeModelImporter",
              "version": "2023.8.13"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.service",
          "name": "org.nuxeo.ecm.platform.routing.service",
          "requirements": [],
          "resolutionOrder": 741,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.routing.service",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.service/Services/org.nuxeo.ecm.platform.routing.api.DocumentRoutingService",
              "id": "org.nuxeo.ecm.platform.routing.api.DocumentRoutingService",
              "overriden": false,
              "version": "2023.8.13"
            }
          ],
          "startOrder": 872,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.service\">\n\n  <documentation>\n    The Document Routing Service allows to create and start\n    new DocumentRoute\n    instance.\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.routing.core.impl.DocumentRoutingServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.routing.api.DocumentRoutingService\" />\n  </service>\n\n\n  <extension-point name=\"persister\">\n    <documentation>\n      Use to provide a persister. A persister should implement\n      DocumentRoutingPersister. It is responsible to persist instances\n      of route.\n      <code>\n        <persister class=\"org.my.implementation.of.Persister\" />\n      </code>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.routing.core.impl.PersisterDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"routeModelImporter\">\n    <documentation>\n      Use to provide a resource path to import route models\n      <code>\n        <template-resource\n          path=\"the path of the zip containing an xml export of the models to import \" />\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.routing.api.RouteModelResourceType\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.directories.contrib/Contributions/org.nuxeo.ecm.platform.routing.directories.contrib--directories",
              "id": "org.nuxeo.ecm.platform.routing.directories.contrib--directories",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-vocabulary\" name=\"execution_type\">\n      <table>ecp-note-type</table>\n      <dataFile>directories/execution_type.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.directories.contrib",
          "name": "org.nuxeo.ecm.platform.routing.directories.contrib",
          "requirements": [],
          "resolutionOrder": 742,
          "services": [],
          "startOrder": 455,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.routing.directories.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"execution_type\" extends=\"template-vocabulary\">\n      <table>ecp-note-type</table>\n      <dataFile>directories/execution_type.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-directories-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.adapter/Contributions/org.nuxeo.ecm.platform.routing.adapter--adapters",
              "id": "org.nuxeo.ecm.platform.routing.adapter--adapters",
              "registrationOrder": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.platform.routing.api.DocumentRoute\" factory=\"org.nuxeo.ecm.platform.routing.core.adapter.DocumentRouteAdapterFactory\"/>\n    <adapter class=\"org.nuxeo.ecm.platform.routing.api.DocumentRouteStep\" factory=\"org.nuxeo.ecm.platform.routing.core.adapter.DocumentRouteAdapterFactory\"/>\n    <adapter class=\"org.nuxeo.ecm.platform.routing.api.DocumentRouteElement\" factory=\"org.nuxeo.ecm.platform.routing.core.adapter.DocumentRouteAdapterFactory\"/>\n    <adapter class=\"org.nuxeo.ecm.platform.routing.api.LockableDocumentRoute\" factory=\"org.nuxeo.ecm.platform.routing.core.adapter.LockableDocumentAdapterFactory\"/>\n    <adapter class=\"org.nuxeo.ecm.platform.routing.core.impl.GraphRoute\" factory=\"org.nuxeo.ecm.platform.routing.core.adapter.DocumentRouteAdapterFactory\"/>\n    <adapter class=\"org.nuxeo.ecm.platform.routing.core.impl.GraphNode\" factory=\"org.nuxeo.ecm.platform.routing.core.adapter.DocumentRouteAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.adapter",
          "name": "org.nuxeo.ecm.platform.routing.adapter",
          "requirements": [],
          "resolutionOrder": 743,
          "services": [],
          "startOrder": 444,
          "version": "2023.8.13",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.routing.adapter\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.platform.routing.api.DocumentRoute\"\n      factory=\"org.nuxeo.ecm.platform.routing.core.adapter.DocumentRouteAdapterFactory\" />\n    <adapter class=\"org.nuxeo.ecm.platform.routing.api.DocumentRouteStep\"\n      factory=\"org.nuxeo.ecm.platform.routing.core.adapter.DocumentRouteAdapterFactory\" />\n    <adapter class=\"org.nuxeo.ecm.platform.routing.api.DocumentRouteElement\"\n      factory=\"org.nuxeo.ecm.platform.routing.core.adapter.DocumentRouteAdapterFactory\" />\n    <adapter class=\"org.nuxeo.ecm.platform.routing.api.LockableDocumentRoute\"\n      factory=\"org.nuxeo.ecm.platform.routing.core.adapter.LockableDocumentAdapterFactory\" />\n    <adapter class=\"org.nuxeo.ecm.platform.routing.core.impl.GraphRoute\"\n      factory=\"org.nuxeo.ecm.platform.routing.core.adapter.DocumentRouteAdapterFactory\" />\n    <adapter class=\"org.nuxeo.ecm.platform.routing.core.impl.GraphNode\"\n      factory=\"org.nuxeo.ecm.platform.routing.core.adapter.DocumentRouteAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.jsonEnrichers/Contributions/org.nuxeo.ecm.platform.routing.jsonEnrichers--marshallers",
              "id": "org.nuxeo.ecm.platform.routing.jsonEnrichers--marshallers",
              "registrationOrder": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.enrichers.PendingTasksJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.enrichers.RunningWorkflowJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.enrichers.RunnableWorkflowJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.jsonEnrichers",
          "name": "org.nuxeo.ecm.platform.routing.jsonEnrichers",
          "requirements": [],
          "resolutionOrder": 744,
          "services": [],
          "startOrder": 459,
          "version": "2023.8.13",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.routing.jsonEnrichers\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.enrichers.PendingTasksJsonEnricher\"\n      enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.enrichers.RunningWorkflowJsonEnricher\"\n      enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.enrichers.RunnableWorkflowJsonEnricher\"\n      enable=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-enrichers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.operations/Contributions/org.nuxeo.ecm.platform.routing.operations--operations",
              "id": "org.nuxeo.ecm.platform.routing.operations--operations",
              "registrationOrder": 33,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.platform.routing.api.operation.UpdateCommentsInfoOnDocumentOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.routing.core.impl.GetGraphOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.routing.api.operation.SetWorkflowNodeVar\"/>\n    <operation class=\"org.nuxeo.ecm.platform.routing.core.api.operation.SetWorkflowVar\"/>\n    <operation class=\"org.nuxeo.ecm.platform.routing.core.api.operation.StartWorkflowOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.routing.api.operation.MapPropertiesOnTaskOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.routing.api.operation.BulkRestartWorkflow\"/>\n    <operation class=\"org.nuxeo.ecm.platform.routing.core.api.operation.CancelWorkflowOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.routing.core.api.operation.ResumeNodeOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.routing.core.api.operation.CompleteTaskOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.routing.core.api.operation.GetOpenTasksOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.routing.core.api.operation.GetTaskNamesOperation\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.operations",
          "name": "org.nuxeo.ecm.platform.routing.operations",
          "requirements": [],
          "resolutionOrder": 745,
          "services": [],
          "startOrder": 466,
          "version": "2023.8.13",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.routing.operations\"\n  version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.api.operation.UpdateCommentsInfoOnDocumentOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.core.impl.GetGraphOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.api.operation.SetWorkflowNodeVar\" />\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.core.api.operation.SetWorkflowVar\" />\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.core.api.operation.StartWorkflowOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.api.operation.MapPropertiesOnTaskOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.api.operation.BulkRestartWorkflow\" />\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.core.api.operation.CancelWorkflowOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.core.api.operation.ResumeNodeOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.core.api.operation.CompleteTaskOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.core.api.operation.GetOpenTasksOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.platform.routing.core.api.operation.GetTaskNamesOperation\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--chains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.operation.chains/Contributions/org.nuxeo.ecm.platform.routing.operation.chains--chains",
              "id": "org.nuxeo.ecm.platform.routing.operation.chains--chains",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <chain id=\"updateCommentsOnDoc\">\n      <operation id=\"Document.Routing.UpdateCommentsInfoOnDocument\"/>\n    </chain>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.operation.chains",
          "name": "org.nuxeo.ecm.platform.routing.operation.chains",
          "requirements": [
            "org.nuxeo.ecm.platform.routing.operations"
          ],
          "resolutionOrder": 746,
          "services": [],
          "startOrder": 465,
          "version": "2023.8.13",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.routing.operation.chains\"\n  version=\"1.0\">\n  <require>org.nuxeo.ecm.platform.routing.operations</require>\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"chains\">\n    <chain id=\"updateCommentsOnDoc\">\n      <operation id=\"Document.Routing.UpdateCommentsInfoOnDocument\" />\n    </chain>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-operation-chains-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.comments.listener/Contributions/org.nuxeo.ecm.platform.routing.comments.listener--listener",
              "id": "org.nuxeo.ecm.platform.routing.comments.listener--listener",
              "registrationOrder": 45,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRoutingUpdateCommentsInfoListener\" name=\"updateCommentsInfoListener\" postCommit=\"false\" priority=\"120\">\n      <event>commentAdded</event>\n      <event>commentRemoved</event>\n    </listener>\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRouteCreationListener\" name=\"routeCreatedListener\" postCommit=\"false\" priority=\"200\">\n      <event>documentCreated</event>\n    </listener>\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRoutingSecurityListener\" name=\"securityListener\" postCommit=\"false\" priority=\"120\">\n      <event>beforeRouteReady</event>\n    </listener>\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.routing.core.listener.RoutingTaskSecurityUpdaterListener\" name=\"routingSecurityUpdaterForActors\" postCommit=\"false\" priority=\"250\">\n      <event>workflowTaskAssigned</event>\n      <event>workflowTaskReassigned</event>\n      <event>workflowTaskDelegated</event>\n    </listener>\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRoutingEscalationListener\" name=\"triggerEsclationRules\">\n      <event>executeEscalationRules</event>\n    </listener>\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRoutingWorkflowDoneListener\" name=\"cleanOpenTasksOnWorkflowDone\">\n      <event>afterRouteFinish</event>\n    </listener>\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.routing.core.listener.RoutingTaskDeletedListener\" name=\"deleteRoutingTaskListener\">\n      <event>aboutToRemove</event>\n    </listener>\n\n    <!-- Disabled since 2023, tasks cleanup is done by DocumentRouteOrphanedListener -->\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRouteDeletedListener\" enabled=\"false\" name=\"removeTasksForDeletedDocumentRoute\" postCommit=\"true\">\n      <event>documentRemoved</event>\n    </listener>\n    \n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRouteOrphanedListener\" name=\"removeDocumentRoutesForDeletedDocument\" postCommit=\"true\">\n      <event>documentRemoved</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.comments.listener",
          "name": "org.nuxeo.ecm.platform.routing.comments.listener",
          "requirements": [],
          "resolutionOrder": 747,
          "services": [],
          "startOrder": 449,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.comments.listener\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <listener name=\"updateCommentsInfoListener\" async=\"false\"\n      postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRoutingUpdateCommentsInfoListener\"\n      priority=\"120\">\n      <event>commentAdded</event>\n      <event>commentRemoved</event>\n    </listener>\n\n    <listener name=\"routeCreatedListener\" async=\"false\"\n      postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRouteCreationListener\"\n      priority=\"200\">\n      <event>documentCreated</event>\n    </listener>\n\n    <listener name=\"securityListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRoutingSecurityListener\"\n      priority=\"120\">\n      <event>beforeRouteReady</event>\n    </listener>\n\n    <listener name=\"routingSecurityUpdaterForActors\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.routing.core.listener.RoutingTaskSecurityUpdaterListener\"\n      priority=\"250\">\n      <event>workflowTaskAssigned</event>\n      <event>workflowTaskReassigned</event>\n      <event>workflowTaskDelegated</event>\n    </listener>\n\n    <listener name=\"triggerEsclationRules\" async=\"true\"\n      class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRoutingEscalationListener\">\n      <event>executeEscalationRules</event>\n    </listener>\n\n    <listener name=\"cleanOpenTasksOnWorkflowDone\" async=\"true\"\n      class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRoutingWorkflowDoneListener\">\n      <event>afterRouteFinish</event>\n    </listener>\n\n    <listener name=\"deleteRoutingTaskListener\" async=\"true\"\n      class=\"org.nuxeo.ecm.platform.routing.core.listener.RoutingTaskDeletedListener\">\n      <event>aboutToRemove</event>\n    </listener>\n\n    <!-- Disabled since 2023, tasks cleanup is done by DocumentRouteOrphanedListener -->\n    <listener name=\"removeTasksForDeletedDocumentRoute\" async=\"true\" postCommit=\"true\" enabled=\"false\"\n      class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRouteDeletedListener\">\n      <event>documentRemoved</event>\n    </listener>\n    \n    <listener name=\"removeDocumentRoutesForDeletedDocument\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRouteOrphanedListener\">\n      <event>documentRemoved</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-listeners-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.audit/Contributions/org.nuxeo.ecm.platform.routing.audit--event",
              "id": "org.nuxeo.ecm.platform.routing.audit--event",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <event name=\"auditLogRoute\"/>\n    <event name=\"workflowTaskAssigned\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.taskInstance.directive}\" key=\"directive\"/>\n        <extendedInfo expression=\"${message.properties.taskInstance.dueDate}\" key=\"dueDate\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"workflowTaskReassigned\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.taskInstance.directive}\" key=\"directive\"/>\n        <extendedInfo expression=\"${message.properties.taskInstance.dueDate}\" key=\"dueDate\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"workflowTaskCompleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.taskInstance.directive}\" key=\"directive\"/>\n        <extendedInfo expression=\"${message.properties.taskInstance.dueDate}\" key=\"dueDate\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"workflowCanceled\"/>\n    <event name=\"workflowTaskDelegated\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.taskInstance.directive}\" key=\"directive\"/>\n        <extendedInfo expression=\"${message.properties.taskInstance.dueDate}\" key=\"dueDate\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowStarted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\"/>\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\"/>\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\"/>\n        <extendedInfo expression=\"${message.properties.workflowVariables}\" key=\"workflowVariables\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowFinish\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\"/>\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\"/>\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\"/>\n        <extendedInfo expression=\"${message.properties.timeSinceWfStarted}\" key=\"timeSinceWfStarted\"/>\n        <extendedInfo expression=\"${message.properties.workflowVariables}\" key=\"workflowVariables\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"beforeWorkflowCanceled\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\"/>\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\"/>\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\"/>\n        <extendedInfo expression=\"${message.properties.pendingNodes}\" key=\"pendingNodes\"/>\n        <extendedInfo expression=\"${message.properties.workflowVariables}\" key=\"workflowVariables\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowTaskCreated\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\"/>\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\"/>\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\"/>\n        <extendedInfo expression=\"${message.properties.taskName}\" key=\"taskName\"/>\n        <extendedInfo expression=\"${message.properties.taskActor}\" key=\"taskActor\"/>\n        <extendedInfo expression=\"${message.properties.actors}\" key=\"actors\"/>\n        <extendedInfo expression=\"${message.properties.nodeVariables}\" key=\"nodeVariables\"/>\n        <extendedInfo expression=\"${message.properties.workflowVariables}\" key=\"workflowVariables\"/>\n        <extendedInfo expression=\"${message.properties.timeSinceWfStarted}\" key=\"timeSinceWfStarted\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowTaskEnded\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\"/>\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\"/>\n        <extendedInfo expression=\"${message.properties.taskName}\" key=\"taskName\"/>\n        <extendedInfo expression=\"${message.properties.taskActor}\" key=\"taskActor\"/>\n        <extendedInfo expression=\"${message.properties.data}\" key=\"data\"/>\n        <extendedInfo expression=\"${message.properties.action}\" key=\"action\"/>\n        <extendedInfo expression=\"${message.properties.nodeVariables}\" key=\"nodeVariables\"/>\n        <extendedInfo expression=\"${message.properties.workflowVariables}\" key=\"workflowVariables\"/>\n        <extendedInfo expression=\"${message.properties.timeSinceTaskStarted}\" key=\"timeSinceTaskStarted\"/>\n        <extendedInfo expression=\"${message.properties.timeSinceWfStarted}\" key=\"timeSinceWfStarted\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowTaskReassigned\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\"/>\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\"/>\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\"/>\n        <extendedInfo expression=\"${message.properties.taskName}\" key=\"taskName\"/>\n        <extendedInfo expression=\"${message.properties.taskActor}\" key=\"taskActor\"/>\n        <extendedInfo expression=\"${message.properties.actors}\" key=\"actors\"/>\n        <extendedInfo expression=\"${message.properties.comment}\" key=\"comment\"/>\n        <extendedInfo expression=\"${message.properties.timeSinceWfStarted}\" key=\"timeSinceWfStarted\"/>\n        <extendedInfo expression=\"${message.properties.timeSinceTaskStarted}\" key=\"timeSinceTaskStarted\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowTaskDelegated\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\"/>\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\"/>\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\"/>\n        <extendedInfo expression=\"${message.properties.taskName}\" key=\"taskName\"/>\n        <extendedInfo expression=\"${message.properties.taskActor}\" key=\"taskActor\"/>\n        <extendedInfo expression=\"${message.properties.delegatedActors}\" key=\"delegatedActors\"/>\n        <extendedInfo expression=\"${message.properties.comment}\" key=\"comment\"/>\n        <extendedInfo expression=\"${message.properties.timeSinceWfStarted}\" key=\"timeSinceWfStarted\"/>\n        <extendedInfo expression=\"${message.properties.timeSinceTaskStarted}\" key=\"timeSinceTaskStarted\"/>\n      </extendedInfos>\n    </event>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.audit",
          "name": "org.nuxeo.ecm.platform.routing.audit",
          "requirements": [],
          "resolutionOrder": 748,
          "services": [],
          "startOrder": 446,
          "version": "2023.8.13",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.routing.audit\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\"\n    point=\"event\">\n    <event name=\"auditLogRoute\" />\n    <event name=\"workflowTaskAssigned\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.taskInstance.directive}\" key=\"directive\" />\n        <extendedInfo expression=\"${message.properties.taskInstance.dueDate}\" key=\"dueDate\" />\n      </extendedInfos>\n    </event>\n    <event name=\"workflowTaskReassigned\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.taskInstance.directive}\" key=\"directive\" />\n        <extendedInfo expression=\"${message.properties.taskInstance.dueDate}\" key=\"dueDate\" />\n      </extendedInfos>\n    </event>\n    <event name=\"workflowTaskCompleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.taskInstance.directive}\" key=\"directive\" />\n        <extendedInfo expression=\"${message.properties.taskInstance.dueDate}\" key=\"dueDate\" />\n      </extendedInfos>\n    </event>\n    <event name=\"workflowCanceled\" />\n    <event name=\"workflowTaskDelegated\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.taskInstance.directive}\" key=\"directive\" />\n        <extendedInfo expression=\"${message.properties.taskInstance.dueDate}\" key=\"dueDate\" />\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowStarted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\" />\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\" />\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\" />\n        <extendedInfo expression=\"${message.properties.workflowVariables}\" key=\"workflowVariables\" />\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowFinish\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\" />\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\" />\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\" />\n        <extendedInfo expression=\"${message.properties.timeSinceWfStarted}\" key=\"timeSinceWfStarted\" />\n        <extendedInfo expression=\"${message.properties.workflowVariables}\" key=\"workflowVariables\" />\n      </extendedInfos>\n    </event>\n    <event name=\"beforeWorkflowCanceled\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\" />\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\" />\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\" />\n        <extendedInfo expression=\"${message.properties.pendingNodes}\" key=\"pendingNodes\" />\n        <extendedInfo expression=\"${message.properties.workflowVariables}\" key=\"workflowVariables\" />\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowTaskCreated\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\" />\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\" />\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\" />\n        <extendedInfo expression=\"${message.properties.taskName}\" key=\"taskName\" />\n        <extendedInfo expression=\"${message.properties.taskActor}\" key=\"taskActor\" />\n        <extendedInfo expression=\"${message.properties.actors}\" key=\"actors\" />\n        <extendedInfo expression=\"${message.properties.nodeVariables}\" key=\"nodeVariables\" />\n        <extendedInfo expression=\"${message.properties.workflowVariables}\" key=\"workflowVariables\" />\n        <extendedInfo expression=\"${message.properties.timeSinceWfStarted}\" key=\"timeSinceWfStarted\" />\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowTaskEnded\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\" />\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\" />\n        <extendedInfo expression=\"${message.properties.taskName}\" key=\"taskName\" />\n        <extendedInfo expression=\"${message.properties.taskActor}\" key=\"taskActor\" />\n        <extendedInfo expression=\"${message.properties.data}\" key=\"data\" />\n        <extendedInfo expression=\"${message.properties.action}\" key=\"action\" />\n        <extendedInfo expression=\"${message.properties.nodeVariables}\" key=\"nodeVariables\" />\n        <extendedInfo expression=\"${message.properties.workflowVariables}\" key=\"workflowVariables\" />\n        <extendedInfo expression=\"${message.properties.timeSinceTaskStarted}\" key=\"timeSinceTaskStarted\" />\n        <extendedInfo expression=\"${message.properties.timeSinceWfStarted}\" key=\"timeSinceWfStarted\" />\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowTaskReassigned\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\" />\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\" />\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\" />\n        <extendedInfo expression=\"${message.properties.taskName}\" key=\"taskName\" />\n        <extendedInfo expression=\"${message.properties.taskActor}\" key=\"taskActor\" />\n        <extendedInfo expression=\"${message.properties.actors}\" key=\"actors\" />\n        <extendedInfo expression=\"${message.properties.comment}\" key=\"comment\" />\n        <extendedInfo expression=\"${message.properties.timeSinceWfStarted}\" key=\"timeSinceWfStarted\" />\n        <extendedInfo expression=\"${message.properties.timeSinceTaskStarted}\" key=\"timeSinceTaskStarted\" />\n      </extendedInfos>\n    </event>\n    <event name=\"afterWorkflowTaskDelegated\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.modelName}\" key=\"modelName\" />\n        <extendedInfo expression=\"${message.properties.modelId}\" key=\"modelId\" />\n        <extendedInfo expression=\"${message.properties.workflowInitiator}\" key=\"workflowInitiator\" />\n        <extendedInfo expression=\"${message.properties.taskName}\" key=\"taskName\" />\n        <extendedInfo expression=\"${message.properties.taskActor}\" key=\"taskActor\" />\n        <extendedInfo expression=\"${message.properties.delegatedActors}\" key=\"delegatedActors\" />\n        <extendedInfo expression=\"${message.properties.comment}\" key=\"comment\" />\n        <extendedInfo expression=\"${message.properties.timeSinceWfStarted}\" key=\"timeSinceWfStarted\" />\n        <extendedInfo expression=\"${message.properties.timeSinceTaskStarted}\" key=\"timeSinceTaskStarted\" />\n      </extendedInfos>\n    </event>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/routing-audit-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.pageproviders/Contributions/org.nuxeo.ecm.platform.routing.pageproviders--providers",
              "id": "org.nuxeo.ecm.platform.routing.pageproviders--providers",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"DOC_ROUTING_SEARCH_ALL_ROUTE_MODELS\">\n      <pattern>\n        SELECT * FROM DocumentRoute WHERE ecm:currentLifeCycleState = 'validated' AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"DOC_ROUTING_SEARCH_ROUTE_MODELS_WITH_TITLE\">\n      <pattern>\n        SELECT * FROM DocumentRoute WHERE ecm:currentLifeCycleState = 'validated' AND ecm:isTrashed = 0\n        AND dc:title LIKE ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"DOC_ROUTING_SEARCH_ALL_ROUTE_INSTANCES\">\n      <pattern>\n        SELECT * FROM DocumentRoute WHERE ecm:currentLifeCycleState =\n        'running' AND ecm:isTrashed = 0 AND dc:title LIKE ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"CURRENT_DOC_ROUTING_SEARCH_ATTACHED_DOC\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType != 'Folderish' AND\n        ecm:isTrashed = 0 AND dc:title ILIKE ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"SEARCH_ROUTE_BY_ATTACHED_DOC\">\n      <pattern>\n        SELECT * FROM DocumentRoute WHERE (ecm:currentLifeCycleState = 'running'\n        OR ecm:currentLifeCycleState = 'ready') AND ecm:isTrashed = 0 AND docri:participatingDocuments/*\n        IN (?)\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.routing.core.provider.RoutingTaskPageProvider\" name=\"nuxeo_tasks_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.pageproviders",
          "name": "org.nuxeo.ecm.platform.routing.pageproviders",
          "requirements": [],
          "resolutionOrder": 749,
          "services": [],
          "startOrder": 467,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider name=\"DOC_ROUTING_SEARCH_ALL_ROUTE_MODELS\">\n      <pattern>\n        SELECT * FROM DocumentRoute WHERE ecm:currentLifeCycleState = 'validated' AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"DOC_ROUTING_SEARCH_ROUTE_MODELS_WITH_TITLE\">\n      <pattern>\n        SELECT * FROM DocumentRoute WHERE ecm:currentLifeCycleState = 'validated' AND ecm:isTrashed = 0\n        AND dc:title LIKE ?\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"DOC_ROUTING_SEARCH_ALL_ROUTE_INSTANCES\">\n      <pattern>\n        SELECT * FROM DocumentRoute WHERE ecm:currentLifeCycleState =\n        'running' AND ecm:isTrashed = 0 AND dc:title LIKE ?\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"CURRENT_DOC_ROUTING_SEARCH_ATTACHED_DOC\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType != 'Folderish' AND\n        ecm:isTrashed = 0 AND dc:title ILIKE ?\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"SEARCH_ROUTE_BY_ATTACHED_DOC\">\n      <pattern>\n        SELECT * FROM DocumentRoute WHERE (ecm:currentLifeCycleState = 'running'\n        OR ecm:currentLifeCycleState = 'ready') AND ecm:isTrashed = 0 AND docri:participatingDocuments/*\n        IN (?)\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <genericPageProvider name=\"nuxeo_tasks_listing\"\n                         class=\"org.nuxeo.ecm.platform.routing.core.provider.RoutingTaskPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageproviders-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService--plugins",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.FileManagerService.contrib/Contributions/org.nuxeo.ecm.platform.routing.FileManagerService.contrib--plugins",
              "id": "org.nuxeo.ecm.platform.routing.FileManagerService.contrib--plugins",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"plugins\" target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\">\n\n    <plugin class=\"org.nuxeo.ecm.platform.routing.core.persistence.RouteModelsZipImporter\" name=\"RouteModelsImporter\" order=\"5\">\n      <filter>application/zip</filter>\n    </plugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.FileManagerService.contrib",
          "name": "org.nuxeo.ecm.platform.routing.FileManagerService.contrib",
          "requirements": [],
          "resolutionOrder": 750,
          "services": [],
          "startOrder": 442,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.platform.routing.FileManagerService.contrib\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\"\n    point=\"plugins\">\n\n    <plugin name=\"RouteModelsImporter\"\n      class=\"org.nuxeo.ecm.platform.routing.core.persistence.RouteModelsZipImporter\"\n      order=\"5\">\n      <filter>application/zip</filter>\n    </plugin>\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-nxfilemanager-plugins-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notifications",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.notification.document.routing.NotificationContrib/Contributions/org.nuxeo.ecm.platform.notification.document.routing.NotificationContrib--notifications",
              "id": "org.nuxeo.ecm.platform.notification.document.routing.NotificationContrib--notifications",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"notifications\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n\n    <notification enabled=\"false\" name=\"Task assigned\">\n      <event name=\"workflowTaskAssigned\"/>\n    </notification>\n    <notification autoSubscribed=\"true\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.appReviewStarted\" name=\"Task assigned\" subject=\"Task Assigned for ${docTitle}\" template=\"workflowTaskAssigned\" templateExpr=\"NotificationContext['taskInstance'].getVariable('taskNotificationTemplate')\">\n      <event name=\"workflowTaskAssigned\"/>\n    </notification>\n\n   <notification autoSubscribed=\"true\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.appReviewStarted\" name=\"Task reassigned\" subject=\"Task Reassigned on ${docTitle}\" template=\"workflowTaskAssigned\" templateExpr=\"NotificationContext['taskInstance'].getVariable('taskNotificationTemplate')\">\n      <event name=\"workflowTaskReassigned\"/>\n    </notification>\n\n   <notification autoSubscribed=\"true\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.appReviewStarted\" name=\"Task delegated\" subject=\"Task Delegated on ${docTitle}\" template=\"workflowTaskDelegated\">\n      <event name=\"workflowTaskDelegated\"/>\n    </notification>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.notification.document.routing.NotificationContrib",
          "name": "org.nuxeo.ecm.platform.notification.document.routing.NotificationContrib",
          "requirements": [
            "org.nuxeo.ecm.platform.notification.service.NotificationContrib"
          ],
          "resolutionOrder": 751,
          "services": [],
          "startOrder": 357,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component\n  name=\"org.nuxeo.ecm.platform.notification.document.routing.NotificationContrib\">\n\n  <require>org.nuxeo.ecm.platform.notification.service.NotificationContrib</require>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n    point=\"notifications\">\n\n    <notification name=\"Task assigned\" enabled=\"false\" >\n      <event name=\"workflowTaskAssigned\"/>\n    </notification>\n    <notification name=\"Task assigned\" channel=\"email\" enabled=\"true\" availableIn=\"Workspace\"\n      autoSubscribed=\"true\" template=\"workflowTaskAssigned\" templateExpr=\"NotificationContext['taskInstance'].getVariable('taskNotificationTemplate')\" subject=\"Task Assigned for ${docTitle}\"\n      label=\"label.nuxeo.notifications.appReviewStarted\">\n      <event name=\"workflowTaskAssigned\"/>\n    </notification>\n\n   <notification name=\"Task reassigned\" channel=\"email\" enabled=\"true\" availableIn=\"Workspace\"\n      autoSubscribed=\"true\" template=\"workflowTaskAssigned\" templateExpr=\"NotificationContext['taskInstance'].getVariable('taskNotificationTemplate')\" subject=\"Task Reassigned on ${docTitle}\"\n      label=\"label.nuxeo.notifications.appReviewStarted\">\n      <event name=\"workflowTaskReassigned\"/>\n    </notification>\n\n   <notification name=\"Task delegated\" channel=\"email\" enabled=\"true\" availableIn=\"Workspace\"\n      autoSubscribed=\"true\" template=\"workflowTaskDelegated\"  subject=\"Task Delegated on ${docTitle}\"\n      label=\"label.nuxeo.notifications.appReviewStarted\">\n      <event name=\"workflowTaskDelegated\"/>\n    </notification>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-notification-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.work/Contributions/org.nuxeo.ecm.platform.routing.work--queues",
              "id": "org.nuxeo.ecm.platform.routing.work--queues",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"escalation\">\n      <category>routingEscalation</category>\n      <name>escalation</name>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.work",
          "name": "org.nuxeo.ecm.platform.routing.work",
          "requirements": [],
          "resolutionOrder": 752,
          "services": [],
          "startOrder": 471,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.work\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"escalation\">\n      <category>routingEscalation</category>\n      <name>escalation</name>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-escalation-work-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.routing.core.impl.DocumentRoutingEscalationServiceImpl",
          "documentation": "\n    The Document Routing Escalation service is used to execute all the escalation rules\n    from all running workflows.\n  \n",
          "documentationHtml": "<p>\nThe Document Routing Escalation service is used to execute all the escalation rules\nfrom all running workflows.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.escalation.service",
          "name": "org.nuxeo.ecm.platform.routing.escalation.service",
          "requirements": [],
          "resolutionOrder": 753,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.routing.escalation.service",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.escalation.service/Services/org.nuxeo.ecm.platform.routing.core.api.DocumentRoutingEscalationService",
              "id": "org.nuxeo.ecm.platform.routing.core.api.DocumentRoutingEscalationService",
              "overriden": false,
              "version": "2023.8.13"
            }
          ],
          "startOrder": 458,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.escalation.service\">\n\n  <documentation>\n    The Document Routing Escalation service is used to execute all the escalation rules\n    from all running workflows.\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.routing.core.impl.DocumentRoutingEscalationServiceImpl\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.routing.core.api.DocumentRoutingEscalationService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-escalation-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.escalation.scheduler.config/Contributions/org.nuxeo.ecm.platform.routing.escalation.scheduler.config--schedule",
              "id": "org.nuxeo.ecm.platform.routing.escalation.scheduler.config--schedule",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "name": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\">\n    <schedule id=\"escalationScheduler\">\n      <eventId>executeEscalationRules</eventId>\n      <eventCategory>escalation</eventCategory>\n      <!-- every 5 mins -->\n      <cronExpression>0 0/5 * * * ?</cronExpression>\n    </schedule>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.escalation.scheduler.config/Contributions/org.nuxeo.ecm.platform.routing.escalation.scheduler.config--configuration",
              "id": "org.nuxeo.ecm.platform.routing.escalation.scheduler.config--configuration",
              "registrationOrder": 62,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <property name=\"nuxeo.document.routing.escalation.running.flag.ttl.duration\">3m</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.escalation.scheduler.config/Contributions/org.nuxeo.ecm.platform.routing.escalation.scheduler.config--actions",
              "id": "org.nuxeo.ecm.platform.routing.escalation.scheduler.config--actions",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"5\" bucketSize=\"25\" exclusive=\"true\" inputStream=\"bulk/documentRoutingEscalation\" name=\"documentRoutingEscalation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.escalation.scheduler.config/Contributions/org.nuxeo.ecm.platform.routing.escalation.scheduler.config--streamProcessor",
              "id": "org.nuxeo.ecm.platform.routing.escalation.scheduler.config--streamProcessor",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.platform.routing.core.bulk.DocumentRoutingEscalationAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"DocumentRoutingEscalationAction\">\n      <policy continueOnFailure=\"true\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.escalation.scheduler.config",
          "name": "org.nuxeo.ecm.platform.routing.escalation.scheduler.config",
          "requirements": [],
          "resolutionOrder": 754,
          "services": [],
          "startOrder": 457,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.escalation.scheduler.config\">\n\n  <extension target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\" point=\"schedule\">\n    <schedule id=\"escalationScheduler\">\n      <eventId>executeEscalationRules</eventId>\n      <eventCategory>escalation</eventCategory>\n      <!-- every 5 mins -->\n      <cronExpression>0 0/5 * * * ?</cronExpression>\n    </schedule>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <property name=\"nuxeo.document.routing.escalation.running.flag.ttl.duration\">3m</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"documentRoutingEscalation\" inputStream=\"bulk/documentRoutingEscalation\" bucketSize=\"25\"\n      batchSize=\"5\" exclusive=\"true\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"DocumentRoutingEscalationAction\"\n      class=\"org.nuxeo.ecm.platform.routing.core.bulk.DocumentRoutingEscalationAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.documentRoutingEscalation.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.documentRoutingEscalation.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-escalation-scheduler-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.cleanup.config/Contributions/org.nuxeo.ecm.platform.routing.cleanup.config--schedule",
              "id": "org.nuxeo.ecm.platform.routing.cleanup.config--schedule",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "name": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\">\n\n    <schedule id=\"workflowInstancesCleanup\">\n      <eventId>workflowInstancesCleanup</eventId>\n      <!-- every day at 11.59 PM -->\n      <cronExpression>0 59 23 * * ?</cronExpression>\n    </schedule>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.cleanup.config/Contributions/org.nuxeo.ecm.platform.routing.cleanup.config--listener",
              "id": "org.nuxeo.ecm.platform.routing.cleanup.config--listener",
              "registrationOrder": 46,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRoutingWorkflowInstancesCleanup\" name=\"workflowInstancesCleanup\" postCommit=\"true\">\n      <event>workflowInstancesCleanup</event>\n    </listener>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.cleanup.config/Contributions/org.nuxeo.ecm.platform.routing.cleanup.config--actions",
              "id": "org.nuxeo.ecm.platform.routing.cleanup.config--actions",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"100\" inputStream=\"bulk/garbageCollectWokflows\" name=\"garbageCollectWokflows\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.cleanup.config/Contributions/org.nuxeo.ecm.platform.routing.cleanup.config--streamProcessor",
              "id": "org.nuxeo.ecm.platform.routing.cleanup.config--streamProcessor",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <!-- GarbageCollectOrphanRoute processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.platform.routing.core.bulk.GarbageCollectRoutesAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"garbageCollectWokflows\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.cleanup.config",
          "name": "org.nuxeo.ecm.platform.routing.cleanup.config",
          "requirements": [],
          "resolutionOrder": 755,
          "services": [],
          "startOrder": 448,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.cleanup.config\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\"\n    point=\"schedule\">\n\n    <schedule id=\"workflowInstancesCleanup\">\n      <eventId>workflowInstancesCleanup</eventId>\n      <!-- every day at 11.59 PM -->\n      <cronExpression>0 59 23 * * ?</cronExpression>\n    </schedule>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"workflowInstancesCleanup\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.platform.routing.core.listener.DocumentRoutingWorkflowInstancesCleanup\">\n      <event>workflowInstancesCleanup</event>\n    </listener>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"garbageCollectWokflows\" inputStream=\"bulk/garbageCollectWokflows\" bucketSize=\"100\"\n      batchSize=\"25\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <!-- GarbageCollectOrphanRoute processor -->\n    <streamProcessor name=\"garbageCollectWokflows\"\n      class=\"org.nuxeo.ecm.platform.routing.core.bulk.GarbageCollectRoutesAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.garbageCollectWokflows.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.garbageCollectWokflows.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"false\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-cleanup-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.security/Contributions/org.nuxeo.ecm.platform.routing.security--permissions",
              "id": "org.nuxeo.ecm.platform.routing.security--permissions",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"permissions\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <permission name=\"DataVisualization\">\n      <include>Read</include>\n    </permission>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.security/Contributions/org.nuxeo.ecm.platform.routing.security--permissionsVisibility",
              "id": "org.nuxeo.ecm.platform.routing.security--permissionsVisibility",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"permissionsVisibility\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <visibility type=\"DocumentRoute\">\n      <item order=\"20\" show=\"true\">DataVisualization</item>\n    </visibility>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.security",
          "name": "org.nuxeo.ecm.platform.routing.security",
          "requirements": [
            "org.nuxeo.ecm.core.security.defaultPermissions"
          ],
          "resolutionOrder": 756,
          "services": [],
          "startOrder": 469,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.security\">\n\n  <require>org.nuxeo.ecm.core.security.defaultPermissions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissions\">\n\n    <permission name=\"DataVisualization\">\n      <include>Read</include>\n    </permission>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissionsVisibility\">\n\n    <visibility type=\"DocumentRoute\">\n      <item show=\"true\" order=\"20\">DataVisualization</item>\n    </visibility>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/document-routing-security-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.elasticsearch.http.readonly.RequestFilterService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.es/Contributions/org.nuxeo.ecm.platform.routing.es--filters",
              "id": "org.nuxeo.ecm.platform.routing.es--filters",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.elasticsearch.http.readonly.RequestFilterService",
                "name": "org.nuxeo.elasticsearch.http.readonly.RequestFilterService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.elasticsearch.http.readonly.RequestFilterService\">\n    <requestFilter filterClass=\"org.nuxeo.ecm.platform.routing.core.audit.es.RoutingAuditRequestFilter\" index=\"audit_wf\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.es",
          "name": "org.nuxeo.ecm.platform.routing.es",
          "requirements": [
            "org.nuxeo.elasticsearch.http.readonly.RequestFilterService"
          ],
          "resolutionOrder": 757,
          "services": [],
          "startOrder": 456,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.es\" version=\"1.0\">\n\n  <require>org.nuxeo.elasticsearch.http.readonly.RequestFilterService</require>\n\n  <extension target=\"org.nuxeo.elasticsearch.http.readonly.RequestFilterService\"\n    point=\"filters\">\n    <requestFilter filterClass=\"org.nuxeo.ecm.platform.routing.core.audit.es.RoutingAuditRequestFilter\"\n      index=\"audit_wf\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-audit-es-filter.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentation": "\n    Core IO registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO registered marshallers set.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.marshallers/Contributions/org.nuxeo.ecm.platform.routing.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.routing.marshallers--marshallers",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- Reader -->\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.TaskCompletionRequestJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.WorkflowRequestJsonReader\" enable=\"true\"/>\n\n    <!-- Writers -->\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.DocumentRouteWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.DocumentRouteListWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.TaskWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.TaskListWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.GraphRouteWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.marshallers",
          "name": "org.nuxeo.ecm.platform.routing.marshallers",
          "requirements": [],
          "resolutionOrder": 758,
          "services": [],
          "startOrder": 464,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.marshallers\" version=\"1.0.0\">\n  <documentation>\n    Core IO registered marshallers set.\n  </documentation>\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <!-- Reader -->\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.TaskCompletionRequestJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.WorkflowRequestJsonReader\" enable=\"true\" />\n\n    <!-- Writers -->\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.DocumentRouteWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.DocumentRouteListWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.TaskWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.TaskListWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.routing.core.io.GraphRouteWriter\" enable=\"true\" />\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.cache.CacheService--caches",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.caches/Contributions/org.nuxeo.ecm.platform.routing.caches--caches",
              "id": "org.nuxeo.ecm.platform.routing.caches--caches",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.cache.CacheService",
                "name": "org.nuxeo.ecm.core.cache.CacheService",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"caches\" target=\"org.nuxeo.ecm.core.cache.CacheService\">\n\n    <cache name=\"workflowModels\">\n      <ttl>10</ttl><!-- minutes -->\n      <option name=\"maxSize\">100</option>\n    </cache>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.caches",
          "name": "org.nuxeo.ecm.platform.routing.caches",
          "requirements": [],
          "resolutionOrder": 759,
          "services": [],
          "startOrder": 447,
          "version": "2023.8.13",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.caches\">\n\n  <extension target=\"org.nuxeo.ecm.core.cache.CacheService\" point=\"caches\">\n\n    <cache name=\"workflowModels\">\n      <ttl>10</ttl><!-- minutes -->\n      <option name=\"maxSize\">100</option>\n    </cache>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-cache-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.routing.service--persister",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.persister.contrib/Contributions/org.nuxeo.ecm.platform.routing.persister.contrib--persister",
              "id": "org.nuxeo.ecm.platform.routing.persister.contrib--persister",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.routing.service",
                "name": "org.nuxeo.ecm.platform.routing.service",
                "type": "service"
              },
              "version": "2023.8.13",
              "xml": "<extension point=\"persister\" target=\"org.nuxeo.ecm.platform.routing.service\">\n    <persister class=\"org.nuxeo.ecm.platform.routing.core.impl.DocumentRoutingTreePersister\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core/org.nuxeo.ecm.platform.routing.persister.contrib",
          "name": "org.nuxeo.ecm.platform.routing.persister.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.repository.RepositoryService"
          ],
          "resolutionOrder": 792,
          "services": [],
          "startOrder": 468,
          "version": "2023.8.13",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.routing.persister.contrib\"\n  version=\"1.0\">\n\n  <require>org.nuxeo.ecm.core.repository.RepositoryService</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.routing.service\"\n    point=\"persister\">\n    <persister\n      class=\"org.nuxeo.ecm.platform.routing.core.impl.DocumentRoutingTreePersister\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-persister-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-routing-core-2023.8.13.jar",
      "groupId": "org.nuxeo.ecm.routing",
      "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.core",
      "id": "org.nuxeo.ecm.platform.routing.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven 3.6.1\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM Routing Core\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.routing.core;singleton=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/document-routing-core-types-contrib.xml,OSGI-I\r\n NF/document-routing-ecm-types-contrib.xml,OSGI-INF/document-routing-lif\r\n e-cycle-contrib.xml,OSGI-INF/document-routing-engine-service.xml,OSGI-I\r\n NF/document-routing-service.xml,OSGI-INF/document-routing-directories-c\r\n ontrib.xml,OSGI-INF/document-routing-adapter-contrib.xml,OSGI-INF/docum\r\n ent-routing-enrichers-contrib.xml,OSGI-INF/document-routing-operation-c\r\n hains-contrib.xml,OSGI-INF/document-routing-operations-contrib.xml,OSGI\r\n -INF/document-routing-persister-contrib.xml,OSGI-INF/document-routing-l\r\n isteners-contrib.xml,OSGI-INF/routing-audit-contrib.xml,OSGI-INF/pagepr\r\n oviders-contrib.xml,OSGI-INF/document-routing-nxfilemanager-plugins-con\r\n trib.xml,OSGI-INF/document-routing-notification-contrib.xml,OSGI-INF/do\r\n cument-routing-escalation-work-contrib.xml,OSGI-INF/document-routing-es\r\n calation-service.xml,OSGI-INF/document-routing-escalation-scheduler-con\r\n trib.xml,OSGI-INF/document-routing-cleanup-contrib.xml,OSGI-INF/documen\r\n t-routing-security-contrib.xml,OSGI-INF/document-routing-audit-es-filte\r\n r.xml,OSGI-INF/marshallers-contrib.xml,OSGI-INF/document-routing-cache-\r\n contrib.xml\r\n\r\n",
      "maxResolutionOrder": 792,
      "minResolutionOrder": 737,
      "packages": [],
      "requirements": [],
      "version": "2023.8.13"
    }
  ],
  "creationDate": 1709128388721,
  "key": "Nuxeo Platform-2023.8",
  "name": "Nuxeo Platform",
  "operations": [
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Returns a list of current user open tasks where their translated name matches (partially or fully ) the 'searchTerm' parameter. This operation is invoked from a select2widget and the number of returned results is limited to 15.",
      "hierarchyPath": "/op:Context.GetTaskNames",
      "label": "Get Task Translated Names",
      "name": "Context.GetTaskNames",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.GetTaskNamesOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "lang",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "limit",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "searchTerm",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "value",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "void",
        "documents"
      ],
      "url": "Context.GetTaskNames",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Set a workflow variable. The workflow variable must exists on the workflow. If no workflowId is specified the variable is set on the current workflow.To compute the value at runtime from the current context you should use a MVEL expression as the value. This operation works on any input type and return back the input as the output.",
      "hierarchyPath": "/op:Context.SetWorkflowVar",
      "label": "Set Workflow Variable",
      "name": "Context.SetWorkflowVar",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.SetWorkflowVar",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "value",
          "order": 0,
          "type": "object",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "workflowInstanceId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "void",
        "void"
      ],
      "url": "Context.SetWorkflowVar",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Starts the workflow with the given model id on the input documents. Returns back the input documents.The id of the created workflow instance is available under the \"workflowInstanceId\" context variable.@Since 5.7.2 you can set multiple variables on the workflow (before 5.8 only scalar types are supported). The variables are specified as <i>key=value</i> pairs separated by a new line.To specify multi-line values you can use a \\ character followed by a new line. <p>Example:<pre>description=foo bar</pre>For updating a date, you will need to expose the value as ISO 8601 format, for instance : <p>Example:<pre>title=The Document Title<br>issued=@{org.nuxeo.ecm.core.schema.utils.DateParser.formatW3CDateTime(CurrentDate.date)}</pre><p> @since 5.9.3 and 5.8.0-HF10 you can also set variables of complex types, by submiting a JSON representation: <p><pre>assignees = [\"John Doe\", \"John Test\"]</pre></p>",
      "hierarchyPath": "/op:Context.StartWorkflow",
      "label": "Start workflow",
      "name": "Context.StartWorkflow",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.StartWorkflowOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "start",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "variables",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "url": "Context.StartWorkflow",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Routing",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "get graph nodes.",
      "hierarchyPath": "/op:Document.Routing.GetGraph",
      "label": "Get graph",
      "name": "Document.Routing.GetGraph",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.impl.GetGraphOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "routeDocId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "language",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "void",
        "blob"
      ],
      "url": "Document.Routing.GetGraph",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Routing",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Update comments number on the document",
      "hierarchyPath": "/op:Document.Routing.UpdateCommentsInfoOnDocument",
      "label": "Update comments number on the document",
      "name": "Document.Routing.UpdateCommentsInfoOnDocument",
      "operationClass": "org.nuxeo.ecm.platform.routing.api.operation.UpdateCommentsInfoOnDocumentOperation",
      "params": [],
      "signature": [
        "void",
        "void"
      ],
      "url": "Document.Routing.UpdateCommentsInfoOnDocument",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.ApplyMappingOnTask"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Applies the mapping passed in parameter on the task document. The sourceDoc in the mapping is the input document in the workflow. The operation throws a NuxeoException if the input document is not a Task.",
      "hierarchyPath": "/op:Task.ApplyDocumentMapping",
      "label": "Apply mapping on input task doc",
      "name": "Task.ApplyDocumentMapping",
      "operationClass": "org.nuxeo.ecm.platform.routing.api.operation.MapPropertiesOnTaskOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "mappingName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "document",
        "document"
      ],
      "url": "Task.ApplyDocumentMapping",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.GetOpenTasks"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Returns all open tasks for the input document(s). If the operation is invoked with parameters, all tasks instances for the given 'processId' originating from the given 'nodeId' are returned. The 'processId' is the id of the document representing the workflow instance. The parameter 'username' is used to fetch only tasks assigned to the given user. Tasks are queried using an unrestricted session.",
      "hierarchyPath": "/op:Workflow.GetOpenTasks",
      "label": "Get open tasks",
      "name": "Workflow.GetOpenTasks",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.GetOpenTasksOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "nodeId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "processId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "username",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "document",
        "documents",
        "documents",
        "documents"
      ],
      "url": "Workflow.GetOpenTasks",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Workflow.ResumeNodeOperation"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Resumes a route instance on a given node. When a parameter is not specified, it will be fetched from the current context if the operation is executed in the context of a running workflow (it applies to the current workflow and to the current node).",
      "hierarchyPath": "/op:Workflow.ResumeNode",
      "label": "Resume workflow",
      "name": "Workflow.ResumeNode",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.ResumeNodeOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "nodeId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "workflowInstanceId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "void",
        "void"
      ],
      "url": "Workflow.ResumeNode",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.SetWorkflowNodeVar"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Set a workflow node variable given a name and the value in the context of a running workflow. To compute the value at runtime from the current context you should use an EL expression as the value. This operation works on any input type and return back the input as the output.",
      "hierarchyPath": "/op:Workflow.SetNodeVariable",
      "label": "Set Node Variable",
      "name": "Workflow.SetNodeVariable",
      "operationClass": "org.nuxeo.ecm.platform.routing.api.operation.SetWorkflowNodeVar",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "value",
          "order": 0,
          "type": "object",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "void",
        "void"
      ],
      "url": "Workflow.SetNodeVariable",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.CancelWorkflow"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Cancel the workflow with the given id, where the required id is the id of the document representing the workflow instance.",
      "hierarchyPath": "/op:WorkflowInstance.Cancel",
      "label": "Cancel workflow",
      "name": "WorkflowInstance.Cancel",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.CancelWorkflowOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "void",
        "void"
      ],
      "url": "WorkflowInstance.Cancel",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "BulkRestartWorkflow"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Bulk operation to restart workflows.",
      "hierarchyPath": "/op:WorkflowModel.BulkRestartInstances",
      "label": "Bulk Restart Workflow",
      "name": "WorkflowModel.BulkRestartInstances",
      "operationClass": "org.nuxeo.ecm.platform.routing.api.operation.BulkRestartWorkflow",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "workflowId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "batchSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "nodeId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "reinitLifecycle",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "void",
        "void"
      ],
      "url": "WorkflowModel.BulkRestartInstances",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Workflow.CompleteTaskOperation"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Completes the input task. If this is the last task the workflow will continue. Returns back the task document. \"Status\" is the id of the button the user would have clicked to submit the task form (if the outgoing transitions of the workflow node that created the task have conditions depending on it).@since 5.9.3 and 5.8.0-HF11 you can set multiple  node or workflow variables when completing the task (also similar to ending the task via form submision from the UI).The variables are specified as <i>key=value</i> pairs separated by a new line.To specify multi-line values you can use a \\ character followed by a new line. <p>Example:<pre>description=foo bar</pre>For updating a date, you will need to expose the value as ISO 8601 format, for instance : <p>Example:<pre>workflowVarString=A sample value<br>workflowVarDate=@{org.nuxeo.ecm.core.schema.utils.DateParser.formatW3CDateTime(CurrentDate.date)}</pre><p>For all values, you have to submit a JSON representation. This is an example for a variable of type StringList:<p><pre>nodeVarList = [\"John Doe\", \"John Test\"]</pre></p>",
      "hierarchyPath": "/op:WorkflowTask.Complete",
      "label": "Complete task",
      "name": "WorkflowTask.Complete",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.CompleteTaskOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "comment",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "nodeVariables",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "status",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "workflowVariables",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "url": "WorkflowTask.Complete",
      "version": "2023.8.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operation.chains",
      "hierarchyPath": "/op:updateCommentsOnDoc",
      "label": "updateCommentsOnDoc",
      "name": "updateCommentsOnDoc",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "signature": [
        "void",
        "void"
      ],
      "url": "updateCommentsOnDoc",
      "version": "2023.8.13"
    }
  ],
  "packages": [],
  "pluginSnapshots": {},
  "releaseDate": 1709128388721,
  "version": "2023.8"
}