{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-suggestbox-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.suggestbox.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox",
        "id": "grp:org.nuxeo.ecm.platform.suggestbox",
        "name": "org.nuxeo.ecm.platform.suggestbox",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.suggestbox.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.core.pageproviders/Contributions/org.nuxeo.ecm.platform.suggestbox.core.pageproviders--providers",
              "id": "org.nuxeo.ecm.platform.suggestbox.core.pageproviders--providers",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n      <coreQueryPageProvider name=\"DEFAULT_DOCUMENT_SUGGESTION\">\n        <property name=\"maxResults\">PAGE_SIZE</property>\n        <pattern escapeParameters=\"true\" quoteParameters=\"false\">\n          SELECT * FROM Document WHERE /*+ES: INDEX(dc:title.fulltext) OPERATOR(match_phrase_prefix) */ ecm:fulltext.dc:title LIKE '?' AND ecm:mixinType !=\n          'HiddenInNavigation' AND ecm:isVersion = 0 AND\n          ecm:isTrashed = 0 AND ecm:parentId IS NOT NULL\n        </pattern>\n        <pageSize>10</pageSize>\n      </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.core.pageproviders",
          "name": "org.nuxeo.ecm.platform.suggestbox.core.pageproviders",
          "requirements": [],
          "resolutionOrder": 501,
          "services": [],
          "startOrder": 485,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.suggestbox.core.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n      <coreQueryPageProvider name=\"DEFAULT_DOCUMENT_SUGGESTION\">\n        <property name=\"maxResults\">PAGE_SIZE</property>\n        <pattern quoteParameters=\"false\" escapeParameters=\"true\">\n          SELECT * FROM Document WHERE /*+ES: INDEX(dc:title.fulltext) OPERATOR(match_phrase_prefix) */ ecm:fulltext.dc:title LIKE '?' AND ecm:mixinType !=\n          'HiddenInNavigation' AND ecm:isVersion = 0 AND\n          ecm:isTrashed = 0 AND ecm:parentId IS NOT NULL\n        </pattern>\n        <pageSize>10</pageSize>\n      </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/suggestbox-pageproviders-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The SuggestionService provides a pluggable way to\n    generate explicit suggestions for user actions / intents based on\n    contextual text user input and the content of repositories and user\n    directories for instance.\n\n    The default use-case is to implement the\n    auto-suggest feature in the top right search box of the Nuxeo DM\n    user interface for quick keyboard based navigation in the\n    repository.\n  \n",
          "documentationHtml": "<p>\nThe SuggestionService provides a pluggable way to\ngenerate explicit suggestions for user actions / intents based on\ncontextual text user input and the content of repositories and user\ndirectories for instance.\n</p><p>\nThe default use-case is to implement the\nauto-suggest feature in the top right search box of the Nuxeo DM\nuser interface for quick keyboard based navigation in the\nrepository.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
              "descriptors": [
                "org.nuxeo.ecm.platform.suggestbox.service.descriptors.SuggesterDescriptor"
              ],
              "documentation": "\n      Extension point for registering named suggester\n      implementations and\n      their parameters.\n\n      Suggester implementations\n      should implement the\n      \"org.nuxeo.ecm.platform.suggestbox.service.Suggester\" interface.\n    \n",
              "documentationHtml": "<p>\nExtension point for registering named suggester\nimplementations and\ntheir parameters.\n</p><p>\nSuggester implementations\nshould implement the\n&#34;org.nuxeo.ecm.platform.suggestbox.service.Suggester&#34; interface.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.service.SuggestionService/ExtensionPoints/org.nuxeo.ecm.platform.suggestbox.service.SuggestionService--suggesters",
              "id": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService--suggesters",
              "label": "suggesters (org.nuxeo.ecm.platform.suggestbox.service.SuggestionService)",
              "name": "suggesters",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
              "descriptors": [
                "org.nuxeo.ecm.platform.suggestbox.service.descriptors.SuggesterGroupDescriptor"
              ],
              "documentation": "\n      Extension point for assembling several named\n      suggesters into a named aggregate user interface element.\n\n      For instance the top right search box can use a specific\n      global search-centric SuggesterGroup.\n    \n",
              "documentationHtml": "<p>\nExtension point for assembling several named\nsuggesters into a named aggregate user interface element.\n</p><p>\nFor instance the top right search box can use a specific\nglobal search-centric SuggesterGroup.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.service.SuggestionService/ExtensionPoints/org.nuxeo.ecm.platform.suggestbox.service.SuggestionService--suggesterGroups",
              "id": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService--suggesterGroups",
              "label": "suggesterGroups (org.nuxeo.ecm.platform.suggestbox.service.SuggestionService)",
              "name": "suggesterGroups",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
              "descriptors": [
                "org.nuxeo.ecm.platform.suggestbox.service.descriptors.SuggestionHandlerDescriptor"
              ],
              "documentation": "\n      Extension point for registering Content Automation\n      Operations or Chains as handler for the suggestion selected by the\n      user (for a given group and suggestion type).\n    \n",
              "documentationHtml": "<p>\nExtension point for registering Content Automation\nOperations or Chains as handler for the suggestion selected by the\nuser (for a given group and suggestion type).\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.service.SuggestionService/ExtensionPoints/org.nuxeo.ecm.platform.suggestbox.service.SuggestionService--suggestionHandlers",
              "id": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService--suggestionHandlers",
              "label": "suggestionHandlers (org.nuxeo.ecm.platform.suggestbox.service.SuggestionService)",
              "name": "suggestionHandlers",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
          "name": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
          "requirements": [
            "org.nuxeo.ecm.core.api.repository.RepositoryManager"
          ],
          "resolutionOrder": 502,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.service.SuggestionService/Services/org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
              "id": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 878,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.suggestbox.service.SuggestionService\">\n  <require>org.nuxeo.ecm.core.api.repository.RepositoryManager</require>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.suggestbox.service.SuggestionServiceImpl\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.suggestbox.service.SuggestionService\" />\n  </service>\n\n  <documentation>\n    The SuggestionService provides a pluggable way to\n    generate explicit suggestions for user actions / intents based on\n    contextual text user input and the content of repositories and user\n    directories for instance.\n\n    The default use-case is to implement the\n    auto-suggest feature in the top right search box of the Nuxeo DM\n    user interface for quick keyboard based navigation in the\n    repository.\n  </documentation>\n\n  <extension-point name=\"suggesters\">\n\n    <documentation>\n      Extension point for registering named suggester\n      implementations and\n      their parameters.\n\n      Suggester implementations\n      should implement the\n      \"org.nuxeo.ecm.platform.suggestbox.service.Suggester\" interface.\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.platform.suggestbox.service.descriptors.SuggesterDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"suggesterGroups\">\n\n    <documentation>\n      Extension point for assembling several named\n      suggesters into a named aggregate user interface element.\n\n      For instance the top right search box can use a specific\n      global search-centric SuggesterGroup.\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.platform.suggestbox.service.descriptors.SuggesterGroupDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"suggestionHandlers\">\n\n    <documentation>\n      Extension point for registering Content Automation\n      Operations or Chains as handler for the suggestion selected by the\n      user (for a given group and suggestion type).\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.platform.suggestbox.service.descriptors.SuggestionHandlerDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/suggestbox-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService--suggesters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.core.defaultSuggesters/Contributions/org.nuxeo.ecm.platform.suggestbox.core.defaultSuggesters--suggesters",
              "id": "org.nuxeo.ecm.platform.suggestbox.core.defaultSuggesters--suggesters",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
                "name": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"suggesters\" target=\"org.nuxeo.ecm.platform.suggestbox.service.SuggestionService\">\n\n    <suggester class=\"org.nuxeo.ecm.platform.suggestbox.service.suggesters.DocumentLookupSuggester\" name=\"documentLookupByTitle\">\n      <parameters>\n        <parameter name=\"providerName\">DEFAULT_DOCUMENT_SUGGESTION</parameter>\n        <parameter name=\"highlightFields\">dc:title.fulltext,ecm:binarytext,dc:description.fulltext,ecm:tag,note:note.fulltext,file:content.name</parameter>\n      </parameters>\n    </suggester>\n\n    <suggester class=\"org.nuxeo.ecm.platform.suggestbox.service.suggesters.UserGroupLookupSuggester\" name=\"searchByUsersAndGroups\">\n      <parameters>\n        <parameter name=\"userSuggestionsLimit\">5</parameter>\n        <parameter name=\"groupSuggestionsLimit\">5</parameter>\n        <parameter name=\"searchFields\">fsd:dc_creator</parameter>\n      </parameters>\n    </suggester>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService--suggesterGroups",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.core.defaultSuggesters/Contributions/org.nuxeo.ecm.platform.suggestbox.core.defaultSuggesters--suggesterGroups",
              "id": "org.nuxeo.ecm.platform.suggestbox.core.defaultSuggesters--suggesterGroups",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
                "name": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"suggesterGroups\" target=\"org.nuxeo.ecm.platform.suggestbox.service.SuggestionService\">\n\n    <suggesterGroup name=\"searchbox\">\n      <suggesters>\n        <suggesterName>documentLookupByTitle</suggesterName>\n        <suggesterName>searchByUsersAndGroups</suggesterName>\n      </suggesters>\n    </suggesterGroup>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.core.defaultSuggesters",
          "name": "org.nuxeo.ecm.platform.suggestbox.core.defaultSuggesters",
          "requirements": [],
          "resolutionOrder": 503,
          "services": [],
          "startOrder": 483,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.suggestbox.core.defaultSuggesters\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.suggestbox.service.SuggestionService\"\n    point=\"suggesters\">\n\n    <suggester name=\"documentLookupByTitle\"\n      class=\"org.nuxeo.ecm.platform.suggestbox.service.suggesters.DocumentLookupSuggester\">\n      <parameters>\n        <parameter name=\"providerName\">DEFAULT_DOCUMENT_SUGGESTION</parameter>\n        <parameter name=\"highlightFields\">dc:title.fulltext,ecm:binarytext,dc:description.fulltext,ecm:tag,note:note.fulltext,file:content.name</parameter>\n      </parameters>\n    </suggester>\n\n    <suggester name=\"searchByUsersAndGroups\"\n      class=\"org.nuxeo.ecm.platform.suggestbox.service.suggesters.UserGroupLookupSuggester\">\n      <parameters>\n        <parameter name=\"userSuggestionsLimit\">5</parameter>\n        <parameter name=\"groupSuggestionsLimit\">5</parameter>\n        <parameter name=\"searchFields\">fsd:dc_creator</parameter>\n      </parameters>\n    </suggester>\n\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.suggestbox.service.SuggestionService\"\n    point=\"suggesterGroups\">\n\n    <suggesterGroup name=\"searchbox\">\n      <suggesters>\n        <suggesterName>documentLookupByTitle</suggesterName>\n        <suggesterName>searchByUsersAndGroups</suggesterName>\n      </suggesters>\n    </suggesterGroup>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/suggestbox-suggesters-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.core.defaultSuggestionHandlers/Contributions/org.nuxeo.ecm.platform.suggestbox.core.defaultSuggestionHandlers--operations",
              "id": "org.nuxeo.ecm.platform.suggestbox.core.defaultSuggestionHandlers--operations",
              "registrationOrder": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <operation class=\"org.nuxeo.ecm.platform.suggestbox.automation.SuggestOperation\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.core.defaultSuggestionHandlers",
          "name": "org.nuxeo.ecm.platform.suggestbox.core.defaultSuggestionHandlers",
          "requirements": [],
          "resolutionOrder": 504,
          "services": [],
          "startOrder": 484,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.platform.suggestbox.core.defaultSuggestionHandlers\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n\n    <operation\n      class=\"org.nuxeo.ecm.platform.suggestbox.automation.SuggestOperation\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/suggestbox-operations-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-suggestbox-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.core",
      "id": "org.nuxeo.ecm.platform.suggestbox.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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: Nuxeo Platform Suggestbox Core\r\nNuxeo-Component: OSGI-INF/suggestbox-pageproviders-contrib.xml,OSGI-INF/\r\n suggestbox-service.xml,OSGI-INF/suggestbox-suggesters-contrib.xml,OSGI-\r\n INF/suggestbox-operations-contrib.xml\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.suggestbox.core;singleton:=t\r\n rue\r\n\r\n",
      "maxResolutionOrder": 504,
      "minResolutionOrder": 501,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-easyshare-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "nuxeo-easyshare-core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm",
        "id": "grp:org.nuxeo.ecm",
        "name": "org.nuxeo.ecm",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "nuxeo-easyshare-core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/studio.extensions.easyshare/Contributions/studio.extensions.easyshare--schema",
              "id": "studio.extensions.easyshare--schema",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"easysharefolder\" prefix=\"eshare\" src=\"data/schemas/easysharefolder.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/studio.extensions.easyshare/Contributions/studio.extensions.easyshare--doctype",
              "id": "studio.extensions.easyshare--doctype",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <doctype extends=\"Folder\" name=\"EasyShareFolder\">\n      <facet name=\"Collection\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"common\"/>\n      <schema name=\"easysharefolder\"/>\n      <schema name=\"uid\"/>\n    </doctype>\n    <doctype append=\"true\" name=\"Folder\">\n      <subtypes>\n        <type>EasyShareFolder</type>\n      </subtypes>\n    </doctype>\n    <doctype append=\"true\" name=\"Workspace\">\n      <subtypes>\n        <type>EasyShareFolder</type>\n      </subtypes>\n    </doctype>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/studio.extensions.easyshare/Contributions/studio.extensions.easyshare--types",
              "id": "studio.extensions.easyshare--types",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"EasyShareFolder\">default</type>\n    </types>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/studio.extensions.easyshare/Contributions/studio.extensions.easyshare--types1",
              "id": "studio.extensions.easyshare--types1",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n    <type id=\"EasyShareFolder\">\n      <label>EasyShareFolder</label>\n      <category>Collaborative</category>\n      <icon>/img/easyshare.png</icon>\n      <bigIcon>/img/easyshare_100.png</bigIcon>\n      <description>EasyShareFolder.description</description>\n      <default-view>view_documents</default-view>\n    </type>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notifications",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/studio.extensions.easyshare/Contributions/studio.extensions.easyshare--notifications",
              "id": "studio.extensions.easyshare--notifications",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"notifications\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n    <notification autoSubscribed=\"true\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" name=\"easyShareDownload\" subject=\"EasyShare download notification\" subjectTemplate=\"easyShareDownloadSubject\" template=\"easyShareDownload\">\n      <event name=\"easyShareDownload\"/>\n    </notification>\n    <notification autoSubscribed=\"true\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" name=\"easyShareExpired\" subject=\"EasyShare expired notification\" subjectTemplate=\"easyShareExpiredSubject\" template=\"easyShareExpired\">\n      <event name=\"easyShareExpired\"/>\n    </notification>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--templates",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/studio.extensions.easyshare/Contributions/studio.extensions.easyshare--templates",
              "id": "studio.extensions.easyshare--templates",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"templates\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n    <template name=\"easyShareDownload\" src=\"templates/easyShareDownload.ftl\"/>\n    <template name=\"easyShareExpired\" src=\"templates/easyShareExpired.ftl\"/>\n    <template name=\"easyShareDownloadSubject\" src=\"templates/easyShareDownloadSubject.ftl\"/>\n    <template name=\"easyShareExpiredSubject\" src=\"templates/easyShareExpiredSubject.ftl\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/studio.extensions.easyshare/Contributions/studio.extensions.easyshare--permissionsVisibility",
              "id": "studio.extensions.easyshare--permissionsVisibility",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"permissionsVisibility\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n    <visibility type=\"EasyShareFolder\">\n      <item order=\"20\" show=\"true\">ReadCanCollect</item>\n    </visibility>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/studio.extensions.easyshare",
          "name": "studio.extensions.easyshare",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 200,
          "services": [],
          "startOrder": 760,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<component name=\"studio.extensions.easyshare\" version=\"1.0.0\">\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"easysharefolder\" prefix=\"eshare\" src=\"data/schemas/easysharefolder.xsd\"/>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <doctype name=\"EasyShareFolder\" extends=\"Folder\">\n      <facet name=\"Collection\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"common\"/>\n      <schema name=\"easysharefolder\"/>\n      <schema name=\"uid\"/>\n    </doctype>\n    <doctype name=\"Folder\" append=\"true\">\n      <subtypes>\n        <type>EasyShareFolder</type>\n      </subtypes>\n    </doctype>\n    <doctype name=\"Workspace\" append=\"true\">\n      <subtypes>\n        <type>EasyShareFolder</type>\n      </subtypes>\n    </doctype>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" point=\"types\">\n    <types>\n      <type name=\"EasyShareFolder\">default</type>\n    </types>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n    <type id=\"EasyShareFolder\">\n      <label>EasyShareFolder</label>\n      <category>Collaborative</category>\n      <icon>/img/easyshare.png</icon>\n      <bigIcon>/img/easyshare_100.png</bigIcon>\n      <description>EasyShareFolder.description</description>\n      <default-view>view_documents</default-view>\n    </type>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\" point=\"notifications\">\n    <notification name=\"easyShareDownload\" channel=\"email\"\n                  enabled=\"true\" availableIn=\"Workspace\" autoSubscribed=\"true\"\n                  template=\"easyShareDownload\" subject=\"EasyShare download notification\"\n                  subjectTemplate=\"easyShareDownloadSubject\">\n      <event name=\"easyShareDownload\"/>\n    </notification>\n    <notification name=\"easyShareExpired\" channel=\"email\"\n                  enabled=\"true\" availableIn=\"Workspace\" autoSubscribed=\"true\"\n                  template=\"easyShareExpired\"\n                  subject=\"EasyShare expired notification\"\n                  subjectTemplate=\"easyShareExpiredSubject\">\n      <event name=\"easyShareExpired\"/>\n    </notification>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\" point=\"templates\">\n    <template name=\"easyShareDownload\" src=\"templates/easyShareDownload.ftl\"/>\n    <template name=\"easyShareExpired\" src=\"templates/easyShareExpired.ftl\"/>\n    <template name=\"easyShareDownloadSubject\" src=\"templates/easyShareDownloadSubject.ftl\"/>\n    <template name=\"easyShareExpiredSubject\" src=\"templates/easyShareExpiredSubject.ftl\" />\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n             point=\"permissionsVisibility\">\n    <visibility type=\"EasyShareFolder\">\n      <item show=\"true\" order=\"20\">ReadCanCollect</item>\n    </visibility>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/extensions.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--openUrl",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/org.nuxeo.easyshare.auth.contrib/Contributions/org.nuxeo.easyshare.auth.contrib--openUrl",
              "id": "org.nuxeo.easyshare.auth.contrib--openUrl",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"openUrl\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n  <openUrl name=\"EasyShare\">\n   <grantPattern>/nuxeo/site/easyshare/.*</grantPattern>\n  </openUrl>\n  <openUrl name=\"EasyShareSkins\">\n   <grantPattern>/nuxeo/site/skin/easyshare/.*</grantPattern>\n  </openUrl>\n  <openUrl name=\"EasyShareCss\">\n   <grantPattern>/nuxeo/site/skin/easyshare/css/.*</grantPattern>\n  </openUrl>\n  <openUrl name=\"EasyShareImages\">\n   <grantPattern>/nuxeo/site/skin/easyshare/image/.*</grantPattern>\n  </openUrl>\n </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/org.nuxeo.easyshare.auth.contrib/Contributions/org.nuxeo.easyshare.auth.contrib--providers",
              "id": "org.nuxeo.easyshare.auth.contrib--providers",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n    <coreQueryPageProvider name=\"EASYSHARE_FOLDER_CONTENT_PP\">\n      <pattern>\n      <!-- Note: we want proxies.\n       Parameter is the EasyFolder id -->\n        SELECT * FROM Document WHERE ecm:parentId = ? AND ecm:isVersion = 0 AND\n        ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService--sanitizer",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/org.nuxeo.easyshare.auth.contrib/Contributions/org.nuxeo.easyshare.auth.contrib--sanitizer",
              "id": "org.nuxeo.easyshare.auth.contrib--sanitizer",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
                "name": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"sanitizer\" target=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService\">\n    <sanitizer name=\"easyshare\">\n      <field>easysharefolder:shareComment</field>\n    </sanitizer>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/org.nuxeo.easyshare.auth.contrib",
          "name": "org.nuxeo.easyshare.auth.contrib",
          "requirements": [],
          "resolutionOrder": 201,
          "services": [],
          "startOrder": 80,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.easyshare.auth.contrib\">\n\n <extension point=\"openUrl\"\n  target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n  <openUrl name=\"EasyShare\">\n   <grantPattern>${org.nuxeo.ecm.contextPath}/site/easyshare/.*</grantPattern>\n  </openUrl>\n  <openUrl name=\"EasyShareSkins\">\n   <grantPattern>${org.nuxeo.ecm.contextPath}/site/skin/easyshare/.*</grantPattern>\n  </openUrl>\n  <openUrl name=\"EasyShareCss\">\n   <grantPattern>${org.nuxeo.ecm.contextPath}/site/skin/easyshare/css/.*</grantPattern>\n  </openUrl>\n  <openUrl name=\"EasyShareImages\">\n   <grantPattern>${org.nuxeo.ecm.contextPath}/site/skin/easyshare/image/.*</grantPattern>\n  </openUrl>\n </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n    <coreQueryPageProvider name=\"EASYSHARE_FOLDER_CONTENT_PP\">\n      <pattern>\n      <!-- Note: we want proxies.\n       Parameter is the EasyFolder id -->\n        SELECT * FROM Document WHERE ecm:parentId = ? AND ecm:isVersion = 0 AND\n        ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n  </extension>\n\n  <extension point=\"sanitizer\" target=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService\">\n    <sanitizer name=\"easyshare\">\n      <field>easysharefolder:shareComment</field>\n    </sanitizer>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/easyshare-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-easyshare-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm",
      "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core",
      "id": "nuxeo-easyshare-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\nNuxeo-WebModule: org.nuxeo.ecm.webengine.app.WebEngineModule;name=easysh\r\n are;package=org/nuxeo/easyshare\r\nBundle-Vendor: Nuxeo\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: nuxeo-easyshare-core\r\nNuxeo-Component: OSGI-INF/extensions.xml, OSGI-INF/easyshare-contrib.xml\r\nBundle-SymbolicName: nuxeo-easyshare-core\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.7\r\nNuxeo-AllowOverride: true\r\n\r\n",
      "maxResolutionOrder": 201,
      "minResolutionOrder": 200,
      "packages": [
        "easyshare"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-connect-standalone",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.connect.standalone",
          "org.nuxeo.launcher.commons",
          "org.nuxeo.osgi",
          "org.nuxeo.runtime",
          "org.nuxeo.runtime.aws",
          "org.nuxeo.runtime.cluster",
          "org.nuxeo.runtime.datasource",
          "org.nuxeo.runtime.jtajca",
          "org.nuxeo.runtime.kv",
          "org.nuxeo.runtime.management",
          "org.nuxeo.runtime.metrics",
          "org.nuxeo.runtime.migration",
          "org.nuxeo.runtime.mongodb",
          "org.nuxeo.runtime.nuxeo-runtime-deploy",
          "org.nuxeo.runtime.pubsub",
          "org.nuxeo.runtime.reload",
          "org.nuxeo.runtime.stream"
        ],
        "hierarchyPath": "/grp:org.nuxeo.runtime",
        "id": "grp:org.nuxeo.runtime",
        "name": "org.nuxeo.runtime",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.connect.standalone",
      "components": [],
      "fileName": "nuxeo-connect-standalone-2023.7.9.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.connect.standalone",
      "id": "org.nuxeo.connect.standalone",
      "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: 1\r\nBundle-Version: 0.0.1\r\nBundle-Name: nuxeo connect standalone\r\nBundle-SymbolicName: org.nuxeo.connect.standalone;singleton:=true\r\nBundle-Vendor: Nuxeo\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": null,
      "artifactVersion": null,
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.config",
          "org.nuxeo.osgi.app"
        ],
        "hierarchyPath": "/grp:org.nuxeo.misc",
        "id": "grp:org.nuxeo.misc",
        "name": "org.nuxeo.misc",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.config",
      "components": [],
      "fileName": null,
      "groupId": "grp:org.nuxeo.misc",
      "hierarchyPath": "/grp:org.nuxeo.misc/org.nuxeo.ecm.config",
      "id": "org.nuxeo.ecm.config",
      "location": "",
      "manifest": "No MANIFEST.MF",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": null
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-content-template-manager",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.content.template",
          "org.nuxeo.ecm.platform.contentview.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content",
        "id": "grp:org.nuxeo.ecm.platform.content",
        "name": "org.nuxeo.ecm.platform.content",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.content.template",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The content template manager service provide factories to automatically create Document.\n    The factories are used whenever a document is created using EventListener.\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe content template manager service provide factories to automatically create Document.\nThe factories are used whenever a document is created using EventListener.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
              "descriptors": [
                "org.nuxeo.ecm.platform.content.template.service.ContentFactoryDescriptor"
              ],
              "documentation": "\n      This service provides extension points for ContentFactory registering.\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nThis service provides extension points for ContentFactory registering.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.content.template/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService/ExtensionPoints/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService--factory",
              "id": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService--factory",
              "label": "factory (org.nuxeo.ecm.platform.content.template.service.ContentTemplateService)",
              "name": "factory",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
              "descriptors": [
                "org.nuxeo.ecm.platform.content.template.service.FactoryBindingDescriptor"
              ],
              "documentation": "\n      Define a new factory binding.\n\n      -factoryBinding\n        - name: name of the factory, defining a factory with the same name will override the first to be registered.\n        - factoryName: the name of the factory defined in the factory extensionPoint.\n        - targetType: The document Type for which the factory will be executed.\n\n      -acl: set rights on document to your users.\n        -principal: Name of the group/user\n        -permission: the permission you want to set.\n        -granted: grant or denied the permission.\n\n      -template\n        - typeName: The Type of the Document you want to create.\n        - id: The id of the Document you want to create.\n        - title: The title of the Document you want to create.\n        - description: The description of the Document you want to create.\n        - path: additionary path, added to facctoryBinding's targetType DocPath\n\n      Example of a factoryBinding Registration:\n\n      <code>\n    <factoryBinding factoryName=\"SimpleTemplateFactory\"\n        name=\"RootFactory\" targetType=\"Root\">\n        <acl>\n            <ace granted=\"true\" permission=\"Everything\" principal=\"Administrator\"/>\n            <ace granted=\"true\" permission=\"Everything\" principal=\"administrators\"/>\n            <ace granted=\"true\" permission=\"Read\" principal=\"members\"/>\n            <ace granted=\"true\" permission=\"Version\" principal=\"members\"/>\n        </acl>\n        <template>\n            <templateItem description=\"Default domain\"\n                id=\"default-domain\" title=\"Default domain\" typeName=\"Domain\"/>\n        </template>\n    </factoryBinding>\n</code>\n\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nDefine a new factory binding.\n</p><p>\n-factoryBinding\n- name: name of the factory, defining a factory with the same name will override the first to be registered.\n- factoryName: the name of the factory defined in the factory extensionPoint.\n- targetType: The document Type for which the factory will be executed.\n</p><p>\n-acl: set rights on document to your users.\n-principal: Name of the group/user\n-permission: the permission you want to set.\n-granted: grant or denied the permission.\n</p><p>\n-template\n- typeName: The Type of the Document you want to create.\n- id: The id of the Document you want to create.\n- title: The title of the Document you want to create.\n- description: The description of the Document you want to create.\n- path: additionary path, added to facctoryBinding&#39;s targetType DocPath\n</p><p>\nExample of a factoryBinding Registration:\n</p><p>\n</p><pre><code>    &lt;factoryBinding factoryName&#61;&#34;SimpleTemplateFactory&#34;\n        name&#61;&#34;RootFactory&#34; targetType&#61;&#34;Root&#34;&gt;\n        &lt;acl&gt;\n            &lt;ace granted&#61;&#34;true&#34; permission&#61;&#34;Everything&#34; principal&#61;&#34;Administrator&#34;/&gt;\n            &lt;ace granted&#61;&#34;true&#34; permission&#61;&#34;Everything&#34; principal&#61;&#34;administrators&#34;/&gt;\n            &lt;ace granted&#61;&#34;true&#34; permission&#61;&#34;Read&#34; principal&#61;&#34;members&#34;/&gt;\n            &lt;ace granted&#61;&#34;true&#34; permission&#61;&#34;Version&#34; principal&#61;&#34;members&#34;/&gt;\n        &lt;/acl&gt;\n        &lt;template&gt;\n            &lt;templateItem description&#61;&#34;Default domain&#34;\n                id&#61;&#34;default-domain&#34; title&#61;&#34;Default domain&#34; typeName&#61;&#34;Domain&#34;/&gt;\n        &lt;/template&gt;\n    &lt;/factoryBinding&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.content.template/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService/ExtensionPoints/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService--factoryBinding",
              "id": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService--factoryBinding",
              "label": "factoryBinding (org.nuxeo.ecm.platform.content.template.service.ContentTemplateService)",
              "name": "factoryBinding",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
              "descriptors": [
                "org.nuxeo.ecm.platform.content.template.service.PostContentCreationHandlerDescriptor"
              ],
              "documentation": "\n      @author Thomas Roger (troger@nuxeo.com)\n\n      <code>\n    <postContentCreationHandler\n        class=\"org.nuxeo.ecm.platform.content.template.service.CollaborationPostHandler\"\n        enabled=\"true\" name=\"collaborationPostHandler\" order=\"1\"/>\n</code>\n",
              "documentationHtml": "<p>\n</p><pre><code>    &lt;postContentCreationHandler\n        class&#61;&#34;org.nuxeo.ecm.platform.content.template.service.CollaborationPostHandler&#34;\n        enabled&#61;&#34;true&#34; name&#61;&#34;collaborationPostHandler&#34; order&#61;&#34;1&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.content.template/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService/ExtensionPoints/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService--postContentCreationHandlers",
              "id": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService--postContentCreationHandlers",
              "label": "postContentCreationHandlers (org.nuxeo.ecm.platform.content.template.service.ContentTemplateService)",
              "name": "postContentCreationHandlers",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.content.template/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
          "name": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
          "requirements": [],
          "resolutionOrder": 332,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.content.template/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService/Services/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
              "id": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 844,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\">\n  <implementation\n      class=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateServiceImpl\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\"/>\n  </service>\n\n  <documentation>\n    The content template manager service provide factories to automatically create Document.\n    The factories are used whenever a document is created using EventListener.\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <extension-point name=\"factory\">\n    <documentation>\n      This service provides extension points for ContentFactory registering.\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n\n    <object\n        class=\"org.nuxeo.ecm.platform.content.template.service.ContentFactoryDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"factoryBinding\">\n    <documentation>\n      Define a new factory binding.\n\n      -factoryBinding\n        - name: name of the factory, defining a factory with the same name will override the first to be registered.\n        - factoryName: the name of the factory defined in the factory extensionPoint.\n        - targetType: The document Type for which the factory will be executed.\n\n      -acl: set rights on document to your users.\n        -principal: Name of the group/user\n        -permission: the permission you want to set.\n        -granted: grant or denied the permission.\n\n      -template\n        - typeName: The Type of the Document you want to create.\n        - id: The id of the Document you want to create.\n        - title: The title of the Document you want to create.\n        - description: The description of the Document you want to create.\n        - path: additionary path, added to facctoryBinding's targetType DocPath\n\n      Example of a factoryBinding Registration:\n\n      <code>\n        <factoryBinding name=\"RootFactory\" factoryName=\"SimpleTemplateFactory\" targetType=\"Root\">\n          <acl>\n            <ace principal=\"Administrator\" permission=\"Everything\" granted=\"true\"/>\n            <ace principal=\"administrators\" permission=\"Everything\" granted=\"true\"/>\n            <ace principal=\"members\" permission=\"Read\" granted=\"true\"/>\n            <ace principal=\"members\" permission=\"Version\" granted=\"true\"/>\n          </acl>\n          <template>\n            <templateItem typeName=\"Domain\" id=\"default-domain\" title=\"Default domain\"\n                description=\"Default domain\"/>\n          </template>\n        </factoryBinding>\n      </code>\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n\n    <object\n        class=\"org.nuxeo.ecm.platform.content.template.service.FactoryBindingDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"postContentCreationHandlers\">\n    <documentation>\n      @author Thomas Roger (troger@nuxeo.com)\n\n      <code>\n        <postContentCreationHandler name=\"collaborationPostHandler\"\n          enabled=\"true\" order=\"1\"\n          class=\"org.nuxeo.ecm.platform.content.template.service.CollaborationPostHandler\" />\n      </code>\n\n    </documentation>\n\n    <object\n        class=\"org.nuxeo.ecm.platform.content.template.service.PostContentCreationHandlerDescriptor\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-template-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService--factory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.content.template/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib/Contributions/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib--factory",
              "id": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib--factory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "name": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"factory\" target=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\">\n\n    <contentFactory class=\"org.nuxeo.ecm.platform.content.template.factories.SimpleTemplateBasedFactory\" name=\"SimpleTemplateFactory\"/>\n\n    <contentFactory class=\"org.nuxeo.ecm.platform.content.template.factories.SimpleTemplateBasedRootFactory\" name=\"SimpleTemplateRootFactory\"/>\n\n    <contentFactory class=\"org.nuxeo.ecm.platform.content.template.factories.ImportBasedFactory\" name=\"ImportFactory\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService--factoryBinding",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.content.template/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib/Contributions/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib--factoryBinding",
              "id": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib--factoryBinding",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "name": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"factoryBinding\" target=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\">\n\n    <factoryBinding factoryName=\"SimpleTemplateRootFactory\" name=\"RootFactory\" targetType=\"Root\">\n      <acl>\n        <ace granted=\"true\" permission=\"Everything\" principal=\"Administrator\"/>\n        <ace granted=\"true\" permission=\"Read\" principal=\"members\"/>\n      </acl>\n      <template>\n        <templateItem id=\"default-domain\" title=\"Domain\" typeName=\"Domain\"/>\n      </template>\n    </factoryBinding>\n\n    <factoryBinding factoryName=\"SimpleTemplateFactory\" name=\"DomainFactory\" targetType=\"Domain\">\n      <template>\n        <templateItem id=\"workspaces\" title=\"Workspaces\" typeName=\"WorkspaceRoot\"/>\n        <templateItem id=\"sections\" title=\"Sections\" typeName=\"SectionRoot\"/>\n        <templateItem id=\"templates\" title=\"Templates\" typeName=\"TemplateRoot\"/>\n      </template>\n    </factoryBinding>\n\n    <factoryBinding factoryName=\"SimpleTemplateFactory\" name=\"SectionRootFactory\" targetType=\"SectionRoot\">\n      <acl>\n        <ace granted=\"true\" permission=\"CanAskForPublishing\" principal=\"members\"/>\n      </acl>\n    </factoryBinding>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.content.template/org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib",
          "name": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib",
          "requirements": [],
          "resolutionOrder": 333,
          "services": [],
          "startOrder": 302,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\"\n    point=\"factory\">\n\n    <contentFactory name=\"SimpleTemplateFactory\"\n      class=\"org.nuxeo.ecm.platform.content.template.factories.SimpleTemplateBasedFactory\" />\n\n    <contentFactory name=\"SimpleTemplateRootFactory\"\n      class=\"org.nuxeo.ecm.platform.content.template.factories.SimpleTemplateBasedRootFactory\" />\n\n    <contentFactory name=\"ImportFactory\"\n      class=\"org.nuxeo.ecm.platform.content.template.factories.ImportBasedFactory\" />\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\"\n    point=\"factoryBinding\">\n\n    <factoryBinding name=\"RootFactory\" factoryName=\"SimpleTemplateRootFactory\"\n      targetType=\"Root\">\n      <acl>\n        <ace principal=\"Administrator\" permission=\"Everything\" granted=\"true\" />\n        <ace principal=\"members\" permission=\"Read\" granted=\"true\" />\n      </acl>\n      <template>\n        <templateItem typeName=\"Domain\" id=\"default-domain\" title=\"Domain\" />\n      </template>\n    </factoryBinding>\n\n    <factoryBinding name=\"DomainFactory\" factoryName=\"SimpleTemplateFactory\"\n      targetType=\"Domain\">\n      <template>\n        <templateItem typeName=\"WorkspaceRoot\" id=\"workspaces\"\n          title=\"Workspaces\" />\n        <templateItem typeName=\"SectionRoot\" id=\"sections\" title=\"Sections\" />\n        <templateItem typeName=\"TemplateRoot\" id=\"templates\" title=\"Templates\" />\n      </template>\n    </factoryBinding>\n\n    <factoryBinding name=\"SectionRootFactory\" factoryName=\"SimpleTemplateFactory\"\n      targetType=\"SectionRoot\">\n      <acl>\n        <ace principal=\"members\" permission=\"CanAskForPublishing\" granted=\"true\" />\n      </acl>\n    </factoryBinding>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-template-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Core event listener that takes care of automatically creating children docs according to templates.\n  \n",
          "documentationHtml": "<p>\nCore event listener that takes care of automatically creating children docs according to templates.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Listen for Core event DOCUMENT_UPDATED and DOCUMENT_CREATED and call the\n      DublinCoreStorageService.\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nListen for Core event DOCUMENT_UPDATED and DOCUMENT_CREATED and call the\nDublinCoreStorageService.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.content.template/org.nuxeo.ecm.platform.content.template.listener/Contributions/org.nuxeo.ecm.platform.content.template.listener--listener",
              "id": "org.nuxeo.ecm.platform.content.template.listener--listener",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <documentation>\n      Listen for Core event DOCUMENT_UPDATED and DOCUMENT_CREATED and call the\n      DublinCoreStorageService.\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.content.template.listener.ContentCreationListener\" name=\"templateCreator\" postCommit=\"false\" priority=\"100\">\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.content.template/org.nuxeo.ecm.platform.content.template.listener",
          "name": "org.nuxeo.ecm.platform.content.template.listener",
          "requirements": [],
          "resolutionOrder": 335,
          "services": [],
          "startOrder": 301,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.platform.content.template.listener\">\n\n  <documentation>\n    Core event listener that takes care of automatically creating children docs according to templates.\n  </documentation>\n\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <documentation>\n      Listen for Core event DOCUMENT_UPDATED and DOCUMENT_CREATED and call the\n      DublinCoreStorageService.\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n\n    <listener name=\"templateCreator\" async=\"false\" postCommit=\"false\" class=\"org.nuxeo.ecm.platform.content.template.listener.ContentCreationListener\" priority=\"100\">\n    </listener>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-template-listener.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-content-template-manager-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.content.template",
      "id": "org.nuxeo.ecm.platform.content.template",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.content.template.factories,org.nu\r\n xeo.ecm.platform.content.template.listener,org.nuxeo.ecm.platform.conte\r\n nt.template.service\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo Content Template Manager\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nRequire-Bundle: org.nuxeo.ecm.core.api\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/content-template-framework.xml,OSGI-INF/conten\r\n t-template-contrib.xml,OSGI-INF/content-template-listener.xml\r\nImport-Package: com.google.inject;version=\"2.0.0\",javax.annotation;versi\r\n on=\"1.0\",org.apache.commons.logging,org.jboss.util,org.nuxeo.common.xma\r\n p.annotation,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=sp\r\n lit,org.nuxeo.ecm.core.api.security,org.nuxeo.ecm.core.event,org.nuxeo.\r\n ecm.core.event.impl,org.nuxeo.ecm.core.repository,org.nuxeo.ecm.directo\r\n ry;api=split,org.nuxeo.osgi,org.nuxeo.runtime.api,org.nuxeo.runtime.mod\r\n el\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.content.template;singleton=t\r\n rue\r\n\r\n",
      "maxResolutionOrder": 335,
      "minResolutionOrder": 332,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.api"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-convert",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.convert",
          "org.nuxeo.ecm.core.convert.api",
          "org.nuxeo.ecm.core.convert.plugins"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert",
        "id": "grp:org.nuxeo.ecm.core.convert",
        "name": "org.nuxeo.ecm.core.convert",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.convert",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Service to handle conversions\n  \n",
          "documentationHtml": "<p>\nService to handle conversions\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.core.convert.extension.ConverterDescriptor"
              ],
              "documentation": "\n      This extension can be used to register new converters\n    \n",
              "documentationHtml": "<p>\nThis extension can be used to register new converters\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl/ExtensionPoints/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "id": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "label": "converter (org.nuxeo.ecm.core.convert.service.ConversionServiceImpl)",
              "name": "converter",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.core.convert.extension.GlobalConfigDescriptor"
              ],
              "documentation": "\n      This extension can be used to configure conversion service\n    \n",
              "documentationHtml": "<p>\nThis extension can be used to configure conversion service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl/ExtensionPoints/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--configuration",
              "id": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--configuration",
              "label": "configuration (org.nuxeo.ecm.core.convert.service.ConversionServiceImpl)",
              "name": "configuration",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
          "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
          "requirements": [],
          "resolutionOrder": 138,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl/Services/org.nuxeo.ecm.core.convert.api.ConversionService",
              "id": "org.nuxeo.ecm.core.convert.api.ConversionService",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl/Services/org.nuxeo.ecm.core.convert.service.MimeTypeTranslationHelper",
              "id": "org.nuxeo.ecm.core.convert.service.MimeTypeTranslationHelper",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 804,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n  <documentation>\n    Service to handle conversions\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.convert.api.ConversionService\"/>\n    <provide interface=\"org.nuxeo.ecm.core.convert.service.MimeTypeTranslationHelper\"/>\n  </service>\n\n  <extension-point name=\"converter\">\n    <documentation>\n      This extension can be used to register new converters\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.convert.extension.ConverterDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      This extension can be used to configure conversion service\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.convert.extension.GlobalConfigDescriptor\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/convert-service-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that enforces the source mime type check when calling a converter. Defaults to true.\n\n      @since 10.3\n    \n",
              "documentationHtml": "<p>\nProperty that enforces the source mime type check when calling a converter. Defaults to true.\n</p><p>\n&#64;since 10.3\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.configuration/Contributions/org.nuxeo.ecm.core.convert.configuration--configuration",
              "id": "org.nuxeo.ecm.core.convert.configuration--configuration",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that enforces the source mime type check when calling a converter. Defaults to true.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.convert.enforceSourceMimeTypeCheck\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.configuration",
          "name": "org.nuxeo.ecm.core.convert.configuration",
          "requirements": [],
          "resolutionOrder": 139,
          "services": [],
          "startOrder": 130,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.convert.configuration\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that enforces the source mime type check when calling a converter. Defaults to true.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.convert.enforceSourceMimeTypeCheck\">true</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/properties-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-convert-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert",
      "id": "org.nuxeo.ecm.core.convert",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 5.4.2.qualifier\r\nExport-Package: org.nuxeo.ecm.core.convert.cache,org.nuxeo.ecm.core.conv\r\n ert.extension,org.nuxeo.ecm.core.convert.service\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core\r\nBundle-Name: org.nuxeo.ecm.core.convert\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nEclipse-BuddyPolicy: dependent\r\nNuxeo-Component: OSGI-INF/convert-service-framework.xml,OSGI-INF/propert\r\n ies-contrib.xml\r\nImport-Package: org.apache.commons.logging,org.nuxeo.common.utils,org.nu\r\n xeo.common.xmap.annotation,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.c\r\n ore.api;api=split,org.nuxeo.ecm.core.api.blobholder,org.nuxeo.ecm.core.\r\n api.impl.blob,org.nuxeo.ecm.core.convert.api,org.nuxeo.runtime.api,org.\r\n nuxeo.runtime.model,org.osgi.framework\r\nBundle-SymbolicName: org.nuxeo.ecm.core.convert\r\n\r\n",
      "maxResolutionOrder": 139,
      "minResolutionOrder": 138,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-aspera-core",
      "artifactVersion": "2023.3.3",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "com.nuxeo.aspera.connector.nuxeo-aspera-core",
          "nuxeo-aspera-web",
          "org.nuxeo.ecm.restapi.jaxrs.aspera"
        ],
        "hierarchyPath": "/grp:com.nuxeo.aspera.connector",
        "id": "grp:com.nuxeo.aspera.connector",
        "name": "com.nuxeo.aspera.connector",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=aspera%2Fnuxeo-aspera-connector%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector/job/lts-2023/)\n# Nuxeo Aspera Connector\n\nThe Nuxeo Aspera connector enables users to upload/download binaries with the Aspera Connect client.\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/n/Kvd)\n\n## Context\n\nNuxeo Aspera Connector is an addon that can be plugged to Nuxeo.\nThis repository contains the backend and frontend contributions for the [Nuxeo Platform](https://github.com/nuxeo/nuxeo) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\nNuxeo Aspera Connector code is bundled as a [marketplace package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) that includes all the backend and frontend contributions.\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Nuxeo Aspera Connector pipeline\n- **nuxeo-aspera-core**: Backend contribution for Nuxeo Platform\n- **nuxeo-aspera-package**: Builder for [nuxeo-aspera](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) marketplace package. This package will install all the necessary mechanisms to integrate Aspera Connector capabilities into Nuxeo\n- **nuxeo-aspera-rest**: REST APIs\n- **nuxeo-aspera-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip`_ file for the package.\n\n### Frontend Contributions\n\n`nuxeo-aspera-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Unit Tests\n\n```shell script\nnpm run test\n```\n\n[Web Test Runner](https://modern-web.dev/docs/test-runner/overview/) is the test runner used to run this contribution unit tests.\nThe tests run against bundled versions of Chromium, Firefox and Webkit, using [Playwright](https://www.npmjs.com/package/playwright)\n\n#### Functional tests\n\nTo test Aspera functionality we use `nuxeo-web-ui-ftest` helpers. To run them, we use the command: \n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.1.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `lts/dubnium`, i.e., `v14`.\n\n## Developer Workflow\n\n### Backend\n\n```shell script\nmvn clean install\n```\n\nThat will generate an aspera zip file in the target area, which you can manually install in your server instance.\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Aspera Management UI, it is assumed that there is a Nuxeo server running with Nuxeo Aspera Management package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui#readme).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\nNot being perfect, the suggested way of integration is to create a _symlink_ inside addons folder, under your checkout of Web UI repo and then serve it with `nuxeo-aspera` package/addon.\n\n***Creating the Symlink***\n\n```shell script\ncd ${yourWebUiCheckout}/addons\nln -s ~/${yourAsperaManagementCheckout}/nuxeo-aspera/nuxeo-aspera-web nuxeo-aspera\n```\n\n***Serving Web UI with Aspera Management***\n\n```shell script\nNUXEO_PACKAGES=\"nuxeo-aspera\" npm run start\n```\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Aspera Connector integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector) for each reference branch, and also for each opened PR.\n\nThe following features are available:\n\n- Possibility of having a dedicated preview environment for a PR by using the tag GitHub PR tag `preview`\n- Each PR merge to reference branch will generate a \"release candidate\" package\n\n### Localization Management\n\nTranslations are managed with [Crowdin](https://crowdin.com/).\n\nThe reference file [message.json](./nuxeo-aspera-web/i18n/messages.json) contains the labels and the English values.\n\nTranslations for other languages are managed in the [nuxeo-aspera](https://crowdin.com/project/nuxeo-aspera) Crowdin project, e.g. [French](https://crowdin.com/translate/nuxeo-aspera/4/en-fr).\n\nThe Crowdin GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).\n",
            "digest": "930cbe858f83a0b6985cd093f9462127",
            "encoding": "UTF-8",
            "length": 7878,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "com.nuxeo.aspera.connector.nuxeo-aspera-core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.operations/Contributions/com.nuxeo.aspera.connector.operations--operations",
              "id": "com.nuxeo.aspera.connector.operations--operations",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.3.3",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"com.nuxeo.aspera.connector.operations.InitBatchUpload\"/>\n    <operation class=\"com.nuxeo.aspera.connector.operations.GetChildrenBlobs\"/>\n    <operation class=\"com.nuxeo.aspera.connector.operations.AsperaPageProvider\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.operations",
          "name": "com.nuxeo.aspera.connector.operations",
          "requirements": [],
          "resolutionOrder": 52,
          "services": [],
          "startOrder": 18,
          "version": "2023.3.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"com.nuxeo.aspera.connector.operations\" version=\"1.0\">\n\n  <extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"com.nuxeo.aspera.connector.operations.InitBatchUpload\" />\n    <operation class=\"com.nuxeo.aspera.connector.operations.GetChildrenBlobs\" />\n    <operation class=\"com.nuxeo.aspera.connector.operations.AsperaPageProvider\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "com.nuxeo.aspera.connector.service.AsperaServiceImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.services",
          "name": "com.nuxeo.aspera.connector.services",
          "requirements": [],
          "resolutionOrder": 53,
          "services": [
            {
              "@type": "NXService",
              "componentId": "com.nuxeo.aspera.connector.services",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.services/Services/com.nuxeo.aspera.connector.service.AsperaService",
              "id": "com.nuxeo.aspera.connector.service.AsperaService",
              "overriden": false,
              "version": "2023.3.3"
            }
          ],
          "startOrder": 21,
          "version": "2023.3.3",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"com.nuxeo.aspera.connector.services\">\n  <implementation class=\"com.nuxeo.aspera.connector.service.AsperaServiceImpl\"/>\n  <service>\n    <provide interface=\"com.nuxeo.aspera.connector.service.AsperaService\"/>\n  </service>\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-services-contrib.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "com.nuxeo.aspera.connector.service.AsperaNodeServiceImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.service.asperanode",
          "name": "com.nuxeo.aspera.connector.service.asperanode",
          "requirements": [],
          "resolutionOrder": 54,
          "services": [
            {
              "@type": "NXService",
              "componentId": "com.nuxeo.aspera.connector.service.asperanode",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.service.asperanode/Services/com.nuxeo.aspera.connector.service.AsperaNodeService",
              "id": "com.nuxeo.aspera.connector.service.AsperaNodeService",
              "overriden": false,
              "version": "2023.3.3"
            }
          ],
          "startOrder": 20,
          "version": "2023.3.3",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"com.nuxeo.aspera.connector.service.asperanode\">\n  <implementation class=\"com.nuxeo.aspera.connector.service.AsperaNodeServiceImpl\"/>\n  <service>\n    <provide interface=\"com.nuxeo.aspera.connector.service.AsperaNodeService\"/>\n  </service>\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-node-service-contrib.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.marshallers/Contributions/com.nuxeo.aspera.connector.marshallers--marshallers",
              "id": "com.nuxeo.aspera.connector.marshallers--marshallers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.3.3",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaTransferRequestReader\" enable=\"true\"/>\n    <register class=\"com.nuxeo.aspera.connector.api.marshaller.TransferEnricher\" enable=\"true\"/>\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaCreateTransferRequestReader\" enable=\"true\"/>\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaTransferFilesReader\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.marshallers",
          "name": "com.nuxeo.aspera.connector.marshallers",
          "requirements": [],
          "resolutionOrder": 55,
          "services": [],
          "startOrder": 17,
          "version": "2023.3.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"com.nuxeo.aspera.connector.marshallers\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaTransferRequestReader\" enable=\"true\" />\n    <register class=\"com.nuxeo.aspera.connector.api.marshaller.TransferEnricher\" enable=\"true\" />\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaCreateTransferRequestReader\" enable=\"true\" />\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaTransferFilesReader\" enable=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.pageproviders.contrib/Contributions/com.nuxeo.aspera.connector.pageproviders.contrib--providers",
              "id": "com.nuxeo.aspera.connector.pageproviders.contrib--providers",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.3.3",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n    <genericPageProvider class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\" name=\"aspera_folderish_suggestion\">\n      <pattern escapeParameters=\"true\" quoteParameters=\"false\">\n        SELECT * FROM Document WHERE ecm:fulltext LIKE '?*' AND ecm:mixinType = 'Folderish'\n        AND ecm:mixinType NOT IN ('SystemDocument', 'HiddenInNavigation') AND ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n    </genericPageProvider>\n    <genericPageProvider class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\" name=\"aspera_transfers_list\">\n      <searchDocumentType>AsperaSearch</searchDocumentType>\n        <whereClause>\n          <fixedPart>\n            ecm:primaryType IN ('Transfer')\n            AND ecm:isVersion = 0\n            AND ecm:isTrashed = 0\n          </fixedPart>\n        </whereClause>\n      <aggregates>\n        <aggregate id=\"ecm_currentLifeCycleState_agg\" parameter=\"ecm:currentLifeCycleState\" type=\"terms\">\n          <field name=\"ecm_currentLifeCycleState_agg\" schema=\"aspera_search\"/>\n        </aggregate>\n      </aggregates>\n      <sort ascending=\"false\" column=\"dc:modified\"/>\n      <quickFilters>\n        <quickFilter name=\"download\">\n          <clause>ca:type = 'download'</clause>\n        </quickFilter>\n        <quickFilter name=\"upload\">\n          <clause>ca:type = 'upload'</clause>\n        </quickFilter>\n      </quickFilters>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.pageproviders.contrib",
          "name": "com.nuxeo.aspera.connector.pageproviders.contrib",
          "requirements": [],
          "resolutionOrder": 56,
          "services": [],
          "startOrder": 19,
          "version": "2023.3.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"com.nuxeo.aspera.connector.pageproviders.contrib\">\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n    <genericPageProvider name=\"aspera_folderish_suggestion\" class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\">\n      <pattern quoteParameters=\"false\" escapeParameters=\"true\">\n        SELECT * FROM Document WHERE ecm:fulltext LIKE '?*' AND ecm:mixinType = 'Folderish'\n        AND ecm:mixinType NOT IN ('SystemDocument', 'HiddenInNavigation') AND ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n    </genericPageProvider>\n    <genericPageProvider name=\"aspera_transfers_list\" class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\">\n      <searchDocumentType>AsperaSearch</searchDocumentType>\n        <whereClause>\n          <fixedPart>\n            ecm:primaryType IN ('Transfer')\n            AND ecm:isVersion = 0\n            AND ecm:isTrashed = 0\n          </fixedPart>\n        </whereClause>\n      <aggregates>\n        <aggregate id=\"ecm_currentLifeCycleState_agg\" type=\"terms\" parameter=\"ecm:currentLifeCycleState\">\n          <field schema=\"aspera_search\" name=\"ecm_currentLifeCycleState_agg\" />\n        </aggregate>\n      </aggregates>\n      <sort column=\"dc:modified\" ascending=\"false\" />\n      <quickFilters>\n        <quickFilter name=\"download\">\n          <clause>ca:type = 'download'</clause>\n        </quickFilter>\n        <quickFilter name=\"upload\">\n          <clause>ca:type = 'upload'</clause>\n        </quickFilter>\n      </quickFilters>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-pageproviders.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes/Contributions/com.nuxeo.aspera.connector.doctypes--schema",
              "id": "com.nuxeo.aspera.connector.doctypes--schema",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.3.3",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"common-aspera\" prefix=\"ca\" src=\"schemas/common-aspera.xsd\"/>\n    <schema name=\"aspera_search\" src=\"schemas/aspera_search.xsd\"/>\n    <schema name=\"transfer-dc\" prefix=\"tdc\" src=\"schemas/transfer-dc.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes/Contributions/com.nuxeo.aspera.connector.doctypes--doctype",
              "id": "com.nuxeo.aspera.connector.doctypes--doctype",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.3.3",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"File\" name=\"Transfer\">\n      <schema name=\"common-aspera\"/>\n      <schema name=\"transfer-dc\"/>\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n    <doctype name=\"AsperaSearch\">\n      <schema name=\"aspera_search\"/>\n    </doctype>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes/Contributions/com.nuxeo.aspera.connector.doctypes--types",
              "id": "com.nuxeo.aspera.connector.doctypes--types",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.3.3",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"Transfer\">transfer_lifecyle</type>\n    </types>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes/Contributions/com.nuxeo.aspera.connector.doctypes--lifecycle",
              "id": "com.nuxeo.aspera.connector.doctypes--lifecycle",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.3.3",
              "xml": "<extension point=\"lifecycle\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <lifecycle defaultInitial=\"draft\" name=\"transfer_lifecyle\">\n      <transitions>\n        <transition destinationState=\"started\" name=\"to_started\">\n          <description/>\n        </transition>\n        <transition destinationState=\"pending\" name=\"to_pending\">\n          <description/>\n        </transition>\n        <transition destinationState=\"completed\" name=\"to_completed\">\n          <description/>\n        </transition>\n        <transition destinationState=\"failed\" name=\"to_failed\">\n          <description/>\n        </transition>\n      </transitions>\n      <states>\n        <state description=\"When the transfer is not started - can be modified\" initial=\"true\" name=\"draft\">\n          <transitions>\n            <transition>to_started</transition>\n          </transitions>\n        </state>\n        <state description=\"When the transfer started (no files uploaded yet) - cannot be modified\" name=\"started\">\n          <transitions>\n            <transition>to_started</transition>\n            <transition>to_pending</transition>\n          </transitions>\n        </state>\n        <state description=\"When the transfer started to have files uploaded - cannot be modified\" name=\"pending\">\n          <transitions>\n            <transition>to_failed</transition>\n            <transition>to_completed</transition>\n          </transitions>\n        </state>\n        <state description=\"When the transfer is completed - cannot be modified\" name=\"completed\">\n          <transitions>\n\n          </transitions>\n        </state>\n        <state description=\"When the transfer is completed but some files failed - can be modified\" name=\"failed\">\n          <transitions>\n            <transition>to_pending</transition>\n          </transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes/Contributions/com.nuxeo.aspera.connector.doctypes--adapters",
              "id": "com.nuxeo.aspera.connector.doctypes--adapters",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.3.3",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"com.nuxeo.aspera.connector.adapter.Transfer\" factory=\"com.nuxeo.aspera.connector.adapter.AdaptersFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes",
          "name": "com.nuxeo.aspera.connector.doctypes",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 86,
          "services": [],
          "startOrder": 16,
          "version": "2023.3.3",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"com.nuxeo.aspera.connector.doctypes\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"common-aspera\" src=\"schemas/common-aspera.xsd\" prefix=\"ca\" />\n    <schema name=\"aspera_search\" src=\"schemas/aspera_search.xsd\" />\n    <schema name=\"transfer-dc\" src=\"schemas/transfer-dc.xsd\" prefix=\"tdc\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <doctype name=\"Transfer\" extends=\"File\">\n      <schema name=\"common-aspera\" />\n      <schema name=\"transfer-dc\" />\n      <facet name=\"HiddenInNavigation\" />\n    </doctype>\n\n    <doctype name=\"AsperaSearch\">\n      <schema name=\"aspera_search\" />\n    </doctype>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" point=\"types\">\n    <types>\n      <type name=\"Transfer\">transfer_lifecyle</type>\n    </types>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" point=\"lifecycle\">\n    <lifecycle name=\"transfer_lifecyle\" defaultInitial=\"draft\">\n      <transitions>\n        <transition name=\"to_started\" destinationState=\"started\">\n          <description />\n        </transition>\n        <transition name=\"to_pending\" destinationState=\"pending\">\n          <description />\n        </transition>\n        <transition name=\"to_completed\" destinationState=\"completed\">\n          <description />\n        </transition>\n        <transition name=\"to_failed\" destinationState=\"failed\">\n          <description />\n        </transition>\n      </transitions>\n      <states>\n        <state name=\"draft\" description=\"When the transfer is not started - can be modified\" initial=\"true\">\n          <transitions>\n            <transition>to_started</transition>\n          </transitions>\n        </state>\n        <state name=\"started\" description=\"When the transfer started (no files uploaded yet) - cannot be modified\">\n          <transitions>\n            <transition>to_started</transition>\n            <transition>to_pending</transition>\n          </transitions>\n        </state>\n        <state name=\"pending\" description=\"When the transfer started to have files uploaded - cannot be modified\">\n          <transitions>\n            <transition>to_failed</transition>\n            <transition>to_completed</transition>\n          </transitions>\n        </state>\n        <state name=\"completed\" description=\"When the transfer is completed - cannot be modified\">\n          <transitions>\n\n          </transitions>\n        </state>\n        <state name=\"failed\" description=\"When the transfer is completed but some files failed - can be modified\">\n          <transitions>\n            <transition>to_pending</transition>\n          </transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>\n\n  <extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"com.nuxeo.aspera.connector.adapter.Transfer\"\n             factory=\"com.nuxeo.aspera.connector.adapter.AdaptersFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-doctypes.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-aspera-core-2023.3.3.jar",
      "groupId": "com.nuxeo.aspera.connector",
      "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core",
      "id": "com.nuxeo.aspera.connector.nuxeo-aspera-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.8.1\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.0\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: nuxeo-aspera-core\r\nBundle-SymbolicName: com.nuxeo.aspera.connector.nuxeo-aspera-core;single\r\n ton=true\r\nNuxeo-Component: OSGI-INF/aspera-operations-contrib.xml, OSGI-INF/aspera\r\n -doctypes.xml, OSGI-INF/aspera-services-contrib.xml, OSGI-INF/aspera-no\r\n de-service-contrib.xml, OSGI-INF/aspera-marshallers-contrib.xml, OSGI-I\r\n NF/aspera-pageproviders.xml\r\n\r\n",
      "maxResolutionOrder": 86,
      "minResolutionOrder": 52,
      "packages": [
        "nuxeo-aspera"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=aspera%2Fnuxeo-aspera-connector%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector/job/lts-2023/)\n# Nuxeo Aspera Connector\n\nThe Nuxeo Aspera connector enables users to upload/download binaries with the Aspera Connect client.\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/n/Kvd)\n\n## Context\n\nNuxeo Aspera Connector is an addon that can be plugged to Nuxeo.\nThis repository contains the backend and frontend contributions for the [Nuxeo Platform](https://github.com/nuxeo/nuxeo) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\nNuxeo Aspera Connector code is bundled as a [marketplace package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) that includes all the backend and frontend contributions.\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Nuxeo Aspera Connector pipeline\n- **nuxeo-aspera-core**: Backend contribution for Nuxeo Platform\n- **nuxeo-aspera-package**: Builder for [nuxeo-aspera](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) marketplace package. This package will install all the necessary mechanisms to integrate Aspera Connector capabilities into Nuxeo\n- **nuxeo-aspera-rest**: REST APIs\n- **nuxeo-aspera-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip`_ file for the package.\n\n### Frontend Contributions\n\n`nuxeo-aspera-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Unit Tests\n\n```shell script\nnpm run test\n```\n\n[Web Test Runner](https://modern-web.dev/docs/test-runner/overview/) is the test runner used to run this contribution unit tests.\nThe tests run against bundled versions of Chromium, Firefox and Webkit, using [Playwright](https://www.npmjs.com/package/playwright)\n\n#### Functional tests\n\nTo test Aspera functionality we use `nuxeo-web-ui-ftest` helpers. To run them, we use the command: \n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.1.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `lts/dubnium`, i.e., `v14`.\n\n## Developer Workflow\n\n### Backend\n\n```shell script\nmvn clean install\n```\n\nThat will generate an aspera zip file in the target area, which you can manually install in your server instance.\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Aspera Management UI, it is assumed that there is a Nuxeo server running with Nuxeo Aspera Management package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui#readme).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\nNot being perfect, the suggested way of integration is to create a _symlink_ inside addons folder, under your checkout of Web UI repo and then serve it with `nuxeo-aspera` package/addon.\n\n***Creating the Symlink***\n\n```shell script\ncd ${yourWebUiCheckout}/addons\nln -s ~/${yourAsperaManagementCheckout}/nuxeo-aspera/nuxeo-aspera-web nuxeo-aspera\n```\n\n***Serving Web UI with Aspera Management***\n\n```shell script\nNUXEO_PACKAGES=\"nuxeo-aspera\" npm run start\n```\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Aspera Connector integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector) for each reference branch, and also for each opened PR.\n\nThe following features are available:\n\n- Possibility of having a dedicated preview environment for a PR by using the tag GitHub PR tag `preview`\n- Each PR merge to reference branch will generate a \"release candidate\" package\n\n### Localization Management\n\nTranslations are managed with [Crowdin](https://crowdin.com/).\n\nThe reference file [message.json](./nuxeo-aspera-web/i18n/messages.json) contains the labels and the English values.\n\nTranslations for other languages are managed in the [nuxeo-aspera](https://crowdin.com/project/nuxeo-aspera) Crowdin project, e.g. [French](https://crowdin.com/translate/nuxeo-aspera/4/en-fr).\n\nThe Crowdin GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).\n",
        "digest": "930cbe858f83a0b6985cd093f9462127",
        "encoding": "UTF-8",
        "length": 7878,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.3.3"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-imaging-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.picture.core",
          "org.nuxeo.ecm.platform.picture.jsf",
          "org.nuxeo.ecm.platform.picture.rest"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture",
        "id": "grp:org.nuxeo.ecm.platform.picture",
        "name": "org.nuxeo.ecm.platform.picture",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.picture.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Defines configurations for imaging service\n  \n",
          "documentationHtml": "<p>\nDefines configurations for imaging service\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.picture.ImagingComponent--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.ImagingComponent.default.config/Contributions/org.nuxeo.ecm.platform.picture.ImagingComponent.default.config--configuration",
              "id": "org.nuxeo.ecm.platform.picture.ImagingComponent.default.config--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.picture.ImagingComponent",
                "name": "org.nuxeo.ecm.platform.picture.ImagingComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.ecm.platform.picture.ImagingComponent\">\n\n    <configuration>\n      <parameters>\n        <!-- global configuration variables -->\n        <parameter name=\"conversionFormat\">jpg</parameter>\n      </parameters>\n    </configuration>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.picture.ImagingComponent--pictureConversions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.ImagingComponent.default.config/Contributions/org.nuxeo.ecm.platform.picture.ImagingComponent.default.config--pictureConversions",
              "id": "org.nuxeo.ecm.platform.picture.ImagingComponent.default.config--pictureConversions",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.picture.ImagingComponent",
                "name": "org.nuxeo.ecm.platform.picture.ImagingComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"pictureConversions\" target=\"org.nuxeo.ecm.platform.picture.ImagingComponent\">\n\n    <pictureConversion chainId=\"Image.Blob.Resize\" default=\"true\" description=\"Thumbnail size\" id=\"Thumbnail\" maxSize=\"100\" order=\"0\" rendition=\"true\"/>\n\n    <pictureConversion chainId=\"Image.Blob.Resize\" default=\"true\" description=\"Small size\" id=\"Small\" maxSize=\"560\" order=\"100\" rendition=\"true\"/>\n\n    <pictureConversion chainId=\"Image.Blob.Resize\" default=\"true\" description=\"Medium size\" id=\"Medium\" maxSize=\"1000\" order=\"200\" rendition=\"true\"/>\n\n    <pictureConversion chainId=\"Image.Blob.Resize\" default=\"true\" description=\"Full HD size\" id=\"FullHD\" maxSize=\"1920\" order=\"300\" rendition=\"true\"/>\n\n    <pictureConversion chainId=\"Image.Blob.Resize\" default=\"true\" description=\"Original jpeg image\" id=\"OriginalJpeg\" order=\"400\" rendition=\"true\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.ImagingComponent.default.config",
          "name": "org.nuxeo.ecm.platform.picture.ImagingComponent.default.config",
          "requirements": [],
          "resolutionOrder": 378,
          "services": [],
          "startOrder": 371,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.picture.ImagingComponent.default.config\">\n  <documentation>\n    Defines configurations for imaging service\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.picture.ImagingComponent\"\n    point=\"configuration\">\n\n    <configuration>\n      <parameters>\n        <!-- global configuration variables -->\n        <parameter name=\"conversionFormat\">jpg</parameter>\n      </parameters>\n    </configuration>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.picture.ImagingComponent\"\n    point=\"pictureConversions\">\n\n    <pictureConversion id=\"Thumbnail\" description=\"Thumbnail size\"\n      maxSize=\"100\" order=\"0\" chainId=\"Image.Blob.Resize\"\n      default=\"true\" rendition=\"true\" />\n\n    <pictureConversion id=\"Small\" description=\"Small size\"\n      maxSize=\"560\" order=\"100\" chainId=\"Image.Blob.Resize\"\n      default=\"true\" rendition=\"true\" />\n\n    <pictureConversion id=\"Medium\" description=\"Medium size\"\n      maxSize=\"1000\" order=\"200\" chainId=\"Image.Blob.Resize\"\n      default=\"true\" rendition=\"true\" />\n\n    <pictureConversion id=\"FullHD\" description=\"Full HD size\"\n      maxSize=\"1920\" order=\"300\" chainId=\"Image.Blob.Resize\"\n      default=\"true\" rendition=\"true\" />\n\n    <pictureConversion id=\"OriginalJpeg\" description=\"Original jpeg image\"\n      order=\"400\" chainId=\"Image.Blob.Resize\"\n      default=\"true\" rendition=\"true\" />\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/imaging-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.imaging.bulk/Contributions/org.nuxeo.ecm.platform.imaging.bulk--actions",
              "id": "org.nuxeo.ecm.platform.imaging.bulk--actions",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"50\" bucketSize=\"100\" httpEnabled=\"false\" inputStream=\"bulk/recomputeViews\" name=\"recomputeViews\" validationClass=\"org.nuxeo.ecm.platform.picture.recompute.RecomputeViewsActionValidation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.imaging.bulk/Contributions/org.nuxeo.ecm.platform.imaging.bulk--streamProcessor",
              "id": "org.nuxeo.ecm.platform.imaging.bulk--streamProcessor",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.platform.picture.recompute.RecomputeViewsAction\" defaultConcurrency=\"2\" defaultPartitions=\"6\" name=\"recomputeViews\">\n      <policy continueOnFailure=\"true\" delay=\"5s\" maxDelay=\"10s\" maxRetries=\"1\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.imaging.bulk",
          "name": "org.nuxeo.ecm.platform.imaging.bulk",
          "requirements": [
            "org.nuxeo.ecm.core.bulk"
          ],
          "resolutionOrder": 379,
          "services": [],
          "startOrder": 337,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.imaging.bulk\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.bulk</require>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"recomputeViews\" inputStream=\"bulk/recomputeViews\" bucketSize=\"100\" batchSize=\"50\" httpEnabled=\"false\"\n      validationClass=\"org.nuxeo.ecm.platform.picture.recompute.RecomputeViewsActionValidation\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"recomputeViews\" class=\"org.nuxeo.ecm.platform.picture.recompute.RecomputeViewsAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.recomputeViews.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.recomputeViews.defaultPartitions:=6}\">\n      <policy name=\"default\" maxRetries=\"${nuxeo.bulk.action.recomputeViews.maxRetries:=1}\" delay=\"5s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/imaging-bulk-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.pageproviders/Contributions/org.nuxeo.ecm.platform.picture.pageproviders--providers",
              "id": "org.nuxeo.ecm.platform.picture.pageproviders--providers",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"document_picker\">\n      <trackUsage>true</trackUsage>\n      <searchDocumentType>AdvancedSearch</searchDocumentType>\n      <whereClause>\n        <predicate operator=\"FULLTEXT\" parameter=\"ecm:fulltext\">\n          <field name=\"fulltext_all\" schema=\"advanced_search\"/>\n        </predicate>\n        <fixedPart>\n          ecm:mixinType = 'Picture' AND\n          file:content IS NOT NULL AND\n          ecm:mixinType != 'HiddenInNavigation' AND\n          ecm:isVersion = 0 AND\n          ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.pageproviders",
          "name": "org.nuxeo.ecm.platform.picture.pageproviders",
          "requirements": [],
          "resolutionOrder": 380,
          "services": [],
          "startOrder": 386,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.picture.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n\n    <coreQueryPageProvider name=\"document_picker\">\n      <trackUsage>true</trackUsage>\n      <searchDocumentType>AdvancedSearch</searchDocumentType>\n      <whereClause>\n        <predicate parameter=\"ecm:fulltext\" operator=\"FULLTEXT\">\n          <field schema=\"advanced_search\" name=\"fulltext_all\" />\n        </predicate>\n        <fixedPart>\n          ecm:mixinType = 'Picture' AND\n          file:content IS NOT NULL AND\n          ecm:mixinType != 'HiddenInNavigation' AND\n          ecm:isVersion = 0 AND\n          ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/imaging-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.jsf.types/Contributions/org.nuxeo.ecm.platform.picture.jsf.types--types",
              "id": "org.nuxeo.ecm.platform.picture.jsf.types--types",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n\n    <type id=\"PictureBook\">\n      <label>PictureBook</label>\n      <icon>/icons/picturebook.gif</icon>\n      <bigIcon>/icons/picturebook_100.png</bigIcon>\n      <description>PictureBook.description</description>\n      <category>Collaborative</category>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Picture\">\n      <label>Picture</label>\n      <default-view>view_documents</default-view>\n      <icon>/icons/image.gif</icon>\n      <bigIcon>/icons/image_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <description>Picture.description</description>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>picture</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>picture</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <layouts mode=\"drive\">\n        <layout>heading</layout>\n        <layout>picture</layout>\n        <layout>dublincore</layout>\n      </layouts>\n    </type>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.jsf.types",
          "name": "org.nuxeo.ecm.platform.picture.jsf.types",
          "requirements": [],
          "resolutionOrder": 381,
          "services": [],
          "startOrder": 383,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.jsf.types\">\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n\n    <type id=\"PictureBook\">\n      <label>PictureBook</label>\n      <icon>/icons/picturebook.gif</icon>\n      <bigIcon>/icons/picturebook_100.png</bigIcon>\n      <description>PictureBook.description</description>\n      <category>Collaborative</category>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Picture\">\n      <label>Picture</label>\n      <default-view>view_documents</default-view>\n      <icon>/icons/image.gif</icon>\n      <bigIcon>/icons/image_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <description>Picture.description</description>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>picture</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>picture</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <layouts mode=\"drive\">\n        <layout>heading</layout>\n        <layout>picture</layout>\n        <layout>dublincore</layout>\n      </layouts>\n    </type>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/imaging-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.LifeCycleManagerExtensions/Contributions/org.nuxeo.ecm.platform.picture.LifeCycleManagerExtensions--types",
              "id": "org.nuxeo.ecm.platform.picture.LifeCycleManagerExtensions--types",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"Picture\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.LifeCycleManagerExtensions",
          "name": "org.nuxeo.ecm.platform.picture.LifeCycleManagerExtensions",
          "requirements": [],
          "resolutionOrder": 382,
          "services": [],
          "startOrder": 372,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.LifeCycleManagerExtensions\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n             point=\"types\">\n    <types>\n      <type name=\"Picture\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/picture-life-cycle-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.listeners/Contributions/org.nuxeo.ecm.platform.picture.listeners--listener",
              "id": "org.nuxeo.ecm.platform.picture.listeners--listener",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.picture.listener.PictureChangedListener\" name=\"pictureChangedListener\" postCommit=\"false\" priority=\"20\">\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.picture.listener.PictureViewsGenerationListener\" name=\"pictureViewsGenerationListener\" postCommit=\"true\" priority=\"20\">\n      <event>documentCreated</event>\n      <event>documentModified</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.listeners",
          "name": "org.nuxeo.ecm.platform.picture.listeners",
          "requirements": [],
          "resolutionOrder": 383,
          "services": [],
          "startOrder": 384,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.listeners\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n\n    <listener name=\"pictureChangedListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.picture.listener.PictureChangedListener\" priority=\"20\">\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n\n    <listener name=\"pictureViewsGenerationListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.platform.picture.listener.PictureViewsGenerationListener\" priority=\"20\">\n      <event>documentCreated</event>\n      <event>documentModified</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/listeners-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.web.coreTypes/Contributions/org.nuxeo.ecm.platform.picture.web.coreTypes--schema",
              "id": "org.nuxeo.ecm.platform.picture.web.coreTypes--schema",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"picturebook\" src=\"schema/picturebook.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.web.coreTypes/Contributions/org.nuxeo.ecm.platform.picture.web.coreTypes--doctype",
              "id": "org.nuxeo.ecm.platform.picture.web.coreTypes--doctype",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <doctype extends=\"Folder\" name=\"PictureBook\">\n      <schema name=\"picturebook\"/>\n    </doctype>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.web.coreTypes",
          "name": "org.nuxeo.ecm.platform.picture.web.coreTypes",
          "requirements": [
            "org.nuxeo.ecm.core.schema.TypeService",
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 384,
          "services": [],
          "startOrder": 391,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.web.coreTypes\">\n\n  <require>org.nuxeo.ecm.core.schema.TypeService</require>\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n             point=\"schema\">\n    <schema name=\"picturebook\" src=\"schema/picturebook.xsd\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n             point=\"doctype\">\n    <doctype name=\"PictureBook\" extends=\"Folder\">\n      <schema name=\"picturebook\"/>\n    </doctype>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/picturebook-schemas-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.pictureweb.LifeCycleManagerExtensions/Contributions/org.nuxeo.ecm.platform.pictureweb.LifeCycleManagerExtensions--types",
              "id": "org.nuxeo.ecm.platform.pictureweb.LifeCycleManagerExtensions--types",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"PictureBook\">default</type>\n\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.pictureweb.LifeCycleManagerExtensions",
          "name": "org.nuxeo.ecm.platform.pictureweb.LifeCycleManagerExtensions",
          "requirements": [],
          "resolutionOrder": 385,
          "services": [],
          "startOrder": 395,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n    name=\"org.nuxeo.ecm.platform.pictureweb.LifeCycleManagerExtensions\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n             point=\"types\">\n    <types>\n      <type name=\"PictureBook\">default</type>\n\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/picturebook-life-cycle-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--command",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.commandline.imagemagick/Contributions/org.nuxeo.ecm.platform.picture.commandline.imagemagick--command",
              "id": "org.nuxeo.ecm.platform.picture.commandline.imagemagick--command",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n\n    <command enabled=\"true\" name=\"identify\">\n      <commandLine>identify</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -ping -format '%m %w %h %z %[colorspace]' #{inputFilePath}[0]</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -ping -format \"%m %w %h %z %[colorspace]\" #{inputFilePath}[0]</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"crop\">\n      <commandLine>stream</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -map rgb -storage-type char -extract #{tileWidth}x#{tileHeight}+#{offsetX}+#{offsetY} #{inputFilePath}[0] - | convert -depth 8 -size #{tileWidth}x#{tileHeight} rgb:- #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -map rgb -storage-type char -extract #{tileWidth}x#{tileHeight}+#{offsetX}+#{offsetY} #{inputFilePath}[0] - | convert -depth 8 -size #{tileWidth}x#{tileHeight} rgb:- #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"resizer\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -depth #{targetDepth} #{inputFilePath}[0] jpg:- | convert - -resize #{targetWidth}x#{targetHeight} #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -depth #{targetDepth} #{inputFilePath}[0] -resize #{targetWidth}x#{targetHeight} #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"gifResizer\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -depth #{targetDept h} #{inputFilePath}[0] -coalesce -resize #{targetWidth}x#{targetHeight} -deconstruct #{outputFilePath}</parameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"jpegResizer\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -background white -flatten -depth #{targetDepth} #{inputFilePath}[0] jpg:- | convert - -resize #{targetWidth}x#{targetHeight} #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -background white -flatten -depth #{targetDepth} #{inputFilePath}[0] -resize #{targetWidth}x#{targetHeight} #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"rotate\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{inputFilePath}[0] -rotate #{angle} #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{inputFilePath}[0] -rotate #{angle} #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"cropAndResize\">\n      <commandLine>stream</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -map #{mapComponents} -storage-type char -extract #{tileWidth}x#{tileHeight}+#{offsetX}+#{offsetY} #{inputFilePath}[0] - | convert -depth 8 -size #{tileWidth}x#{tileHeight} -resize #{targetWidth}x#{targetHeight}! #{mapComponents}:- #{outputFilePath}</parameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"multiTiler\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{inputFilePath}[0] -crop #{tileWidth}x#{tileHeight} +repage #{outputFilePath}</parameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.commandline.imagemagick",
          "name": "org.nuxeo.ecm.platform.picture.commandline.imagemagick",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 386,
          "services": [],
          "startOrder": 377,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.commandline.imagemagick\">\n\n  <require>org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\"\n    point=\"command\">\n\n    <command name=\"identify\" enabled=\"true\">\n      <commandLine>identify</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -ping -format '%m %w %h %z %[colorspace]' #{inputFilePath}[0]</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -ping -format \"%m %w %h %z %[colorspace]\" #{inputFilePath}[0]</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command name=\"crop\" enabled=\"true\">\n      <commandLine>stream</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -map rgb -storage-type char -extract #{tileWidth}x#{tileHeight}+#{offsetX}+#{offsetY} #{inputFilePath}[0] - | convert -depth 8 -size #{tileWidth}x#{tileHeight} rgb:- #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -map rgb -storage-type char -extract #{tileWidth}x#{tileHeight}+#{offsetX}+#{offsetY} #{inputFilePath}[0] - | convert -depth 8 -size #{tileWidth}x#{tileHeight} rgb:- #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command name=\"resizer\" enabled=\"true\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -depth #{targetDepth} #{inputFilePath}[0] jpg:- | convert - -resize #{targetWidth}x#{targetHeight} #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -depth #{targetDepth} #{inputFilePath}[0] -resize #{targetWidth}x#{targetHeight} #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command name=\"gifResizer\" enabled=\"true\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -depth #{targetDept h} #{inputFilePath}[0] -coalesce -resize #{targetWidth}x#{targetHeight} -deconstruct #{outputFilePath}</parameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command name=\"jpegResizer\" enabled=\"true\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -background white -flatten -depth #{targetDepth} #{inputFilePath}[0] jpg:- | convert - -resize #{targetWidth}x#{targetHeight} #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -background white -flatten -depth #{targetDepth} #{inputFilePath}[0] -resize #{targetWidth}x#{targetHeight} #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command name=\"rotate\" enabled=\"true\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{inputFilePath}[0] -rotate #{angle} #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{inputFilePath}[0] -rotate #{angle} #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command name=\"cropAndResize\" enabled=\"true\">\n      <commandLine>stream</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -map #{mapComponents} -storage-type char -extract #{tileWidth}x#{tileHeight}+#{offsetX}+#{offsetY} #{inputFilePath}[0] - | convert -depth 8 -size #{tileWidth}x#{tileHeight} -resize #{targetWidth}x#{targetHeight}! #{mapComponents}:- #{outputFilePath}</parameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n    <command name=\"multiTiler\" enabled=\"true\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{inputFilePath}[0] -crop #{tileWidth}x#{tileHeight} +repage #{outputFilePath}</parameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/commandline-imagemagick-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService",
          "declaredStartOrder": null,
          "documentation": "\n    The Library Selector service's goal is to provide easy configuration of image processing backend.\n    It means you can contribute different implementation of an interface to process images. We currently provide\n    ImageMagick and ImageJ implementations.\n    @author Laurent Doguin (ldoguin@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe Library Selector service&#39;s goal is to provide easy configuration of image processing backend.\nIt means you can contribute different implementation of an interface to process images. We currently provide\nImageMagick and ImageJ implementations.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService",
              "descriptors": [
                "org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorServiceDescriptor"
              ],
              "documentation": "@author Laurent Doguin (ldoguin@nuxeo.com) This\n      extension point let you choose or add an image processing library.\n    \n",
              "documentationHtml": "<p>\nextension point let you choose or add an image processing library.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService/ExtensionPoints/org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService--LibrarySelector",
              "id": "org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService--LibrarySelector",
              "label": "LibrarySelector (org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService)",
              "name": "LibrarySelector",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService--LibrarySelector",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService/Contributions/org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService--LibrarySelector",
              "id": "org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService--LibrarySelector",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService",
                "name": "org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"LibrarySelector\" target=\"org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService\">\n    <LibrarySelector>\n      <ImageUtils class=\"org.nuxeo.ecm.platform.picture.core.im.IMImageUtils\" name=\"ImageMagick\"/>\n    </LibrarySelector>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService",
          "name": "org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService",
          "requirements": [
            "org.nuxeo.ecm.platform.picture.commandline.imagemagick"
          ],
          "resolutionOrder": 387,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService/Services/org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelector",
              "id": "org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelector",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 862,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService\">\n\n  <implementation class=\"org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService\"/>\n  <require>org.nuxeo.ecm.platform.picture.commandline.imagemagick</require>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelector\"/>\n  </service>\n\n  <documentation>\n    The Library Selector service's goal is to provide easy configuration of image processing backend.\n    It means you can contribute different implementation of an interface to process images. We currently provide\n    ImageMagick and ImageJ implementations.\n    @author Laurent Doguin (ldoguin@nuxeo.com)\n  </documentation>\n\n  <extension-point name=\"LibrarySelector\">\n    <documentation>@author Laurent Doguin (ldoguin@nuxeo.com) This\n      extension point let you choose or add an image processing library.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorServiceDescriptor\"/>\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.platform.picture.core.libraryselector.LibrarySelectorService\"\n             point=\"LibrarySelector\">\n    <LibrarySelector>\n      <ImageUtils\n          class=\"org.nuxeo.ecm.platform.picture.core.im.IMImageUtils\"\n          name=\"ImageMagick\"/>\n    </LibrarySelector>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/libraryselector-config-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Simple plugin for the file manager. Creates an Image document from\n      any graphic file.\n    \n",
              "documentationHtml": "<p>\nSimple plugin for the file manager. Creates an Image document from\nany graphic file.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService--plugins",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.filemanager.contrib/Contributions/org.nuxeo.ecm.platform.picture.filemanager.contrib--plugins",
              "id": "org.nuxeo.ecm.platform.picture.filemanager.contrib--plugins",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"plugins\" target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\">\n    <documentation>\n      Simple plugin for the file manager. Creates an Image document from\n      any graphic file.\n    </documentation>\n    <plugin class=\"org.nuxeo.ecm.platform.picture.extension.ImagePlugin\" name=\"Imageplugin\" order=\"10\">\n      <filter>image/jpeg</filter>\n      <filter>image/gif</filter>\n      <filter>image/png</filter>\n      <filter>image/tiff</filter>\n      <filter>image/bmp</filter>\n      <filter>image/x-ms-bmp</filter>\n      <!-- RAW images mime type -->\n      <filter>image/x-canon-cr2</filter>\n      <filter>image/x-canon-crw</filter>\n      <filter>image/x-nikon-nef</filter>\n      <filter>image/x-adobe-dng</filter>\n      <filter>image/x-panasonic-raw</filter>\n      <filter>image/x-fuji-raf</filter>\n      <filter>image/x-sigma-x3f</filter>\n      <filter>image/x-pentax-pef</filter>\n      <filter>image/x-kodak-dcr</filter>\n      <filter>image/x-kodak-kdc</filter>\n      <filter>image/x-sony-sr2</filter>\n      <filter>image/x-sony-arw</filter>\n      <filter>image/x-sony-srf</filter>\n      <filter>image/x-minolta-mrw</filter>\n      <filter>image/x-olympus-orf</filter>\n      <filter>image/x-raw-epson</filter>\n      <filter>image/x-portable-pixmap</filter>\n      <filter>image/x-dpx</filter>\n\n      <filter>image/raw</filter>\n      <filter>image/x-raw</filter>\n\n      <filter>image/svg.*</filter>\n\n      <filter>application/photoshop</filter>\n      <filter>application/illustrator</filter>\n      <filter>application/postscript</filter>\n    </plugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.filemanager.contrib",
          "name": "org.nuxeo.ecm.platform.picture.filemanager.contrib",
          "requirements": [],
          "resolutionOrder": 388,
          "services": [],
          "startOrder": 380,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.filemanager.contrib\">\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\"\n      point=\"plugins\">\n    <documentation>\n      Simple plugin for the file manager. Creates an Image document from\n      any graphic file.\n    </documentation>\n    <plugin name=\"Imageplugin\"\n            class=\"org.nuxeo.ecm.platform.picture.extension.ImagePlugin\"\n            order=\"10\">\n      <filter>image/jpeg</filter>\n      <filter>image/gif</filter>\n      <filter>image/png</filter>\n      <filter>image/tiff</filter>\n      <filter>image/bmp</filter>\n      <filter>image/x-ms-bmp</filter>\n      <!-- RAW images mime type -->\n      <filter>image/x-canon-cr2</filter>\n      <filter>image/x-canon-crw</filter>\n      <filter>image/x-nikon-nef</filter>\n      <filter>image/x-adobe-dng</filter>\n      <filter>image/x-panasonic-raw</filter>\n      <filter>image/x-fuji-raf</filter>\n      <filter>image/x-sigma-x3f</filter>\n      <filter>image/x-pentax-pef</filter>\n      <filter>image/x-kodak-dcr</filter>\n      <filter>image/x-kodak-kdc</filter>\n      <filter>image/x-sony-sr2</filter>\n      <filter>image/x-sony-arw</filter>\n      <filter>image/x-sony-srf</filter>\n      <filter>image/x-minolta-mrw</filter>\n      <filter>image/x-olympus-orf</filter>\n      <filter>image/x-raw-epson</filter>\n      <filter>image/x-portable-pixmap</filter>\n      <filter>image/x-dpx</filter>\n\n      <filter>image/raw</filter>\n      <filter>image/x-raw</filter>\n\n      <filter>image/svg.*</filter>\n\n      <filter>application/photoshop</filter>\n      <filter>application/illustrator</filter>\n      <filter>application/postscript</filter>\n    </plugin>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/filemanager-plugins-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService--thumbnailFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.service.thumbnailfactory/Contributions/org.nuxeo.ecm.platform.picture.service.thumbnailfactory--thumbnailFactory",
              "id": "org.nuxeo.ecm.platform.picture.service.thumbnailfactory--thumbnailFactory",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "name": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"thumbnailFactory\" target=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailService\">\n    <thumbnailFactory facet=\"Picture\" factoryClass=\"org.nuxeo.ecm.platform.picture.thumbnail.ThumbnailPictureFactory\" name=\"thumbnailPictureFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.service.thumbnailfactory",
          "name": "org.nuxeo.ecm.platform.picture.service.thumbnailfactory",
          "requirements": [],
          "resolutionOrder": 389,
          "services": [],
          "startOrder": 389,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.service.thumbnailfactory\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailService\"\n    point=\"thumbnailFactory\">\n    <thumbnailFactory name=\"thumbnailPictureFactory\"\n      facet=\"Picture\"\n      factoryClass=\"org.nuxeo.ecm.platform.picture.thumbnail.ThumbnailPictureFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/picture-thumbnailfactory-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.workmanager/Contributions/org.nuxeo.ecm.platform.picture.workmanager--queues",
              "id": "org.nuxeo.ecm.platform.picture.workmanager--queues",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"pictureViewsGeneration\">\n      <maxThreads>2</maxThreads>\n      <category>pictureViewsGeneration</category>\n      <category>pictureViewsGenerationListener</category>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.workmanager",
          "name": "org.nuxeo.ecm.platform.picture.workmanager",
          "requirements": [],
          "resolutionOrder": 390,
          "services": [],
          "startOrder": 394,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.workmanager\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"pictureViewsGeneration\">\n      <maxThreads>2</maxThreads>\n      <category>pictureViewsGeneration</category>\n      <category>pictureViewsGenerationListener</category>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/picture-workmanager-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Define the default operations for the imaging library\n  \n",
          "documentationHtml": "<p>\nDefine the default operations for the imaging library\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.operation/Contributions/org.nuxeo.ecm.platform.picture.operation--operations",
              "id": "org.nuxeo.ecm.platform.picture.operation--operations",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <operation class=\"org.nuxeo.ecm.platform.picture.operation.PictureResize\"/>\n\n    <operation class=\"org.nuxeo.ecm.platform.picture.operation.CreatePicture\"/>\n\n    <operation class=\"org.nuxeo.ecm.platform.picture.operation.GetPictureView\"/>\n\n    <operation class=\"org.nuxeo.ecm.platform.picture.operation.RecomputePictureViews\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.automation.server.AutomationServer--bindings",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.operation/Contributions/org.nuxeo.ecm.platform.picture.operation--bindings",
              "id": "org.nuxeo.ecm.platform.picture.operation--bindings",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bindings\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n\n    <binding name=\"Picture.RecomputeViews\">\n      <administrator>true</administrator>\n    </binding>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--chains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.operation/Contributions/org.nuxeo.ecm.platform.picture.operation--chains",
              "id": "org.nuxeo.ecm.platform.picture.operation--chains",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <chain id=\"Image.Blob.Resize\">\n      <operation id=\"Blob.RunConverter\">\n        <param name=\"converter\" type=\"string\">pictureResize</param>\n      </operation>\n    </chain>\n\n    <chain id=\"Image.Blob.ConvertToPDF\">\n      <operation id=\"Context.PopBlob\"/>\n      <operation id=\"Blob.RunConverter\">\n        <param name=\"converter\" type=\"string\">pictureConvertToPDF</param>\n      </operation>\n    </chain>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.operation",
          "name": "org.nuxeo.ecm.platform.picture.operation",
          "requirements": [],
          "resolutionOrder": 391,
          "services": [],
          "startOrder": 385,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.operation\">\n  <documentation>\n    Define the default operations for the imaging library\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n\n    <operation class=\"org.nuxeo.ecm.platform.picture.operation.PictureResize\" />\n\n    <operation class=\"org.nuxeo.ecm.platform.picture.operation.CreatePicture\" />\n\n    <operation class=\"org.nuxeo.ecm.platform.picture.operation.GetPictureView\" />\n\n    <operation class=\"org.nuxeo.ecm.platform.picture.operation.RecomputePictureViews\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.automation.server.AutomationServer\" point=\"bindings\">\n\n    <binding name=\"Picture.RecomputeViews\">\n      <administrator>true</administrator>\n    </binding>\n\n  </extension>\n\n  <extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <chain id=\"Image.Blob.Resize\">\n      <operation id=\"Blob.RunConverter\">\n        <param name=\"converter\" type=\"string\">pictureResize</param>\n      </operation>\n    </chain>\n\n    <chain id=\"Image.Blob.ConvertToPDF\">\n      <operation id=\"Context.PopBlob\" />\n      <operation id=\"Blob.RunConverter\">\n        <param name=\"converter\" type=\"string\">pictureConvertToPDF</param>\n      </operation>\n    </chain>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Properties controlling if the picture migration script must be run at startup\n    \n",
              "documentationHtml": "<p>\nProperties controlling if the picture migration script must be run at startup\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.imaging.base.properties/Contributions/org.nuxeo.ecm.platform.imaging.base.properties--configuration",
              "id": "org.nuxeo.ecm.platform.imaging.base.properties--configuration",
              "registrationOrder": 36,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Properties controlling if the picture migration script must be run at startup\n    </documentation>\n    <property name=\"nuxeo.picture.migration.enabled\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.imaging.base.properties",
          "name": "org.nuxeo.ecm.platform.imaging.base.properties",
          "requirements": [],
          "resolutionOrder": 392,
          "services": [],
          "startOrder": 336,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.imaging.base.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\"\n    point=\"configuration\">\n    <documentation>\n      Properties controlling if the picture migration script must be run at startup\n    </documentation>\n    <property name=\"nuxeo.picture.migration.enabled\">true</property>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/imaging-base-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Adapters contribution for Picture documents.\n  \n",
          "documentationHtml": "<p>\nAdapters contribution for Picture documents.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.MultiviewPicture/Contributions/org.nuxeo.ecm.platform.picture.MultiviewPicture--adapters",
              "id": "org.nuxeo.ecm.platform.picture.MultiviewPicture--adapters",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.platform.picture.api.adapters.MultiviewPicture\" factory=\"org.nuxeo.ecm.platform.picture.api.adapters.MultiviewPictureAdapterFactory\"/>\n\n    <adapter class=\"org.nuxeo.ecm.platform.picture.api.adapters.PictureResourceAdapter\" factory=\"org.nuxeo.ecm.platform.picture.api.adapters.PictureResourceAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.MultiviewPicture",
          "name": "org.nuxeo.ecm.platform.picture.MultiviewPicture",
          "requirements": [],
          "resolutionOrder": 393,
          "services": [],
          "startOrder": 373,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.picture.MultiviewPicture\">\n  <documentation>\n    Adapters contribution for Picture documents.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\" point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.platform.picture.api.adapters.MultiviewPicture\"\n      factory=\"org.nuxeo.ecm.platform.picture.api.adapters.MultiviewPictureAdapterFactory\" />\n\n    <adapter class=\"org.nuxeo.ecm.platform.picture.api.adapters.PictureResourceAdapter\"\n      factory=\"org.nuxeo.ecm.platform.picture.api.adapters.PictureResourceAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/picture-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent--BlobHolderFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.blobholder/Contributions/org.nuxeo.ecm.platform.picture.blobholder--BlobHolderFactory",
              "id": "org.nuxeo.ecm.platform.picture.blobholder--BlobHolderFactory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
                "name": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"BlobHolderFactory\" target=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent\">\n    <blobHolderFactory class=\"org.nuxeo.ecm.platform.picture.api.adapters.PictureBlobHolderFactory\" facet=\"Picture\" name=\"picture\"/>\n    <blobHolderFactory class=\"org.nuxeo.ecm.platform.picture.api.adapters.PictureBlobHolderFactory\" docType=\"PictureBook\" name=\"pictureBook\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.blobholder",
          "name": "org.nuxeo.ecm.platform.picture.blobholder",
          "requirements": [],
          "resolutionOrder": 394,
          "services": [],
          "startOrder": 376,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.blobholder\">\n\n  <extension\n    target=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent\"\n    point=\"BlobHolderFactory\">\n    <blobHolderFactory name=\"picture\" facet=\"Picture\"\n                       class=\"org.nuxeo.ecm.platform.picture.api.adapters.PictureBlobHolderFactory\" />\n    <blobHolderFactory name=\"pictureBook\" docType=\"PictureBook\"\n                       class=\"org.nuxeo.ecm.platform.picture.api.adapters.PictureBlobHolderFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/picture-blobholder-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.binary.metadata--metadataMappings",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.binary.metadata.contrib/Contributions/org.nuxeo.ecm.platform.picture.binary.metadata.contrib--metadataMappings",
              "id": "org.nuxeo.ecm.platform.picture.binary.metadata.contrib--metadataMappings",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.binary.metadata",
                "name": "org.nuxeo.binary.metadata",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"metadataMappings\" target=\"org.nuxeo.binary.metadata\">\n    <metadataMapping blobXPath=\"file:content\" id=\"EXIF\" ignorePrefix=\"false\" processor=\"exifTool\">\n      <metadata name=\"EXIF:ImageDescription\" xpath=\"imd:image_description\"/>\n      <metadata name=\"EXIF:UserComment\" xpath=\"imd:user_comment\"/>\n      <metadata name=\"EXIF:Equipment\" xpath=\"imd:equipment\"/>\n      <metadata name=\"EXIF:DateTimeOriginal\" xpath=\"imd:date_time_original\"/>\n      <metadata name=\"EXIF:XResolution\" xpath=\"imd:xresolution\"/>\n      <metadata name=\"EXIF:YResolution\" xpath=\"imd:yresolution\"/>\n      <metadata name=\"EXIF:PixelXDimension\" xpath=\"imd:pixel_xdimension\"/>\n      <metadata name=\"EXIF:PixelYDimension\" xpath=\"imd:pixel_ydimension\"/>\n      <metadata name=\"EXIF:Copyright\" xpath=\"imd:copyright\"/>\n      <metadata name=\"EXIF:ExposureTime\" xpath=\"imd:exposure_time\"/>\n      <metadata name=\"EXIF:ISO\" xpath=\"imd:iso_speed_ratings\"/>\n      <metadata name=\"EXIF:FocalLength\" xpath=\"imd:focalLength\"/>\n      <metadata name=\"EXIF:ColorSpace\" xpath=\"imd:color_space\"/>\n      <metadata name=\"EXIF:WhiteBalance\" xpath=\"imd:white_balance\"/>\n      <metadata name=\"EXIF:IccProfile\" xpath=\"imd:icc_profile\"/>\n      <metadata name=\"EXIF:Orientation\" xpath=\"imd:orientation\"/>\n      <metadata name=\"EXIF:FNumber\" xpath=\"imd:fnumber\"/>\n    </metadataMapping>\n    <metadataMapping blobXPath=\"file:content\" id=\"IPTC\" ignorePrefix=\"false\" processor=\"exifTool\">\n      <metadata name=\"IPTC:Source\" xpath=\"dc:source\"/>\n      <metadata name=\"IPTC:CopyrightNotice\" xpath=\"dc:rights\"/>\n      <metadata name=\"IPTC:Caption-Abstract\" xpath=\"dc:description\"/>\n    </metadataMapping>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.binary.metadata--metadataRules",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.binary.metadata.contrib/Contributions/org.nuxeo.ecm.platform.picture.binary.metadata.contrib--metadataRules",
              "id": "org.nuxeo.ecm.platform.picture.binary.metadata.contrib--metadataRules",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.binary.metadata",
                "name": "org.nuxeo.binary.metadata",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"metadataRules\" target=\"org.nuxeo.binary.metadata\">\n    <rule async=\"false\" enabled=\"true\" id=\"iptc\" order=\"0\">\n      <metadataMappings>\n        <metadataMapping-id>EXIF</metadataMapping-id>\n        <metadataMapping-id>IPTC</metadataMapping-id>\n      </metadataMappings>\n      <filters>\n        <filter-id>hasPictureType</filter-id>\n      </filters>\n    </rule>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.binary.metadata.contrib/Contributions/org.nuxeo.ecm.platform.picture.binary.metadata.contrib--filters",
              "id": "org.nuxeo.ecm.platform.picture.binary.metadata.contrib--filters",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n    <filter id=\"hasPictureType\">\n      <rule grant=\"true\">\n        <type>Picture</type>\n      </rule>\n    </filter>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.binary.metadata.contrib",
          "name": "org.nuxeo.ecm.platform.picture.binary.metadata.contrib",
          "requirements": [],
          "resolutionOrder": 395,
          "services": [],
          "startOrder": 375,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.binary.metadata.contrib\">\n\n  <extension target=\"org.nuxeo.binary.metadata\"\n             point=\"metadataMappings\">\n    <metadataMapping id=\"EXIF\" processor=\"exifTool\" blobXPath=\"file:content\" ignorePrefix=\"false\">\n      <metadata name=\"EXIF:ImageDescription\" xpath=\"imd:image_description\"/>\n      <metadata name=\"EXIF:UserComment\" xpath=\"imd:user_comment\"/>\n      <metadata name=\"EXIF:Equipment\" xpath=\"imd:equipment\"/>\n      <metadata name=\"EXIF:DateTimeOriginal\" xpath=\"imd:date_time_original\"/>\n      <metadata name=\"EXIF:XResolution\" xpath=\"imd:xresolution\"/>\n      <metadata name=\"EXIF:YResolution\" xpath=\"imd:yresolution\"/>\n      <metadata name=\"EXIF:PixelXDimension\" xpath=\"imd:pixel_xdimension\"/>\n      <metadata name=\"EXIF:PixelYDimension\" xpath=\"imd:pixel_ydimension\"/>\n      <metadata name=\"EXIF:Copyright\" xpath=\"imd:copyright\"/>\n      <metadata name=\"EXIF:ExposureTime\" xpath=\"imd:exposure_time\"/>\n      <metadata name=\"EXIF:ISO\" xpath=\"imd:iso_speed_ratings\"/>\n      <metadata name=\"EXIF:FocalLength\" xpath=\"imd:focalLength\"/>\n      <metadata name=\"EXIF:ColorSpace\" xpath=\"imd:color_space\"/>\n      <metadata name=\"EXIF:WhiteBalance\" xpath=\"imd:white_balance\"/>\n      <metadata name=\"EXIF:IccProfile\" xpath=\"imd:icc_profile\"/>\n      <metadata name=\"EXIF:Orientation\" xpath=\"imd:orientation\"/>\n      <metadata name=\"EXIF:FNumber\" xpath=\"imd:fnumber\"/>\n    </metadataMapping>\n    <metadataMapping id=\"IPTC\" processor=\"exifTool\" blobXPath=\"file:content\" ignorePrefix=\"false\">\n      <metadata name=\"IPTC:Source\" xpath=\"dc:source\"/>\n      <metadata name=\"IPTC:CopyrightNotice\" xpath=\"dc:rights\"/>\n      <metadata name=\"IPTC:Caption-Abstract\" xpath=\"dc:description\"/>\n    </metadataMapping>\n  </extension>\n\n  <extension target=\"org.nuxeo.binary.metadata\"\n             point=\"metadataRules\">\n    <rule id=\"iptc\" order=\"0\" enabled=\"true\" async=\"false\">\n      <metadataMappings>\n        <metadataMapping-id>EXIF</metadataMapping-id>\n        <metadataMapping-id>IPTC</metadataMapping-id>\n      </metadataMappings>\n      <filters>\n        <filter-id>hasPictureType</filter-id>\n      </filters>\n    </rule>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n             point=\"filters\">\n    <filter id=\"hasPictureType\">\n      <rule grant=\"true\">\n        <type>Picture</type>\n      </rule>\n    </filter>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/picture-metadata-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.convert/Contributions/org.nuxeo.ecm.platform.picture.convert--converter",
              "id": "org.nuxeo.ecm.platform.picture.convert--converter",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <converter class=\"org.nuxeo.ecm.platform.picture.convert.RotationPictureConverter\" name=\"pictureRotation\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <sourceMimeType>application/photoshop</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n      <destinationMimeType>image/png</destinationMimeType>\n      <destinationMimeType>image/gif</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.picture.convert.ResizePictureConverter\" name=\"pictureResize\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <sourceMimeType>application/photoshop</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n      <destinationMimeType>image/png</destinationMimeType>\n      <destinationMimeType>image/gif</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.picture.convert.CropPictureConverter\" name=\"pictureCrop\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <sourceMimeType>application/photoshop</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n      <destinationMimeType>image/png</destinationMimeType>\n      <destinationMimeType>image/gif</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.picture.convert.ConvertToPDFPictureConverter\" name=\"pictureConvertToPDF\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <sourceMimeType>application/photoshop</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <destinationMimeType>application/pdf</destinationMimeType>\n    </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.convert",
          "name": "org.nuxeo.ecm.platform.picture.convert",
          "requirements": [],
          "resolutionOrder": 396,
          "services": [],
          "startOrder": 378,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.convert\">\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"\n    point=\"converter\">\n\n    <converter name=\"pictureRotation\" class=\"org.nuxeo.ecm.platform.picture.convert.RotationPictureConverter\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <sourceMimeType>application/photoshop</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n      <destinationMimeType>image/png</destinationMimeType>\n      <destinationMimeType>image/gif</destinationMimeType>\n    </converter>\n\n    <converter name=\"pictureResize\" class=\"org.nuxeo.ecm.platform.picture.convert.ResizePictureConverter\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <sourceMimeType>application/photoshop</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n      <destinationMimeType>image/png</destinationMimeType>\n      <destinationMimeType>image/gif</destinationMimeType>\n    </converter>\n\n    <converter name=\"pictureCrop\" class=\"org.nuxeo.ecm.platform.picture.convert.CropPictureConverter\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <sourceMimeType>application/photoshop</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n      <destinationMimeType>image/png</destinationMimeType>\n      <destinationMimeType>image/gif</destinationMimeType>\n    </converter>\n\n    <converter name=\"pictureConvertToPDF\" class=\"org.nuxeo.ecm.platform.picture.convert.ConvertToPDFPictureConverter\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <sourceMimeType>application/photoshop</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <destinationMimeType>application/pdf</destinationMimeType>\n    </converter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/convert-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.rendition.service.RenditionService--renditionDefinitionProviders",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.renditions/Contributions/org.nuxeo.ecm.platform.picture.renditions--renditionDefinitionProviders",
              "id": "org.nuxeo.ecm.platform.picture.renditions--renditionDefinitionProviders",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "name": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"renditionDefinitionProviders\" target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\">\n\n    <renditionDefinitionProvider class=\"org.nuxeo.ecm.platform.picture.rendition.PictureRenditionDefinitionProvider\" name=\"pictureRenditionDefinitionProvider\">\n      <filters>\n        <filter-id>hasPictureFacet</filter-id>\n      </filters>\n    </renditionDefinitionProvider>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.rendition.service.RenditionService--renditionDefinitions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.renditions/Contributions/org.nuxeo.ecm.platform.picture.renditions--renditionDefinitions",
              "id": "org.nuxeo.ecm.platform.picture.renditions--renditionDefinitions",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "name": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"renditionDefinitions\" target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\">\n\n    <renditionDefinition name=\"imageToPDF\">\n      <label>label.rendition.pdf</label>\n      <icon>/icons/pdf.png</icon>\n      <contentType>application/pdf</contentType>\n      <operationChain>Image.Blob.ConvertToPDF</operationChain>\n      <filters>\n        <filter-id>hasPictureFacet</filter-id>\n      </filters>\n    </renditionDefinition>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.renditions/Contributions/org.nuxeo.ecm.platform.picture.renditions--filters",
              "id": "org.nuxeo.ecm.platform.picture.renditions--filters",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"hasPictureFacet\">\n      <rule grant=\"true\">\n        <facet>Picture</facet>\n      </rule>\n    </filter>\n\n    <filter append=\"true\" id=\"allowPDFRendition\">\n      <rule grant=\"false\">\n        <facet>Picture</facet>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.renditions",
          "name": "org.nuxeo.ecm.platform.picture.renditions",
          "requirements": [
            "org.nuxeo.ecm.platform.rendition.contrib"
          ],
          "resolutionOrder": 482,
          "services": [],
          "startOrder": 388,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.renditions\">\n\n  <require>org.nuxeo.ecm.platform.rendition.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\"\n    point=\"renditionDefinitionProviders\">\n\n    <renditionDefinitionProvider name=\"pictureRenditionDefinitionProvider\"\n      class=\"org.nuxeo.ecm.platform.picture.rendition.PictureRenditionDefinitionProvider\">\n      <filters>\n        <filter-id>hasPictureFacet</filter-id>\n      </filters>\n    </renditionDefinitionProvider>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\"\n    point=\"renditionDefinitions\">\n\n    <renditionDefinition name=\"imageToPDF\">\n      <label>label.rendition.pdf</label>\n      <icon>/icons/pdf.png</icon>\n      <contentType>application/pdf</contentType>\n      <operationChain>Image.Blob.ConvertToPDF</operationChain>\n      <filters>\n        <filter-id>hasPictureFacet</filter-id>\n      </filters>\n    </renditionDefinition>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"hasPictureFacet\">\n      <rule grant=\"true\">\n        <facet>Picture</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"allowPDFRendition\" append=\"true\">\n      <rule grant=\"false\">\n        <facet>Picture</facet>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/picture-renditions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.coreTypes/Contributions/org.nuxeo.ecm.platform.picture.coreTypes--schema",
              "id": "org.nuxeo.ecm.platform.picture.coreTypes--schema",
              "registrationOrder": 35,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"picture\" src=\"schema/picture.xsd\"/>\n    <schema name=\"image_metadata\" prefix=\"imd\" src=\"schema/image_metadata.xsd\"/>\n    <schema name=\"iptc\" prefix=\"iptc\" src=\"schema/iptc.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.coreTypes/Contributions/org.nuxeo.ecm.platform.picture.coreTypes--doctype",
              "id": "org.nuxeo.ecm.platform.picture.coreTypes--doctype",
              "registrationOrder": 31,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"Picture\" perDocumentQuery=\"false\">\n      <schema name=\"file\"/>\n      <schema name=\"picture\"/>\n      <schema name=\"image_metadata\"/>\n    </facet>\n\n    <doctype extends=\"Document\" name=\"Picture\">\n      <schema name=\"common\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Picture\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n      <facet name=\"NXTag\"/>\n    </doctype>\n\n    <doctype append=\"true\" name=\"Folder\">\n      <subtypes>\n        <type>Picture</type>\n      </subtypes>\n    </doctype>\n    <doctype append=\"true\" name=\"OrderedFolder\">\n      <subtypes>\n        <type>Picture</type>\n      </subtypes>\n    </doctype>\n    <doctype append=\"true\" name=\"Workspace\">\n      <subtypes>\n        <type>Picture</type>\n      </subtypes>\n    </doctype>\n    <doctype append=\"true\" name=\"PictureBook\">\n      <subtypes>\n        <type>Picture</type>\n      </subtypes>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.coreTypes",
          "name": "org.nuxeo.ecm.platform.picture.coreTypes",
          "requirements": [
            "org.nuxeo.ecm.core.schema.TypeService",
            "org.nuxeo.ecm.core.CoreExtensions",
            "org.nuxeo.ecm.tags.schemas"
          ],
          "resolutionOrder": 514,
          "services": [],
          "startOrder": 379,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.coreTypes\">\n\n  <require>org.nuxeo.ecm.core.schema.TypeService</require>\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <require>org.nuxeo.ecm.tags.schemas</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n             point=\"schema\">\n    <schema name=\"picture\" src=\"schema/picture.xsd\"/>\n    <schema name=\"image_metadata\" src=\"schema/image_metadata.xsd\" prefix=\"imd\"/>\n    <schema name=\"iptc\" src=\"schema/iptc.xsd\" prefix=\"iptc\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n             point=\"doctype\">\n\n    <facet name=\"Picture\" perDocumentQuery=\"false\">\n      <schema name=\"file\"/>\n      <schema name=\"picture\"/>\n      <schema name=\"image_metadata\"/>\n    </facet>\n\n    <doctype name=\"Picture\" extends=\"Document\">\n      <schema name=\"common\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Picture\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n      <facet name=\"NXTag\" />\n    </doctype>\n\n    <doctype name=\"Folder\" append=\"true\">\n      <subtypes>\n        <type>Picture</type>\n      </subtypes>\n    </doctype>\n    <doctype name=\"OrderedFolder\" append=\"true\">\n      <subtypes>\n        <type>Picture</type>\n      </subtypes>\n    </doctype>\n    <doctype name=\"Workspace\" append=\"true\">\n      <subtypes>\n        <type>Picture</type>\n      </subtypes>\n    </doctype>\n    <doctype name=\"PictureBook\" append=\"true\">\n      <subtypes>\n        <type>Picture</type>\n      </subtypes>\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/picture-schemas-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--AdapterFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.web.preview.adapter.contrib/Contributions/org.nuxeo.ecm.platform.picture.web.preview.adapter.contrib--AdapterFactory",
              "id": "org.nuxeo.ecm.platform.picture.web.preview.adapter.contrib--AdapterFactory",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "name": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"AdapterFactory\" target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\">\n\n    <previewAdapter enabled=\"true\" name=\"picturePreviewAdapter\">\n      <typeName>Picture</typeName>\n      <class>org.nuxeo.ecm.platform.picture.preview.adapter.factories.PicturePreviewAdapterFactory</class>\n    </previewAdapter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.web.preview.adapter.contrib",
          "name": "org.nuxeo.ecm.platform.picture.web.preview.adapter.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.preview.adapter.contrib"
          ],
          "resolutionOrder": 698,
          "services": [],
          "startOrder": 393,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.web.preview.adapter.contrib\">\n\n  <require>org.nuxeo.ecm.platform.preview.adapter.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\"\n    point=\"AdapterFactory\">\n\n    <previewAdapter name=\"picturePreviewAdapter\" enabled=\"true\">\n      <typeName>Picture</typeName>\n      <class>org.nuxeo.ecm.platform.picture.preview.adapter.factories.PicturePreviewAdapterFactory</class>\n    </previewAdapter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/preview-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.picture.ImagingComponent",
          "declaredStartOrder": null,
          "documentation": "\n    The imaging component is providing API for image manipulations\n    @author Max Stepanov\n  \n",
          "documentationHtml": "<p>\nThe imaging component is providing API for image manipulations\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.picture.ImagingComponent",
              "descriptors": [
                "org.nuxeo.ecm.platform.picture.api.ImagingConfigurationDescriptor"
              ],
              "documentation": "\n      Extension point to contribute configuration information that will be used by the\n      ImagingService\n    \n",
              "documentationHtml": "<p>\nExtension point to contribute configuration information that will be used by the\nImagingService\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.ImagingComponent/ExtensionPoints/org.nuxeo.ecm.platform.picture.ImagingComponent--configuration",
              "id": "org.nuxeo.ecm.platform.picture.ImagingComponent--configuration",
              "label": "configuration (org.nuxeo.ecm.platform.picture.ImagingComponent)",
              "name": "configuration",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.picture.ImagingComponent",
              "descriptors": [
                "org.nuxeo.ecm.platform.picture.api.PictureConversion"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.ImagingComponent/ExtensionPoints/org.nuxeo.ecm.platform.picture.ImagingComponent--pictureConversions",
              "id": "org.nuxeo.ecm.platform.picture.ImagingComponent--pictureConversions",
              "label": "pictureConversions (org.nuxeo.ecm.platform.picture.ImagingComponent)",
              "name": "pictureConversions",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.ImagingComponent",
          "name": "org.nuxeo.ecm.platform.picture.ImagingComponent",
          "requirements": [
            "org.nuxeo.ecm.core.operation.OperationServiceComponent"
          ],
          "resolutionOrder": 806,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.picture.ImagingComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core/org.nuxeo.ecm.platform.picture.ImagingComponent/Services/org.nuxeo.ecm.platform.picture.api.ImagingService",
              "id": "org.nuxeo.ecm.platform.picture.api.ImagingService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 861,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.ImagingComponent\"\n  version=\"1.0\">\n  <documentation>\n    The imaging component is providing API for image manipulations\n    @author Max Stepanov\n  </documentation>\n\n  <require>org.nuxeo.ecm.core.operation.OperationServiceComponent</require>\n  <implementation class=\"org.nuxeo.ecm.platform.picture.ImagingComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.picture.api.ImagingService\" />\n  </service>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      Extension point to contribute configuration information that will be used by the\n      ImagingService\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.picture.api.ImagingConfigurationDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"pictureConversions\">\n    <object class=\"org.nuxeo.ecm.platform.picture.api.PictureConversion\" />\n  </extension-point>\n</component>\n",
          "xmlFileName": "/OSGI-INF/imaging-service-framework.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-imaging-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.core",
      "id": "org.nuxeo.ecm.platform.picture.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.picture.core\r\nPrivate-Package: schema,org.nuxeo.ecm.platform.picture,lib,org.nuxeo.ecm\r\n .platform.picture.magick,org.nuxeo.ecm.platform.picture.core.imagej,org\r\n .nuxeo.ecm.platform.picture.extension,os.win32.x86,org.nuxeo.ecm.platfo\r\n rm.picture.magick.utils,org.nuxeo.ecm.platform.picture.core.librarysele\r\n ctor,org.nuxeo.ecm.platform.picture.core.im\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core,stateful\r\nBundle-Name: Nuxeo Picture Imaging Core\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: true\r\nNuxeo-Component: OSGI-INF/imaging-service-framework.xml,OSGI-INF/imaging\r\n -service-contrib.xml,OSGI-INF/imaging-bulk-contrib.xml,OSGI-INF/imaging\r\n -pageprovider-contrib.xml,OSGI-INF/picture-schemas-contrib.xml,OSGI-INF\r\n /imaging-types-contrib.xml,OSGI-INF/picture-life-cycle-contrib.xml,OSGI\r\n -INF/listeners-contrib.xml,OSGI-INF/picturebook-schemas-contrib.xml,OSG\r\n I-INF/picturebook-life-cycle-contrib.xml,OSGI-INF/libraryselector-confi\r\n g-framework.xml,OSGI-INF/commandline-imagemagick-contrib.xml,OSGI-INF/f\r\n ilemanager-plugins-contrib.xml,OSGI-INF/picture-thumbnailfactory-contri\r\n b.xml,OSGI-INF/picture-workmanager-contrib.xml,OSGI-INF/operations-cont\r\n rib.xml,OSGI-INF/picture-renditions-contrib.xml,OSGI-INF/imaging-base-p\r\n roperties.xml,OSGI-INF/preview-adapter-contrib.xml,OSGI-INF/picture-ada\r\n pter-contrib.xml,OSGI-INF/picture-blobholder-contrib.xml,OSGI-INF/pictu\r\n re-metadata-contrib.xml,OSGI-INF/convert-service-contrib.xml\r\nImport-Package: com.drew.imaging.jpeg,com.drew.metadata,com.drew.metadat\r\n a.iptc,ij,ij.io,ij.process,it.tidalwave.image.jai,it.tidalwave.image.ja\r\n va2d;img=split;version=\"0.9.5\",javax.annotation;version=\"1.0\",javax.ima\r\n geio,javax.imageio.metadata,javax.imageio.stream,org.apache.commons.log\r\n ging,org.nuxeo.common.utils,org.nuxeo.common.xmap.annotation,org.nuxeo.\r\n ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.\r\n api.impl,org.nuxeo.ecm.core.api.impl.blob,org.nuxeo.ecm.directory;api=s\r\n plit,org.nuxeo.ecm.platform.commandline.executor.api,org.nuxeo.ecm.plat\r\n form.filemanager.service.extension,org.nuxeo.ecm.platform.filemanager.u\r\n tils,org.nuxeo.ecm.platform.picture.api,org.nuxeo.ecm.platform.picture.\r\n api.adapters,org.nuxeo.ecm.platform.types,org.nuxeo.runtime,org.nuxeo.r\r\n untime.api,org.nuxeo.runtime.model,org.nuxeo.runtime.services.streaming\r\n ,org.nuxeo.ecm.automation,org.nuxeo.ecm.automation.core,org.nuxeo.ecm.a\r\n utomation.core.annotations\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.picture.core;singleton=true\r\nEclipse-RegisterBuddy: org.nuxeo.ecm.platform.filemanager.core\r\n\r\n",
      "maxResolutionOrder": 806,
      "minResolutionOrder": 378,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-signature-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.signature.api",
          "org.nuxeo.ecm.platform.signature.config",
          "org.nuxeo.ecm.platform.signature.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature",
        "id": "grp:org.nuxeo.ecm.platform.signature",
        "name": "org.nuxeo.ecm.platform.signature",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Platform Signature\n\n\nThis is a digital signature plugin for signing PDF files. It provides multiple functionalities related to digital signing of documents, among others:\n\n1. to create user certificates and store them within the Nuxeo CAP Instance.\n2. to sign pdf documents\n3. to share/download the local root certificate used for signing all documents within the domain\n\n\n<A name=\"buildinganddeploying\"></A>\n## Building and deploying\n\nTo see the list of all commands available for building and deploying, use the following:\n\n    $ ant usage\n\n### How to build\n\nYou can build Nuxeo Digital Signature plugin with:\n\n    $ ant build\n\nIf you want to build and launch the tests, do it with:\n\n    $ ant build-with-tests\n\n### How to deploy\n\nConfigure the build.properties files (starting from the `build.properties.sample` file to be found in the current folder), to point your Tomcat instance:\n\n    $ cp build.properties.sample build.properties\n    $ vi build.properties\n\nYou can then deploy Nuxeo Digital Signature to your Tomcat instance with:\n\n    $ ant deploy-tomcat\n\nYou can also take all generated jar files (currently 3, present in the target directories of all submodules of this project), copy them into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\n\n## Project Structure\n\nThis project can be divided conceptually into 3 parts:\n\n1) certificate generation (low-level PKI object operations, CA operations)\n\n2) certificate persistence (storing and retrieving keystores containing certificates inside nuxeo directories)\n\n3) pdf signing with an existing certificate\n\n\n## Configuration:\n\n1) Install your root keystore file in a secured directory\n\nTo do initial testing you can use the keystore specified in:\n./nuxeo-platform-signature-core/src/main/resources/OSGI-INF/root-contrib.xml\n\n2) You might have to modify your server system's java encryption configuration by installing JCE Unlimited Strength Jurisdiction Policy Files needed for passwords longer than 7 characters,\n\n*Note: cryptography exportation laws differ between countries so make sure you are using adequate encryption configuration, libraries and tools.*\n\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.",
            "digest": "22f56d5291b9c9107486dbf2319cb39c",
            "encoding": "UTF-8",
            "length": 2832,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.signature.api",
      "components": [],
      "fileName": "nuxeo-platform-signature-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.api",
      "id": "org.nuxeo.ecm.platform.signature.api",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Digital Signature Api\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.signature.api;singleton:=tru\r\n e\r\nRequire-Bundle:  org.nuxeo.ecm.core,org.nuxeo.runtime,org.nuxeo.ecm.core\r\n .api\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [
        "nuxeo-signature"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Platform Signature\n\n\nThis is a digital signature plugin for signing PDF files. It provides multiple functionalities related to digital signing of documents, among others:\n\n1. to create user certificates and store them within the Nuxeo CAP Instance.\n2. to sign pdf documents\n3. to share/download the local root certificate used for signing all documents within the domain\n\n\n<A name=\"buildinganddeploying\"></A>\n## Building and deploying\n\nTo see the list of all commands available for building and deploying, use the following:\n\n    $ ant usage\n\n### How to build\n\nYou can build Nuxeo Digital Signature plugin with:\n\n    $ ant build\n\nIf you want to build and launch the tests, do it with:\n\n    $ ant build-with-tests\n\n### How to deploy\n\nConfigure the build.properties files (starting from the `build.properties.sample` file to be found in the current folder), to point your Tomcat instance:\n\n    $ cp build.properties.sample build.properties\n    $ vi build.properties\n\nYou can then deploy Nuxeo Digital Signature to your Tomcat instance with:\n\n    $ ant deploy-tomcat\n\nYou can also take all generated jar files (currently 3, present in the target directories of all submodules of this project), copy them into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\n\n## Project Structure\n\nThis project can be divided conceptually into 3 parts:\n\n1) certificate generation (low-level PKI object operations, CA operations)\n\n2) certificate persistence (storing and retrieving keystores containing certificates inside nuxeo directories)\n\n3) pdf signing with an existing certificate\n\n\n## Configuration:\n\n1) Install your root keystore file in a secured directory\n\nTo do initial testing you can use the keystore specified in:\n./nuxeo-platform-signature-core/src/main/resources/OSGI-INF/root-contrib.xml\n\n2) You might have to modify your server system's java encryption configuration by installing JCE Unlimited Strength Jurisdiction Policy Files needed for passwords longer than 7 characters,\n\n*Note: cryptography exportation laws differ between countries so make sure you are using adequate encryption configuration, libraries and tools.*\n\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.",
        "digest": "22f56d5291b9c9107486dbf2319cb39c",
        "encoding": "UTF-8",
        "length": 2832,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core",
        "org.nuxeo.runtime",
        "org.nuxeo.ecm.core.api"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-multi-tenant-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.multi.tenant"
        ],
        "hierarchyPath": "/grp:org.nuxeo.multi.tenant",
        "id": "grp:org.nuxeo.multi.tenant",
        "name": "org.nuxeo.multi.tenant",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.multi.tenant",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.core.types/Contributions/org.nuxeo.ecm.multi.tenant.core.types--schema",
              "id": "org.nuxeo.ecm.multi.tenant.core.types--schema",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"tenantconfig\" prefix=\"tenantconfig\" src=\"schemas/tenantconfig.xsd\"/>\n\n    <!-- multi tenant vocabulary -->\n    <schema name=\"multitenantvocabulary\" src=\"schemas/multi_tenant_vocabulary.xsd\"/>\n    <schema name=\"multitenantxvocabulary\" src=\"schemas/multi_tenant_xvocabulary.xsd\"/>\n    <schema name=\"multitenantl10nvocabulary\" src=\"schemas/multi_tenant_l10nvocabulary.xsd\"/>\n    <schema name=\"multitenantl10nxvocabulary\" src=\"schemas/multi_tenant_l10nxvocabulary.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.core.types/Contributions/org.nuxeo.ecm.multi.tenant.core.types--doctype",
              "id": "org.nuxeo.ecm.multi.tenant.core.types--doctype",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"TenantConfig\">\n      <schema name=\"tenantconfig\"/>\n    </facet>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.core.types",
          "name": "org.nuxeo.ecm.multi.tenant.core.types",
          "requirements": [],
          "resolutionOrder": 238,
          "services": [],
          "startOrder": 239,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.multi.tenant.core.types\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"schema\">\n    <schema name=\"tenantconfig\" prefix=\"tenantconfig\" src=\"schemas/tenantconfig.xsd\"/>\n\n    <!-- multi tenant vocabulary -->\n    <schema name=\"multitenantvocabulary\" src=\"schemas/multi_tenant_vocabulary.xsd\"/>\n    <schema name=\"multitenantxvocabulary\" src=\"schemas/multi_tenant_xvocabulary.xsd\"/>\n    <schema name=\"multitenantl10nvocabulary\" src=\"schemas/multi_tenant_l10nvocabulary.xsd\"/>\n    <schema name=\"multitenantl10nxvocabulary\" src=\"schemas/multi_tenant_l10nxvocabulary.xsd\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n    <facet name=\"TenantConfig\">\n      <schema name=\"tenantconfig\" />\n    </facet>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computer",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.computedgroups/Contributions/org.nuxeo.ecm.multi.tenant.computedgroups--computer",
              "id": "org.nuxeo.ecm.multi.tenant.computedgroups--computer",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "name": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"computer\" target=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\">\n    <groupComputer name=\"multiTenantGroupComputer\">\n      <computer>org.nuxeo.ecm.multi.tenant.MultiTenantGroupComputer</computer>\n    </groupComputer>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computerChain",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.computedgroups/Contributions/org.nuxeo.ecm.multi.tenant.computedgroups--computerChain",
              "id": "org.nuxeo.ecm.multi.tenant.computedgroups--computerChain",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "name": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"computerChain\" target=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\">\n    <groupComputerChain append=\"true\">\n      <computers>\n        <computer>multiTenantGroupComputer</computer>\n      </computers>\n    </groupComputerChain>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.computedgroups",
          "name": "org.nuxeo.ecm.multi.tenant.computedgroups",
          "requirements": [],
          "resolutionOrder": 239,
          "services": [],
          "startOrder": 237,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.multi.tenant.computedgroups\">\n\n  <extension target=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\"\n    point=\"computer\">\n    <groupComputer name=\"multiTenantGroupComputer\">\n      <computer>org.nuxeo.ecm.multi.tenant.MultiTenantGroupComputer</computer>\n    </groupComputer>\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\"\n    point=\"computerChain\">\n    <groupComputerChain append=\"true\">\n      <computers>\n        <computer>multiTenantGroupComputer</computer>\n      </computers>\n    </groupComputerChain>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/computedgroups-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.multi.tenant.MultiTenantServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    @author Thomas Roger (troger@nuxeo.com)\n  \n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.multi.tenant.MultiTenantService",
              "descriptors": [
                "org.nuxeo.ecm.multi.tenant.MultiTenantConfiguration"
              ],
              "documentation": "\n      The multi tenant configuration contains:\n\n      - tenantDocumentType: define the document type on which enable the\n        tenant isolation.\n      - membersGroupPermission: the default permission on the tenant for the\n        group containing all the members of the tenant.\n      - enabledByDefault: if 'true' the tenant isolation will be enabled when\n        Nuxeo starts.\n    \n",
              "documentationHtml": "<p>\nThe multi tenant configuration contains:\n</p><p>\n- tenantDocumentType: define the document type on which enable the\ntenant isolation.\n- membersGroupPermission: the default permission on the tenant for the\ngroup containing all the members of the tenant.\n- enabledByDefault: if &#39;true&#39; the tenant isolation will be enabled when\nNuxeo starts.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.MultiTenantService/ExtensionPoints/org.nuxeo.ecm.multi.tenant.MultiTenantService--configuration",
              "id": "org.nuxeo.ecm.multi.tenant.MultiTenantService--configuration",
              "label": "configuration (org.nuxeo.ecm.multi.tenant.MultiTenantService)",
              "name": "configuration",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.MultiTenantService",
          "name": "org.nuxeo.ecm.multi.tenant.MultiTenantService",
          "requirements": [],
          "resolutionOrder": 240,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.multi.tenant.MultiTenantService",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.MultiTenantService/Services/org.nuxeo.ecm.multi.tenant.MultiTenantService",
              "id": "org.nuxeo.ecm.multi.tenant.MultiTenantService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 836,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.multi.tenant.MultiTenantService\">\n\n  <documentation>\n    @author Thomas Roger (troger@nuxeo.com)\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.multi.tenant.MultiTenantServiceImpl\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.multi.tenant.MultiTenantService\" />\n  </service>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      The multi tenant configuration contains:\n\n      - tenantDocumentType: define the document type on which enable the\n        tenant isolation.\n      - membersGroupPermission: the default permission on the tenant for the\n        group containing all the members of the tenant.\n      - enabledByDefault: if 'true' the tenant isolation will be enabled when\n        Nuxeo starts.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.multi.tenant.MultiTenantConfiguration\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/multi-tenant-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "@author Thomas Roger (troger@nuxeo.com)\n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.multi.tenant.MultiTenantService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.contrib/Contributions/org.nuxeo.ecm.multi.tenant.contrib--configuration",
              "id": "org.nuxeo.ecm.multi.tenant.contrib--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.multi.tenant.MultiTenantService",
                "name": "org.nuxeo.ecm.multi.tenant.MultiTenantService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.ecm.multi.tenant.MultiTenantService\">\n\n    <configuration>\n      <tenantDocumentType>Domain</tenantDocumentType>\n      <membersGroupPermission>Read</membersGroupPermission>\n      <prohibitedGroups>\n\t<group>members</group>\n\t<group>Everyone</group>\n      </prohibitedGroups>\n    </configuration>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.contrib",
          "name": "org.nuxeo.ecm.multi.tenant.contrib",
          "requirements": [],
          "resolutionOrder": 241,
          "services": [],
          "startOrder": 238,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.multi.tenant.contrib\"\n  version=\"1.0\">\n\n  <documentation>@author Thomas Roger (troger@nuxeo.com)</documentation>\n\n  <extension target=\"org.nuxeo.ecm.multi.tenant.MultiTenantService\"\n    point=\"configuration\">\n\n    <configuration>\n      <tenantDocumentType>Domain</tenantDocumentType>\n      <membersGroupPermission>Read</membersGroupPermission>\n      <prohibitedGroups>\n\t<group>members</group>\n\t<group>Everyone</group>\n      </prohibitedGroups>\n    </configuration>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/multi-tenant-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.listeners/Contributions/org.nuxeo.ecm.multi.tenant.listeners--listener",
              "id": "org.nuxeo.ecm.multi.tenant.listeners--listener",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.multi.tenant.MultiTenantListener\" name=\"multiTenantListener\" postCommit=\"false\" priority=\"150\">\n      <event>documentCreated</event>\n      <event>documentCreatedByCopy</event>\n      <event>documentRemoved</event>\n      <event>lifecycle_transition_event</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n    </listener>\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.multi.tenant.TenantAdministratorsListener\" name=\"tenantAdministratorsListener\" postCommit=\"false\" priority=\"100\">\n      <event>beforeDocumentModification</event>\n    </listener>\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.multi.tenant.acl.ACLUpdateListener\" name=\"multiTenantACLListener\" postCommit=\"false\" priority=\"150\">\n      <event>beforeDocumentSecurityModification</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.listeners",
          "name": "org.nuxeo.ecm.multi.tenant.listeners",
          "requirements": [],
          "resolutionOrder": 242,
          "services": [],
          "startOrder": 241,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.multi.tenant.listeners\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <listener name=\"multiTenantListener\" async=\"false\"\n      postCommit=\"false\"\n      class=\"org.nuxeo.ecm.multi.tenant.MultiTenantListener\"\n      priority=\"150\">\n      <event>documentCreated</event>\n      <event>documentCreatedByCopy</event>\n      <event>documentRemoved</event>\n      <event>lifecycle_transition_event</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n    </listener>\n\n    <listener name=\"tenantAdministratorsListener\" async=\"false\"\n      postCommit=\"false\"\n      class=\"org.nuxeo.ecm.multi.tenant.TenantAdministratorsListener\"\n      priority=\"100\">\n      <event>beforeDocumentModification</event>\n    </listener>\n\n    <listener name=\"multiTenantACLListener\" async=\"false\"\n      postCommit=\"false\"\n      class=\"org.nuxeo.ecm.multi.tenant.acl.ACLUpdateListener\"\n      priority=\"150\">\n      <event>beforeDocumentSecurityModification</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/listeners-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.cache.CacheService--caches",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.cache.testsConfig/Contributions/org.nuxeo.ecm.multi.tenant.cache.testsConfig--caches",
              "id": "org.nuxeo.ecm.multi.tenant.cache.testsConfig--caches",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.cache.CacheService",
                "name": "org.nuxeo.ecm.core.cache.CacheService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"caches\" target=\"org.nuxeo.ecm.core.cache.CacheService\">\n\n    <cache name=\"tenants-cache\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"tenants-cache-without-ref\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"topic-cache-without-ref\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"topic-cache\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"subtopic-cache-without-ref\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"subtopic-cache\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"l10nsubjects-cache-without-ref\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"l10nsubjects-cache\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"l10ncoverage-cache-without-ref\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"l10ncoverage-cache\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.cache.testsConfig",
          "name": "org.nuxeo.ecm.multi.tenant.cache.testsConfig",
          "requirements": [],
          "resolutionOrder": 243,
          "services": [],
          "startOrder": 236,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.multi.tenant.cache.testsConfig\">\n\n  <extension target=\"org.nuxeo.ecm.core.cache.CacheService\" point=\"caches\">\n\n    <cache name=\"tenants-cache\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"tenants-cache-without-ref\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"topic-cache-without-ref\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"topic-cache\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"subtopic-cache-without-ref\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"subtopic-cache\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"l10nsubjects-cache-without-ref\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"l10nsubjects-cache\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"l10ncoverage-cache-without-ref\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n    <cache name=\"l10ncoverage-cache\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n    </cache>\n\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/directories-cache-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.directories/Contributions/org.nuxeo.ecm.multi.tenant.directories--schema",
              "id": "org.nuxeo.ecm.multi.tenant.directories--schema",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"tenant\" src=\"schemas/tenant.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.directories/Contributions/org.nuxeo.ecm.multi.tenant.directories--directories",
              "id": "org.nuxeo.ecm.multi.tenant.directories--directories",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-directory\" name=\"tenants\">\n      <schema>tenant</schema>\n      <idField>id</idField>\n      <entryCacheName>tenants-cache</entryCacheName>\n      <entryCacheWithoutReferencesName>tenants-cache-without-ref</entryCacheWithoutReferencesName>\n    </directory>\n\n    <directory extends=\"template-directory\" name=\"topic\">\n      <schema>multitenantvocabulary</schema>\n      <idField>id</idField>\n      <dataFile>directories/topic.csv</dataFile>\n      <entryCacheName>topic-cache</entryCacheName>\n      <entryCacheWithoutReferencesName>topic-cache-without-ref</entryCacheWithoutReferencesName>\n      <deleteConstraint class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">subtopic</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n\n    <directory extends=\"template-directory\" name=\"subtopic\">\n      <schema>multitenantxvocabulary</schema>\n      <idField>id</idField>\n      <parentDirectory>topic</parentDirectory>\n      <dataFile>directories/subtopic.csv</dataFile>\n      <entryCacheName>subtopic-cache</entryCacheName>\n      <entryCacheWithoutReferencesName>subtopic-cache-without-ref</entryCacheWithoutReferencesName>\n    </directory>\n\n    <directory extends=\"template-directory\" name=\"l10nsubjects\">\n      <schema>multitenantl10nxvocabulary</schema>\n      <idField>id</idField>\n      <parentDirectory>l10nsubjects</parentDirectory>\n      <dataFile>directories/l10nsubjects.csv</dataFile>\n      <entryCacheName>l10nsubjects-cache</entryCacheName>\n      <entryCacheWithoutReferencesName>l10nsubjects-cache-without-ref</entryCacheWithoutReferencesName>\n      <deleteConstraint class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">l10nsubjects</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n\n    <directory extends=\"template-directory\" name=\"l10ncoverage\">\n      <schema>multitenantl10nxvocabulary</schema>\n      <idField>id</idField>\n      <parentDirectory>l10ncoverage</parentDirectory>\n      <dataFile>directories/l10ncoverage.csv</dataFile>\n      <entryCacheName>l10ncoverage-cache</entryCacheName>\n      <entryCacheWithoutReferencesName>l10ncoverage-cache-without-ref</entryCacheWithoutReferencesName>\n      <deleteConstraint class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">l10ncoverage</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.directories",
          "name": "org.nuxeo.ecm.multi.tenant.directories",
          "requirements": [
            "org.nuxeo.ecm.directories"
          ],
          "resolutionOrder": 348,
          "services": [],
          "startOrder": 240,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.multi.tenant.directories\">\n\n  <require>org.nuxeo.ecm.directories</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"tenant\" src=\"schemas/tenant.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"tenants\" extends=\"template-directory\">\n      <schema>tenant</schema>\n      <idField>id</idField>\n      <entryCacheName>tenants-cache</entryCacheName>\n      <entryCacheWithoutReferencesName>tenants-cache-without-ref</entryCacheWithoutReferencesName>\n    </directory>\n\n    <directory name=\"topic\" extends=\"template-directory\">\n      <schema>multitenantvocabulary</schema>\n      <idField>id</idField>\n      <dataFile>directories/topic.csv</dataFile>\n      <entryCacheName>topic-cache</entryCacheName>\n      <entryCacheWithoutReferencesName>topic-cache-without-ref</entryCacheWithoutReferencesName>\n      <deleteConstraint\n        class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">subtopic</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n\n    <directory name=\"subtopic\" extends=\"template-directory\">\n      <schema>multitenantxvocabulary</schema>\n      <idField>id</idField>\n      <parentDirectory>topic</parentDirectory>\n      <dataFile>directories/subtopic.csv</dataFile>\n      <entryCacheName>subtopic-cache</entryCacheName>\n      <entryCacheWithoutReferencesName>subtopic-cache-without-ref</entryCacheWithoutReferencesName>\n    </directory>\n\n    <directory name=\"l10nsubjects\" extends=\"template-directory\">\n      <schema>multitenantl10nxvocabulary</schema>\n      <idField>id</idField>\n      <parentDirectory>l10nsubjects</parentDirectory>\n      <dataFile>directories/l10nsubjects.csv</dataFile>\n      <entryCacheName>l10nsubjects-cache</entryCacheName>\n      <entryCacheWithoutReferencesName>l10nsubjects-cache-without-ref</entryCacheWithoutReferencesName>\n      <deleteConstraint\n        class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">l10nsubjects</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n\n    <directory name=\"l10ncoverage\" extends=\"template-directory\">\n      <schema>multitenantl10nxvocabulary</schema>\n      <idField>id</idField>\n      <parentDirectory>l10ncoverage</parentDirectory>\n      <dataFile>directories/l10ncoverage.csv</dataFile>\n      <entryCacheName>l10ncoverage-cache</entryCacheName>\n      <entryCacheWithoutReferencesName>l10ncoverage-cache-without-ref</entryCacheWithoutReferencesName>\n      <deleteConstraint\n        class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">l10ncoverage</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/directories-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.usermanager.UserService--userManager",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.usermanager/Contributions/org.nuxeo.ecm.multi.tenant.usermanager--userManager",
              "id": "org.nuxeo.ecm.multi.tenant.usermanager--userManager",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.usermanager.UserService",
                "name": "org.nuxeo.ecm.platform.usermanager.UserService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"userManager\" target=\"org.nuxeo.ecm.platform.usermanager.UserService\">\n\n    <userManager class=\"org.nuxeo.ecm.multi.tenant.MultiTenantUserManager\">\n      <users>\n        <listingMode>search_only</listingMode>\n      </users>\n    </userManager>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.usermanager",
          "name": "org.nuxeo.ecm.multi.tenant.usermanager",
          "requirements": [
            "org.nuxeo.ecm.platform.usermanager.UserManagerImpl"
          ],
          "resolutionOrder": 569,
          "services": [],
          "startOrder": 242,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.multi.tenant.usermanager\">\n\n  <require>org.nuxeo.ecm.platform.usermanager.UserManagerImpl</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.usermanager.UserService\"\n    point=\"userManager\">\n\n    <userManager\n      class=\"org.nuxeo.ecm.multi.tenant.MultiTenantUserManager\">\n      <users>\n        <listingMode>search_only</listingMode>\n      </users>\n    </userManager>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/usermanager-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService--userWorkspace",
              "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.userworkspace/Contributions/org.nuxeo.ecm.multi.tenant.userworkspace--userWorkspace",
              "id": "org.nuxeo.ecm.multi.tenant.userworkspace--userWorkspace",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
                "name": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"userWorkspace\" target=\"org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService\">\n    <userWorkspace class=\"org.nuxeo.ecm.multi.tenant.userworkspace.MultiTenantUserWorkspaceService\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant/org.nuxeo.ecm.multi.tenant.userworkspace",
          "name": "org.nuxeo.ecm.multi.tenant.userworkspace",
          "requirements": [
            "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceServiceImpl"
          ],
          "resolutionOrder": 578,
          "services": [],
          "startOrder": 243,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.multi.tenant.userworkspace\">\n\n  <require>org.nuxeo.ecm.platform.userworkspace.UserWorkspaceServiceImpl</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService\"\n    point=\"userWorkspace\">\n    <userWorkspace\n      class=\"org.nuxeo.ecm.multi.tenant.userworkspace.MultiTenantUserWorkspaceService\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/userworkspace-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-multi-tenant-core-2023.7.9.jar",
      "groupId": "org.nuxeo.multi.tenant",
      "hierarchyPath": "/grp:org.nuxeo.multi.tenant/org.nuxeo.ecm.multi.tenant",
      "id": "org.nuxeo.ecm.multi.tenant",
      "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: 1\r\nBundle-Version: 0.0.1\r\nBundle-Name: Nuxeo Multi Tenant Core\r\nBundle-SymbolicName: org.nuxeo.ecm.multi.tenant;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/core-types-contrib.xml,OSGI-INF/computedgroups\r\n -contrib.xml,OSGI-INF/multi-tenant-service.xml,OSGI-INF/multi-tenant-co\r\n ntrib.xml,OSGI-INF/listeners-contrib.xml,OSGI-INF/directories-contrib.x\r\n ml,OSGI-INF/directories-cache-contrib.xml,OSGI-INF/usermanager-contrib.\r\n xml,OSGI-INF/userworkspace-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 578,
      "minResolutionOrder": 238,
      "packages": [
        "nuxeo-multi-tenant"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-importer-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.importer.core",
          "org.nuxeo.ecm.platform.importer.jaxrs"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer",
        "id": "grp:org.nuxeo.ecm.platform.importer",
        "name": "org.nuxeo.ecm.platform.importer",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Platform Importer\n\n## About Nuxeo Platform Importer\n\nThe file importer comes as a Java library (with nuxeo runtime service) and a sample JAX-RS interface to launch, monitor and abort import jobs.\nThis project is an on-going project, supported by Nuxeo\n\n## Building\n### How to Build Nuxeo Platform Importer\nBuild the Nuxeo Platform Importer with Maven:\n```$ mvn install -Dmaven.test.skip=true```\n\n## Deploying\nNuxeo Platform Importer is available as two package add-ons [from the Nuxeo Marketplace]\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-platform-importer\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-scan-importer\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Platform Importer is available in our Documentation Center: http://doc.nuxeo.com/x/gYBVAQ\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Nuxeo Platform Importer component:\nhttps://jira.nuxeo.com/browse/NXP/component/10621\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "83bb2a4c6415c9f07db3ab17fa99510c",
            "encoding": "UTF-8",
            "length": 1753,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.importer.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer/org.nuxeo.ecm.platform.importer.core/org.nuxeo.ecm.platform.iomporter.convert/Contributions/org.nuxeo.ecm.platform.iomporter.convert--converter",
              "id": "org.nuxeo.ecm.platform.iomporter.convert--converter",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <converter class=\"org.nuxeo.ecm.platform.importer.random.PartialTextExtractor\" name=\"partialTextExtractor\">\n      <sourceMimeType>text/partial</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer/org.nuxeo.ecm.platform.importer.core/org.nuxeo.ecm.platform.iomporter.convert",
          "name": "org.nuxeo.ecm.platform.iomporter.convert",
          "requirements": [
            "org.nuxeo.ecm.core.convert.plugins"
          ],
          "resolutionOrder": 214,
          "services": [],
          "startOrder": 341,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.iomporter.convert\">\n\n\n  <require>org.nuxeo.ecm.core.convert.plugins</require>\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"\n             point=\"converter\">\n\n    <converter name=\"partialTextExtractor\"\n               class=\"org.nuxeo.ecm.platform.importer.random.PartialTextExtractor\">\n      <sourceMimeType>text/partial</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/convert-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent",
          "declaredStartOrder": null,
          "documentation": "\n    This allows to configure the default importer by contributing a specific\n    documentFactory and sourceNode implementations\n\n    <code>\n    <extension point=\"importerConfiguration\" target=\"org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent\">\n        <importerConfig sourceNodeClass=\"org.nuxeo.ecm.platform.importer.source.FileSourceNode\">\n            <documentModelFactory\n                documentModelFactoryClass=\"org.nuxeo.ecm.platform.importer.factories.DefaultDocumentModelFactory\"\n                folderishType=\"Folder\" leafType=\"File\"/>\n            <repository>default</repository>\n            <bulkMode>true</bulkMode>\n            <enablePerfLogging>true</enablePerfLogging>\n        </importerConfig>\n    </extension>\n</code>\n",
          "documentationHtml": "<p>\nThis allows to configure the default importer by contributing a specific\ndocumentFactory and sourceNode implementations\n</p><p>\n</p><pre><code>    &lt;extension point&#61;&#34;importerConfiguration&#34; target&#61;&#34;org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent&#34;&gt;\n        &lt;importerConfig sourceNodeClass&#61;&#34;org.nuxeo.ecm.platform.importer.source.FileSourceNode&#34;&gt;\n            &lt;documentModelFactory\n                documentModelFactoryClass&#61;&#34;org.nuxeo.ecm.platform.importer.factories.DefaultDocumentModelFactory&#34;\n                folderishType&#61;&#34;Folder&#34; leafType&#61;&#34;File&#34;/&gt;\n            &lt;repository&gt;default&lt;/repository&gt;\n            &lt;bulkMode&gt;true&lt;/bulkMode&gt;\n            &lt;enablePerfLogging&gt;true&lt;/enablePerfLogging&gt;\n        &lt;/importerConfig&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent",
              "descriptors": [
                "org.nuxeo.ecm.platform.importer.service.ImporterConfigurationDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer/org.nuxeo.ecm.platform.importer.core/org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent/ExtensionPoints/org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent--importerConfiguration",
              "id": "org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent--importerConfiguration",
              "label": "importerConfiguration (org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent)",
              "name": "importerConfiguration",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer/org.nuxeo.ecm.platform.importer.core/org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent",
          "name": "org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent",
          "requirements": [],
          "resolutionOrder": 215,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer/org.nuxeo.ecm.platform.importer.core/org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent/Services/org.nuxeo.ecm.platform.importer.service.DefaultImporterService",
              "id": "org.nuxeo.ecm.platform.importer.service.DefaultImporterService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 851,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent\">\n\n  <documentation>\n    This allows to configure the default importer by contributing a specific\n    documentFactory and sourceNode implementations\n\n    <code>\n      <extension target=\"org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent\" point=\"importerConfiguration\">\n        <importerConfig sourceNodeClass=\"org.nuxeo.ecm.platform.importer.source.FileSourceNode\">\n          <documentModelFactory documentModelFactoryClass=\"org.nuxeo.ecm.platform.importer.factories.DefaultDocumentModelFactory\"\n            leafType=\"File\" folderishType=\"Folder\" />\n          <repository>default</repository>\n          <bulkMode>true</bulkMode>\n          <enablePerfLogging>true</enablePerfLogging>\n        </importerConfig>\n      </extension>\n    </code>\n\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.importer.service.DefaultImporterService\" />\n  </service>\n\n  <extension-point name=\"importerConfiguration\">\n    <object class=\"org.nuxeo.ecm.platform.importer.service.ImporterConfigurationDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/default-importer-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-importer-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer/org.nuxeo.ecm.platform.importer.core",
      "id": "org.nuxeo.ecm.platform.importer.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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM Importer\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.importer.core;singleton:=tru\r\n e\r\nNuxeo-Component: OSGI-INF/convert-service-contrib.xml,OSGI-INF/default-i\r\n mporter-service.xml\r\n\r\n",
      "maxResolutionOrder": 215,
      "minResolutionOrder": 214,
      "packages": [
        "nuxeo-platform-importer"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Platform Importer\n\n## About Nuxeo Platform Importer\n\nThe file importer comes as a Java library (with nuxeo runtime service) and a sample JAX-RS interface to launch, monitor and abort import jobs.\nThis project is an on-going project, supported by Nuxeo\n\n## Building\n### How to Build Nuxeo Platform Importer\nBuild the Nuxeo Platform Importer with Maven:\n```$ mvn install -Dmaven.test.skip=true```\n\n## Deploying\nNuxeo Platform Importer is available as two package add-ons [from the Nuxeo Marketplace]\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-platform-importer\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-scan-importer\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Platform Importer is available in our Documentation Center: http://doc.nuxeo.com/x/gYBVAQ\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Nuxeo Platform Importer component:\nhttps://jira.nuxeo.com/browse/NXP/component/10621\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "83bb2a4c6415c9f07db3ab17fa99510c",
        "encoding": "UTF-8",
        "length": 1753,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-audit-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.audit.api",
          "org.nuxeo.ecm.platform.audit.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit",
        "id": "grp:org.nuxeo.ecm.platform.audit",
        "name": "org.nuxeo.ecm.platform.audit",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.audit",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.persistence.PersistenceComponent--hibernate",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.persistence/Contributions/org.nuxeo.ecm.platform.audit.service.persistence--hibernate",
              "id": "org.nuxeo.ecm.platform.audit.service.persistence--hibernate",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.persistence.PersistenceComponent",
                "name": "org.nuxeo.ecm.core.persistence.PersistenceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"hibernate\" target=\"org.nuxeo.ecm.core.persistence.PersistenceComponent\">\n    <hibernateConfiguration name=\"nxaudit-logs\">\n      <datasource>nxaudit-logs</datasource>\n      <properties>\n        <property name=\"hibernate.hbm2ddl.auto\">update</property>\n      </properties>\n    </hibernateConfiguration>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.persistence",
          "name": "org.nuxeo.ecm.platform.audit.service.persistence",
          "requirements": [],
          "resolutionOrder": 285,
          "services": [],
          "startOrder": 275,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.audit.service.persistence\">\n\n  <extension target=\"org.nuxeo.ecm.core.persistence.PersistenceComponent\"\n    point=\"hibernate\">\n    <hibernateConfiguration name=\"nxaudit-logs\">\n      <datasource>nxaudit-logs</datasource>\n      <properties>\n        <property name=\"hibernate.hbm2ddl.auto\">update</property>\n      </properties>\n    </hibernateConfiguration>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxaudit-persistence-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.core.types-contrib/Contributions/org.nuxeo.ecm.platform.audit.core.types-contrib--schema",
              "id": "org.nuxeo.ecm.platform.audit.core.types-contrib--schema",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"basicauditsearch\" prefix=\"bas\" src=\"schemas/basicauditsearch.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.core.types-contrib/Contributions/org.nuxeo.ecm.platform.audit.core.types-contrib--doctype",
              "id": "org.nuxeo.ecm.platform.audit.core.types-contrib--doctype",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"ForceAudit\"/>\n\n    <doctype extends=\"Document\" name=\"BasicAuditSearch\">\n      <schema name=\"basicauditsearch\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"common\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.core.types-contrib",
          "name": "org.nuxeo.ecm.platform.audit.core.types-contrib",
          "requirements": [],
          "resolutionOrder": 286,
          "services": [],
          "startOrder": 270,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.audit.core.types-contrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"basicauditsearch\" prefix=\"bas\" src=\"schemas/basicauditsearch.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <facet name=\"ForceAudit\" />\n\n    <doctype name=\"BasicAuditSearch\" extends=\"Document\">\n      <schema name=\"basicauditsearch\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"common\" />\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-type-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.directoryContrib/Contributions/org.nuxeo.audit.directoryContrib--directories",
              "id": "org.nuxeo.audit.directoryContrib--directories",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-vocabulary\" name=\"eventTypes\">\n      <dataFile>directories/event-types.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n    <directory extends=\"template-vocabulary\" name=\"eventCategories\">\n      <dataFile>directories/event-categories.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.directoryContrib",
          "name": "org.nuxeo.audit.directoryContrib",
          "requirements": [],
          "resolutionOrder": 287,
          "services": [],
          "startOrder": 45,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.directoryContrib\">\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"eventTypes\" extends=\"template-vocabulary\">\n      <dataFile>directories/event-types.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n    <directory name=\"eventCategories\" extends=\"template-vocabulary\">\n      <dataFile>directories/event-categories.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/directories-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.PageProviderservice.contrib/Contributions/org.nuxeo.ecm.platform.audit.PageProviderservice.contrib--providers",
              "id": "org.nuxeo.ecm.platform.audit.PageProviderservice.contrib--providers",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\" name=\"DOCUMENT_HISTORY_PROVIDER_OLD\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          log.docUUID = ?\n        </fixedPart>\n        <predicate operator=\"BETWEEN\" parameter=\"log.eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.category\">\n          <field name=\"eventCategories\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.eventId\">\n          <field name=\"eventId\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"true\" column=\"log.eventDate\"/>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\" name=\"LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          log.eventId = 'user_created' OR log.eventId = 'group_created'\n        </fixedPart>\n      </whereClause>\n      <sort ascending=\"false\" column=\"log.eventDate\"/>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.provider.LatestCreatedUsersOrGroupsPageProvider\" name=\"LATEST_CREATED_USERS_OR_GROUPS_PROVIDER\">\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.document.DocumentHistoryPageProvider\" name=\"DOCUMENT_HISTORY_PROVIDER\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate operator=\"BETWEEN\" parameter=\"log.eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.category\">\n          <field name=\"eventCategory\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.category\">\n          <field name=\"eventCategories\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.eventId\">\n          <field name=\"eventId\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.principalName\">\n          <field name=\"principalName\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.principalName\">\n          <field name=\"principalNames\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"false\" column=\"log.eventDate\"/>\n      <sort ascending=\"false\" column=\"log.id\"/>\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.PageProviderservice.contrib",
          "name": "org.nuxeo.ecm.platform.audit.PageProviderservice.contrib",
          "requirements": [],
          "resolutionOrder": 289,
          "services": [],
          "startOrder": 268,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.audit.PageProviderservice.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <genericPageProvider name=\"DOCUMENT_HISTORY_PROVIDER_OLD\"\n      class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          log.docUUID = ?\n        </fixedPart>\n        <predicate parameter=\"log.eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"log.category\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventCategories\" />\n        </predicate>\n        <predicate parameter=\"log.eventId\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventId\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"log.eventDate\" ascending=\"true\" />\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER\"\n      class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          log.eventId = 'user_created' OR log.eventId = 'group_created'\n        </fixedPart>\n      </whereClause>\n      <sort column=\"log.eventDate\" ascending=\"false\" />\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"LATEST_CREATED_USERS_OR_GROUPS_PROVIDER\"\n      class=\"org.nuxeo.ecm.platform.audit.provider.LatestCreatedUsersOrGroupsPageProvider\">\n    </genericPageProvider>\n\n    <genericPageProvider name=\"DOCUMENT_HISTORY_PROVIDER\"\n      class=\"org.nuxeo.ecm.platform.audit.api.document.DocumentHistoryPageProvider\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate parameter=\"log.eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"log.category\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventCategory\" />\n        </predicate>\n        <predicate parameter=\"log.category\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventCategories\" />\n        </predicate>\n        <predicate parameter=\"log.eventId\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventId\" />\n        </predicate>\n        <predicate parameter=\"log.eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\" />\n        </predicate>\n        <predicate parameter=\"log.principalName\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"principalName\" />\n        </predicate>\n        <predicate parameter=\"log.principalName\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"principalNames\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"log.eventDate\" ascending=\"false\" />\n      <sort column=\"log.id\" ascending=\"false\" />\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Core IO registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO registered marshallers set.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.io.marshallers/Contributions/org.nuxeo.ecm.platform.audit.io.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.audit.io.marshallers--marshallers",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- preview document enricher -->\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryCSVWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryListCSVWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.io.marshallers",
          "name": "org.nuxeo.ecm.platform.audit.io.marshallers",
          "requirements": [],
          "resolutionOrder": 291,
          "services": [],
          "startOrder": 272,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.audit.io.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    <!-- preview document enricher -->\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryCSVWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryListCSVWriter\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "Contribute the search event to the Audit configuration :\n    this is\n    only safe to do so when the ES backend if used for Audit\n  \n",
          "documentationHtml": "<p>\nContribute the search event to the Audit configuration :\nthis is\nonly safe to do so when the ES backend if used for Audit\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.user.contrib/Contributions/org.nuxeo.ecm.platform.audit.user.contrib--event",
              "id": "org.nuxeo.ecm.platform.audit.user.contrib--event",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <event name=\"user_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"user_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"user_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"group_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"group_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"group_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"retentionActiveChanged\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retentionActive}\" key=\"retentionActive\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"blobDigestUpdated\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.oldKey}\" key=\"oldKey\"/>\n        <extendedInfo expression=\"${message.properties.oldDigest}\" key=\"oldDigest\"/>\n        <extendedInfo expression=\"${message.properties.newKey}\" key=\"newKey\"/>\n        <extendedInfo expression=\"${message.properties.newDigest}\" key=\"newDigest\"/>\n      </extendedInfos>\n    </event>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.user.contrib",
          "name": "org.nuxeo.ecm.platform.audit.user.contrib",
          "requirements": [],
          "resolutionOrder": 292,
          "services": [],
          "startOrder": 276,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.audit.user.contrib\" version=\"1.0\">\n\n  <documentation>Contribute the search event to the Audit configuration :\n    this is\n    only safe to do so when the ES backend if used for Audit\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\"\n    point=\"event\">\n    <event name=\"user_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"user_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"user_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"group_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"group_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"group_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"retentionActiveChanged\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retentionActive}\" key=\"retentionActive\" />\n      </extendedInfos>\n    </event>\n    <event name=\"blobDigestUpdated\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.oldKey}\" key=\"oldKey\" />\n        <extendedInfo expression=\"${message.properties.oldDigest}\" key=\"oldDigest\" />\n        <extendedInfo expression=\"${message.properties.newKey}\" key=\"newKey\" />\n        <extendedInfo expression=\"${message.properties.newDigest}\" key=\"newDigest\" />\n      </extendedInfos>\n    </event>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-audit-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "declaredStartOrder": 51,
          "documentation": "\n    Service that deals with audit.\n    <p/>\n\n    Most of the work is done at EJB layer though.\n\n    This supports JMS events based\n    notifications on a dedicated topic.\n\n    @version 1.0\n    @author Julien Anguenot\n  \n",
          "documentationHtml": "<p>\nService that deals with audit.\n</p><p>\nMost of the work is done at EJB layer though.\n</p><p>\nThis supports JMS events based\nnotifications on a dedicated topic.\n</p><p>\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.EventDescriptor"
              ],
              "documentation": "\n      This service registers auditable events.\n      <p/>\n\n      Registered events are dummy strings for now.\n      <p/>\n\n      This service is used to filter auditable events from the JMS topic based\n      on their names. The following XML snipset give figures out how the default\n      event types are selected for auditing.\n\n      <programlisting>\n    <extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n        <event name=\"documentCreated\"/>\n        <event name=\"documentCreatedByCopy\"/>\n        <event name=\"documentDuplicated\"/>\n        <event name=\"documentMoved\"/>\n        <event name=\"documentRemoved\"/>\n        <event name=\"documentModified\"/>\n        <event name=\"documentLocked\"/>\n        <event name=\"documentUnlocked\"/>\n        <event name=\"documentSecurityUpdated\"/>\n        <event name=\"lifecycle_transition_event\"/>\n        <event name=\"documentTrashed\"/>\n        <event name=\"documentUntrashed\"/>\n    </extension>\n</programlisting>\n",
              "documentationHtml": "<p>\nThis service registers auditable events.\n</p><p>\nRegistered events are dummy strings for now.\n</p><p>\nThis service is used to filter auditable events from the JMS topic based\non their names. The following XML snipset give figures out how the default\nevent types are selected for auditing.\n</p><p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "label": "event (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "event",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.ExtendedInfoDescriptor"
              ],
              "documentation": "\n      This service registered extended info mappings.\n\n      <p/>\n\n      This service is used to evaluate EL expression using document as context\n      regist:ering results into a map indexed by names.\n    \n",
              "documentationHtml": "<p>\nThis service registered extended info mappings.\n</p><p>\nThis service is used to evaluate EL expression using document as context\nregist:ering results into a map indexed by names.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--extendedInfo",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--extendedInfo",
              "label": "extendedInfo (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "extendedInfo",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AdapterDescriptor"
              ],
              "documentation": "\n      register the adapter that will be injected in EL context\n    \n",
              "documentationHtml": "<p>\nregister the adapter that will be injected in EL context\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--adapter",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--adapter",
              "label": "adapter (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "adapter",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AuditBackendDescriptor"
              ],
              "documentation": "\n      Allows to register a backend implementation for the Audit Service\n    \n",
              "documentationHtml": "<p>\nAllows to register a backend implementation for the Audit Service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "label": "backend (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "backend",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AuditStorageDescriptor"
              ],
              "documentation": "\n      Allows to register a storage implementation for the Audit Service\n    \n",
              "documentationHtml": "<p>\nAllows to register a storage implementation for the Audit Service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--storage",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--storage",
              "label": "storage (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "storage",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AuditBulkerDescriptor"
              ],
              "documentation": "\n      CAUTION: Deprecated since 10.10, audit bulker is now handled with nuxeo-stream, no replacement\n      Allows to configure bulk processing\n    \n",
              "documentationHtml": "<p>\nCAUTION: Deprecated since 10.10, audit bulker is now handled with nuxeo-stream, no replacement\nAllows to configure bulk processing\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--bulk",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--bulk",
              "label": "bulk (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "bulk",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Those default auditable events match Nuxeo core base events.\n      <p/>\n\n      If you are sending new Nuxeo core events and want them audited, this is\n      the place to declare them NXAudit side.\n    \n",
              "documentationHtml": "<p>\nThose default auditable events match Nuxeo core base events.\n</p><p>\nIf you are sending new Nuxeo core events and want them audited, this is\nthe place to declare them NXAudit side.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <documentation>\n      Those default auditable events match Nuxeo core base events.\n      <p/>\n      If you are sending new Nuxeo core events and want them audited, this is\n      the place to declare them NXAudit side.\n    </documentation>\n\n    <event name=\"documentCreated\"/>\n    <event name=\"documentCreatedByCopy\"/>\n    <event name=\"documentDuplicated\"/>\n    <event name=\"documentMoved\"/>\n    <event name=\"documentRemoved\"/>\n    <event name=\"documentModified\"/>\n    <event name=\"documentLocked\"/>\n    <event name=\"documentUnlocked\"/>\n    <event name=\"documentSecurityUpdated\"/>\n    <event name=\"retentionActiveChanged\"/>\n    <event name=\"lifecycle_transition_event\"/>\n    <event name=\"loginSuccess\"/>\n    <event name=\"loginFailed\"/>\n    <event name=\"logout\"/>\n    <event name=\"documentCheckedIn\"/>\n    <event name=\"proxyRemoved\"/>\n    <event name=\"versionRemoved\"/>\n    <event name=\"documentProxyPublished\"/>\n    <event name=\"sectionContentPublished\"/>\n    <event name=\"documentRestored\"/>\n    <event name=\"download\"/>\n    <event name=\"documentTrashed\"/>\n    <event name=\"documentUntrashed\"/>\n    <event name=\"addedToCollection\"/>\n    <event name=\"removedFromCollection\"/>\n    <event name=\"afterMakeRecord\"/>\n    <event name=\"afterSetRetention\"/>\n    <event name=\"afterExtendRetention\"/>\n    <event name=\"retentionExpired\"/>\n    <event name=\"afterSetLegalHold\"/>\n    <event name=\"afterRemoveLegalHold\"/>\n    <event name=\"blobDigestUpdated\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"backend\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n\n    <backend class=\"org.nuxeo.ecm.platform.audit.service.DefaultAuditBackend\">\n      <require>org.nuxeo.ecm.core.persistence.PersistenceComponent</require>\n    </backend>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--listener",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--listener",
              "registrationOrder": 48,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.audit.listener.StreamAuditEventListener\" name=\"auditLoggerListener\" postCommit=\"false\" priority=\"500\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--streamProcessor",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--streamProcessor",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.platform.audit.impl.StreamAuditWriter\" defaultCodec=\"avro\" defaultConcurrency=\"1\" defaultPartitions=\"1\" enabled=\"true\" name=\"auditWriter\">\n      <policy batchCapacity=\"25\" batchThreshold=\"500ms\" continueOnFailure=\"false\" delay=\"1s\" maxDelay=\"60s\" maxRetries=\"20\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "requirements": [
            "org.nuxeo.ecm.platform.audit.service.persistence",
            "org.nuxeo.runtime.metrics.MetricsService"
          ],
          "resolutionOrder": 811,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.service.AuditBackend",
              "id": "org.nuxeo.ecm.platform.audit.service.AuditBackend",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.AuditReader",
              "id": "org.nuxeo.ecm.platform.audit.api.AuditReader",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.AuditLogger",
              "id": "org.nuxeo.ecm.platform.audit.api.AuditLogger",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.Logs",
              "id": "org.nuxeo.ecm.platform.audit.api.Logs",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader",
              "id": "org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 766,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n\n  <require>org.nuxeo.runtime.metrics.MetricsService</require>\n\n  <documentation>\n    Service that deals with audit.\n    <p />\n    Most of the work is done at EJB layer though.\n\n    This supports JMS events based\n    notifications on a dedicated topic.\n\n    @version 1.0\n    @author Julien Anguenot\n  </documentation>\n\n  <!-- needed so that activation has access to persistence -->\n  <require>org.nuxeo.ecm.platform.audit.service.persistence</require>\n\n  <implementation class=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.audit.service.AuditBackend\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.AuditReader\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.AuditLogger\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.Logs\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" />\n  </service>\n\n  <extension-point name=\"event\">\n    <documentation>\n      This service registers auditable events.\n      <p />\n      Registered events are dummy strings for now.\n      <p />\n      This service is used to filter auditable events from the JMS topic based\n      on their names. The following XML snipset give figures out how the default\n      event types are selected for auditing.\n\n      <programlisting>\n        <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"event\">\n          <event name=\"documentCreated\" />\n          <event name=\"documentCreatedByCopy\" />\n          <event name=\"documentDuplicated\" />\n          <event name=\"documentMoved\" />\n          <event name=\"documentRemoved\" />\n          <event name=\"documentModified\" />\n          <event name=\"documentLocked\" />\n          <event name=\"documentUnlocked\" />\n          <event name=\"documentSecurityUpdated\" />\n          <event name=\"lifecycle_transition_event\" />\n          <event name=\"documentTrashed\" />\n          <event name=\"documentUntrashed\" />\n        </extension>\n      </programlisting>\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.EventDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"extendedInfo\">\n\n    <documentation>\n      This service registered extended info mappings.\n\n      <p />\n      This service is used to evaluate EL expression using document as context\n      regist:ering results into a map indexed by names.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.ExtendedInfoDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"adapter\">\n\n    <documentation>\n      register the adapter that will be injected in EL context\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AdapterDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"backend\">\n\n    <documentation>\n      Allows to register a backend implementation for the Audit Service\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AuditBackendDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"storage\">\n\n    <documentation>\n      Allows to register a storage implementation for the Audit Service\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AuditStorageDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"bulk\">\n    <documentation>\n      CAUTION: Deprecated since 10.10, audit bulker is now handled with nuxeo-stream, no replacement\n      Allows to configure bulk processing\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AuditBulkerDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"event\">\n    <documentation>\n      Those default auditable events match Nuxeo core base events.\n      <p />\n      If you are sending new Nuxeo core events and want them audited, this is\n      the place to declare them NXAudit side.\n    </documentation>\n\n    <event name=\"documentCreated\" />\n    <event name=\"documentCreatedByCopy\" />\n    <event name=\"documentDuplicated\" />\n    <event name=\"documentMoved\" />\n    <event name=\"documentRemoved\" />\n    <event name=\"documentModified\" />\n    <event name=\"documentLocked\" />\n    <event name=\"documentUnlocked\" />\n    <event name=\"documentSecurityUpdated\" />\n    <event name=\"retentionActiveChanged\" />\n    <event name=\"lifecycle_transition_event\" />\n    <event name=\"loginSuccess\" />\n    <event name=\"loginFailed\" />\n    <event name=\"logout\" />\n    <event name=\"documentCheckedIn\" />\n    <event name=\"proxyRemoved\" />\n    <event name=\"versionRemoved\" />\n    <event name=\"documentProxyPublished\" />\n    <event name=\"sectionContentPublished\" />\n    <event name=\"documentRestored\" />\n    <event name=\"download\" />\n    <event name=\"documentTrashed\" />\n    <event name=\"documentUntrashed\" />\n    <event name=\"addedToCollection\" />\n    <event name=\"removedFromCollection\" />\n    <event name=\"afterMakeRecord\" />\n    <event name=\"afterSetRetention\" />\n    <event name=\"afterExtendRetention\" />\n    <event name=\"retentionExpired\" />\n    <event name=\"afterSetLegalHold\" />\n    <event name=\"afterRemoveLegalHold\" />\n    <event name=\"blobDigestUpdated\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"backend\">\n\n    <backend class=\"org.nuxeo.ecm.platform.audit.service.DefaultAuditBackend\">\n      <require>org.nuxeo.ecm.core.persistence.PersistenceComponent</require>\n    </backend>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"auditLoggerListener\" async=\"false\" postCommit=\"false\" priority=\"500\"\n      class=\"org.nuxeo.ecm.platform.audit.listener.StreamAuditEventListener\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"auditWriter\" defaultConcurrency=\"1\" defaultPartitions=\"1\"\n      defaultCodec=\"${nuxeo.stream.audit.log.codec:=legacy}\" class=\"org.nuxeo.ecm.platform.audit.impl.StreamAuditWriter\"\n      enabled=\"${nuxeo.stream.audit.enabled:=true}\">\n      <policy name=\"default\" batchCapacity=\"${nuxeo.stream.audit.batch.size:=10}\"\n        batchThreshold=\"${nuxeo.stream.audit.batch.threshold.ms:=50}ms\" maxRetries=\"20\" delay=\"1s\" maxDelay=\"60s\"\n        continueOnFailure=\"false\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxaudit-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-audit-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit",
      "id": "org.nuxeo.ecm.platform.audit",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.audit\r\nBundle-Category: web,stateful\r\nBundle-ActivationPolicy: lazy\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nImport-Package: de.odysseus.el;version=\"2.1.2\",javax.annotation;version=\r\n \"1.0\",javax.el,javax.management,javax.persistence,org.apache.commons.la\r\n ng.builder,org.apache.commons.logging,org.nuxeo.common.xmap.annotation,\r\n org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,org.nuxeo\r\n .ecm.core.api.event,org.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.cor\r\n e.api.security,org.nuxeo.ecm.core.event,org.nuxeo.ecm.core.event.impl,o\r\n rg.nuxeo.ecm.core.persistence,org.nuxeo.ecm.directory;api=split,org.nux\r\n eo.ecm.platform.audit.api,org.nuxeo.ecm.platform.audit.api.query,org.nu\r\n xeo.ecm.platform.el,org.nuxeo.runtime.api,org.nuxeo.runtime.management,\r\n org.nuxeo.runtime.model,org.osgi.framework;version=\"1.5.0\"\r\nNuxeo-Component: OSGI-INF/nxaudit-service.xml,OSGI-INF/nxaudit-persisten\r\n ce-config.xml,OSGI-INF/core-type-contrib.xml,OSGI-INF/directories-contr\r\n ib.xml,OSGI-INF/pageprovider-contrib.xml,OSGI-INF/marshallers-contrib.x\r\n ml, OSGI-INF/user-audit-contrib.xml\r\nExport-Package: org.nuxeo.ecm.platform.audit.listener,org.nuxeo.ecm.plat\r\n form.audit.service,org.nuxeo.ecm.platform.audit.service.extension,org.n\r\n uxeo.ecm.platform.audit.service.management\r\nBundle-Name: NXAudit Core\r\nBundle-ClassPath: .\r\nBundle-Localization: plugin\r\nPrivate-Package: .\r\n\r\n",
      "maxResolutionOrder": 811,
      "minResolutionOrder": 285,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-connect-client",
      "artifactVersion": "1.8.6",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.connect.client",
          "org.nuxeo.connect.client.wrapper"
        ],
        "hierarchyPath": "/grp:org.nuxeo.connect/grp:org.nuxeo.connect.client",
        "id": "grp:org.nuxeo.connect.client",
        "name": "org.nuxeo.connect.client",
        "parentIds": [
          "grp:org.nuxeo.connect"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.connect.client",
      "components": [],
      "fileName": "nuxeo-connect-client-1.8.6.jar",
      "groupId": "org.nuxeo.connect",
      "hierarchyPath": "/grp:org.nuxeo.connect/grp:org.nuxeo.connect.client/org.nuxeo.connect.client",
      "id": "org.nuxeo.connect.client",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nBundle-SymbolicName: org.nuxeo.connect.client;singleton:=true\r\nBundle-Version: 0.0.1\r\nBundle-Name: nuxeo connect client\r\nArchiver-Version: Plexus Archiver\r\nBuilt-By: runner\r\nBundle-ManifestVersion: 1\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Require: org.nuxeo.ecm.core,org.nuxeo.ecm.core.schema,org.nuxeo.\r\n ecm.webapp.core\r\nCreated-By: Apache Maven 3.8.6\r\nBuild-Jdk: 1.8.0_352\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core",
        "org.nuxeo.ecm.core.schema",
        "org.nuxeo.ecm.webapp.core"
      ],
      "version": "1.8.6"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-user-center",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.user.center",
          "org.nuxeo.ecm.user.center.dashboard",
          "org.nuxeo.ecm.user.center.dashboard.jsf",
          "org.nuxeo.ecm.user.center.notification",
          "org.nuxeo.ecm.user.center.oauth",
          "org.nuxeo.ecm.user.center.profile",
          "org.nuxeo.ecm.user.center.profile.jsf",
          "org.nuxeo.ecm.user.invite",
          "org.nuxeo.ecm.user.registration",
          "org.nuxeo.ecm.user.registration.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user",
        "id": "grp:org.nuxeo.ecm.user",
        "name": "org.nuxeo.ecm.user",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.user.center",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.actions/Contributions/org.nuxeo.ecm.user.center.actions--actions",
              "id": "org.nuxeo.ecm.user.center.actions--actions",
              "registrationOrder": 48,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"home\" label=\"label.main.tab.home\" link=\"view_home\" order=\"20\" type=\"main_tab\">\n      <category>MAIN_TABS</category>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n\n    <!-- Users and Groups directory -->\n    <action icon=\"/icons/users_groups.png\" id=\"UsersGroupsHome\" label=\"command.manageMembers\" link=\"/user_center_fragment.xhtml\" order=\"60\">\n      <category>USER_CENTER</category>\n      <filter-id>not_anonymous</filter-id>\n      <filter-id>not_readonly</filter-id>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n    <action id=\"UsersHome\" label=\"label.userManager.users\" link=\"/users/view_users.xhtml\" order=\"10\">\n      <category>UsersGroupsHome_sub_tab</category>\n      <filter-id>not_readonly</filter-id>\n    </action>\n    <action id=\"GroupsHome\" label=\"label.groupManager.groups\" link=\"/users/view_groups.xhtml\" order=\"20\">\n      <category>UsersGroupsHome_sub_tab</category>\n      <filter-id>not_readonly</filter-id>\n    </action>\n\n    <!-- Saved searches -->\n    <action icon=\"/icons/saved_searches.png\" id=\"SavedSearches\" label=\"user.center.saved.searches\" link=\"/user_center_fragment.xhtml\" order=\"70\">\n      <category>USER_CENTER</category>\n      <filter-id>not_anonymous</filter-id>\n      <filter-id>not_transient_user</filter-id>\n      <filter id=\"SavedSearches_has_subtabs\">\n        <rule grant=\"false\">\n          <condition>\n            #{webActions.getActionsList('SavedSearches_sub_tab').isEmpty()}\n          </condition>\n        </rule>\n      </filter>\n    </action>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.actions",
          "name": "org.nuxeo.ecm.user.center.actions",
          "requirements": [],
          "resolutionOrder": 890,
          "services": [],
          "startOrder": 600,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.user.center.actions\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"home\" link=\"view_home\" label=\"label.main.tab.home\" order=\"20\"\n      type=\"main_tab\">\n      <category>MAIN_TABS</category>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n\n    <!-- Users and Groups directory -->\n    <action id=\"UsersGroupsHome\" link=\"/user_center_fragment.xhtml\"\n      label=\"command.manageMembers\" icon=\"/icons/users_groups.png\" order=\"60\">\n      <category>USER_CENTER</category>\n      <filter-id>not_anonymous</filter-id>\n      <filter-id>not_readonly</filter-id>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n    <action id=\"UsersHome\" link=\"/users/view_users.xhtml\"\n      label=\"label.userManager.users\" order=\"10\">\n      <category>UsersGroupsHome_sub_tab</category>\n      <filter-id>not_readonly</filter-id>\n    </action>\n    <action id=\"GroupsHome\" link=\"/users/view_groups.xhtml\"\n      label=\"label.groupManager.groups\" order=\"20\">\n      <category>UsersGroupsHome_sub_tab</category>\n      <filter-id>not_readonly</filter-id>\n    </action>\n\n    <!-- Saved searches -->\n    <action id=\"SavedSearches\" link=\"/user_center_fragment.xhtml\"\n      label=\"user.center.saved.searches\" icon=\"/icons/saved_searches.png\" order=\"70\">\n      <category>USER_CENTER</category>\n      <filter-id>not_anonymous</filter-id>\n      <filter-id>not_transient_user</filter-id>\n      <filter id=\"SavedSearches_has_subtabs\">\n        <rule grant=\"false\">\n          <condition>\n            #{webActions.getActionsList('SavedSearches_sub_tab').isEmpty()}\n          </condition>\n        </rule>\n      </filter>\n    </action>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    @since 6.0, global widgets used to render actions/tabs\n    in Home.\n  \n",
          "documentationHtml": "<p>\n&#64;since 6.0, global widgets used to render actions/tabs\nin Home.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.action.widgets/Contributions/org.nuxeo.ecm.user.center.action.widgets--widgets",
              "id": "org.nuxeo.ecm.user.center.action.widgets--widgets",
              "registrationOrder": 33,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"homeTabs\" type=\"tabs\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">#{useAjaxTabs}</property>\n        <property name=\"category\">USER_CENTER</property>\n        <property name=\"actions\">#{userCenterViews.availableActions}</property>\n        <property name=\"currentTabAction\">#{userCenterViews.currentView}</property>\n        <property name=\"overallDisplay\">vertical_block</property>\n      </properties>\n    </widget>\n\n    <widget name=\"userCenterSubTabs\" type=\"tabs\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">#{useAjaxTabs}</property>\n        <property name=\"actions\">\n          #{userCenterViews.availableSubActions}\n        </property>\n        <property name=\"currentTabAction\">#{userCenterViews.currentSubView}</property>\n        <property name=\"hideSingleTab\">\n          #{not\n          currentUserCenterView.properties.alwaysDisplaySubTabs}\n        </property>\n      </properties>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.LayoutStore--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.action.widgets/Contributions/org.nuxeo.ecm.user.center.action.widgets--widgettypes",
              "id": "org.nuxeo.ecm.user.center.action.widgets--widgettypes",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "name": "org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\">\n\n    <widgetType name=\"home_rest_document_link\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Document Home Rest Link</title>\n        <description>\n          Widget displaying a restful document link for an action\n          (typically a tab link). Useful for Home tabs migration to tabs\n          widget,\n          to apply compatibility changes on existing actions.\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"repositoryName\">#{currentServerLocation.name}</property>\n            <property name=\"discardSurroundingForm\">true</property>\n            <property name=\"disableMultiPartForm\">true</property>\n            <property name=\"supportAjax\">#{canUseAjaxTabs}</property>\n            <property name=\"view\">view_home</property>\n            <property name=\"pattern\">home</property>\n          </defaultValues>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/rest_document_link_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/rest_document_link_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--typeCompatibility",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.action.widgets/Contributions/org.nuxeo.ecm.user.center.action.widgets--typeCompatibility",
              "id": "org.nuxeo.ecm.user.center.action.widgets--typeCompatibility",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"typeCompatibility\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <typeCompatibility type=\"home_rest_document_link\">\n      <category>USER_CENTER</category>\n      <category>UsersGroupsHome_sub_tab</category>\n      <category>Dashboard_sub_tab</category>\n      <category>MiniMessages_sub_tab</category>\n      <category>Collections_sub_tab</category>\n      <category>Certificate_sub_tab</category>\n      <category>WorkflowHome_sub_tab</category>\n      <category>ActivityStream_sub_tab</category>\n      <category>AuthorizedApplication_sub_tab</category>\n      <category>Profile_sub_tab</category>\n      <category>Preferences_sub_tab</category>\n      <category>relationship_network_sub_tab</category>\n      <category>SavedSearches_sub_tab</category>\n    </typeCompatibility>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.action.widgets",
          "name": "org.nuxeo.ecm.user.center.action.widgets",
          "requirements": [],
          "resolutionOrder": 891,
          "services": [],
          "startOrder": 599,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.user.center.action.widgets\">\n\n  <documentation>\n    @since 6.0, global widgets used to render actions/tabs\n    in Home.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"homeTabs\" type=\"tabs\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">#{useAjaxTabs}</property>\n        <property name=\"category\">USER_CENTER</property>\n        <property name=\"actions\">#{userCenterViews.availableActions}</property>\n        <property name=\"currentTabAction\">#{userCenterViews.currentView}</property>\n        <property name=\"overallDisplay\">vertical_block</property>\n      </properties>\n    </widget>\n\n    <widget name=\"userCenterSubTabs\" type=\"tabs\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">#{useAjaxTabs}</property>\n        <property name=\"actions\">\n          #{userCenterViews.availableSubActions}\n        </property>\n        <property name=\"currentTabAction\">#{userCenterViews.currentSubView}</property>\n        <property name=\"hideSingleTab\">\n          #{not\n          currentUserCenterView.properties.alwaysDisplaySubTabs}\n        </property>\n      </properties>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"home_rest_document_link\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Document Home Rest Link</title>\n        <description>\n          Widget displaying a restful document link for an action\n          (typically a tab link). Useful for Home tabs migration to tabs\n          widget,\n          to apply compatibility changes on existing actions.\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"repositoryName\">#{currentServerLocation.name}</property>\n            <property name=\"discardSurroundingForm\">true</property>\n            <property name=\"disableMultiPartForm\">true</property>\n            <property name=\"supportAjax\">#{canUseAjaxTabs}</property>\n            <property name=\"view\">view_home</property>\n            <property name=\"pattern\">home</property>\n          </defaultValues>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/rest_document_link_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/rest_document_link_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"typeCompatibility\">\n\n    <typeCompatibility type=\"home_rest_document_link\">\n      <category>USER_CENTER</category>\n      <category>UsersGroupsHome_sub_tab</category>\n      <category>Dashboard_sub_tab</category>\n      <category>MiniMessages_sub_tab</category>\n      <category>Collections_sub_tab</category>\n      <category>Certificate_sub_tab</category>\n      <category>WorkflowHome_sub_tab</category>\n      <category>ActivityStream_sub_tab</category>\n      <category>AuthorizedApplication_sub_tab</category>\n      <category>Profile_sub_tab</category>\n      <category>Preferences_sub_tab</category>\n      <category>relationship_network_sub_tab</category>\n      <category>SavedSearches_sub_tab</category>\n    </typeCompatibility>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/action-widgets-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.theme.styling.service--pages",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.theme/Contributions/org.nuxeo.ecm.user.center.theme--pages",
              "id": "org.nuxeo.ecm.user.center.theme--pages",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.theme.styling.service",
                "name": "org.nuxeo.theme.styling.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"pages\" target=\"org.nuxeo.theme.styling.service\">\n\n    <page charset=\"utf-8\" name=\"userCenter/default\">\n      <defaultFlavor>default</defaultFlavor>\n      <flavors>\n        <flavor>default</flavor>\n        <flavor>rainbow</flavor>\n      </flavors>\n      <resources>\n        <bundle>nuxeo_includes</bundle>\n        <bundle>nuxeo_base</bundle>\n        <bundle>nuxeo_sassCss</bundle>\n        <resource>nuxeo_usercenter_specific.scss</resource>\n      </resources>\n    </page>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.theme/Contributions/org.nuxeo.ecm.user.center.theme--resources",
              "id": "org.nuxeo.ecm.user.center.theme--resources",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n\n    <resource name=\"nuxeo_usercenter_specific.scss\" type=\"css\">\n      <path>themes/sass/nuxeo_usercenter_specific.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.theme",
          "name": "org.nuxeo.ecm.user.center.theme",
          "requirements": [],
          "resolutionOrder": 892,
          "services": [],
          "startOrder": 623,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.theme\">\n\n  <extension target=\"org.nuxeo.theme.styling.service\" point=\"pages\">\n\n    <page name=\"userCenter/default\" charset=\"utf-8\">\n      <defaultFlavor>default</defaultFlavor>\n      <flavors>\n        <flavor>default</flavor>\n        <flavor>rainbow</flavor>\n      </flavors>\n      <resources>\n        <bundle>nuxeo_includes</bundle>\n        <bundle>nuxeo_base</bundle>\n        <bundle>nuxeo_sassCss</bundle>\n        <resource>nuxeo_usercenter_specific.scss</resource>\n      </resources>\n    </page>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\n\n    <resource name=\"nuxeo_usercenter_specific.scss\" type=\"css\">\n      <path>themes/sass/nuxeo_usercenter_specific.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/theme-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--startURL",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.auth/Contributions/org.nuxeo.ecm.user.center.auth--startURL",
              "id": "org.nuxeo.ecm.user.center.auth--startURL",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>nxhome/</pattern>\n        <pattern>user/</pattern>\n        <pattern>group/</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.auth",
          "name": "org.nuxeo.ecm.user.center.auth",
          "requirements": [],
          "resolutionOrder": 893,
          "services": [],
          "startOrder": 601,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.auth\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"startURL\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>nxhome/</pattern>\n        <pattern>user/</pattern>\n        <pattern>group/</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/auth-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      The user codec uses the given username to select and display a user.\n      Urls are of the form http://site/nuxeo/user/username(/view).\n\n      The view is optional, and defaults to view_home if not present.\n    \n",
              "documentationHtml": "<p>\nThe user codec uses the given username to select and display a user.\nUrls are of the form http://site/nuxeo/user/username(/view).\n</p><p>\nThe view is optional, and defaults to view_home if not present.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService--codecs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.urlservice/Contributions/org.nuxeo.ecm.user.center.urlservice--codecs",
              "id": "org.nuxeo.ecm.user.center.urlservice--codecs",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"codecs\" target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\">\n\n    <documentViewCodec class=\"org.nuxeo.ecm.platform.url.codec.DocumentPathCodec\" default=\"false\" enabled=\"true\" name=\"docpathhome\" prefix=\"nxhome\"/>\n\n    <documentation>\n      The user codec uses the given username to select and display a user.\n      Urls are of the form http://site/nuxeo/user/username(/view).\n\n      The view is optional, and defaults to view_home if not present.\n    </documentation>\n    <documentViewCodec class=\"org.nuxeo.ecm.user.center.UserCodec\" default=\"false\" enabled=\"true\" name=\"user\" prefix=\"user\"/>\n    <documentViewCodec class=\"org.nuxeo.ecm.user.center.GroupCodec\" default=\"false\" enabled=\"true\" name=\"group\" prefix=\"group\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.rest.URLService--urlpatterns",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.urlservice/Contributions/org.nuxeo.ecm.user.center.urlservice--urlpatterns",
              "id": "org.nuxeo.ecm.user.center.urlservice--urlpatterns",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.rest.URLService",
                "name": "org.nuxeo.ecm.platform.ui.web.rest.URLService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"urlpatterns\" target=\"org.nuxeo.ecm.platform.ui.web.rest.URLService\">\n\n    <urlPattern enabled=\"true\" name=\"home\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>true</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>docpathhome</codecName>\n      <actionBinding>#{restHelper.initContextFromRestRequest}</actionBinding>\n      <documentViewBindingApplies>\n        #{mainTabsActions.isOnMainTab('home')}\n      </documentViewBindingApplies>\n      <documentViewBinding>#{restHelper.documentView}</documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.getNewDocumentView(null)}\n      </newDocumentViewBinding>\n      <bindings>\n        <binding callGetter=\"false\" name=\"tabId\">\n          #{webActions.currentTabId}\n        </binding>\n        <binding callGetter=\"false\" name=\"subTabId\">\n          #{webActions.currentSubTabId}\n        </binding>\n        <binding name=\"tabIds\">#{webActions.currentTabIds}</binding>\n        <binding callGetter=\"false\" name=\"language\">\n          #{restHelper.localeString}\n        </binding>\n      </bindings>\n    </urlPattern>\n\n    <urlPattern enabled=\"true\" name=\"user\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>true</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>user</codecName>\n      <actionBinding>\n        #{restHelper.initContextFromRestRequest}\n      </actionBinding>\n      <bindings>\n        <binding callGetter=\"false\" name=\"tabIds\">\n          #{webActions.currentTabIds}\n        </binding>\n        <binding callGetter=\"false\" name=\"username\">\n          #{userManagementActions.selectedUserName}\n        </binding>\n        <binding callGetter=\"false\" name=\"showUser\">\n          #{userManagementActions.showUser}\n        </binding>\n      </bindings>\n    </urlPattern>\n\n    <urlPattern enabled=\"true\" name=\"group\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>true</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>group</codecName>\n      <actionBinding>\n        #{restHelper.initContextFromRestRequest}\n      </actionBinding>\n      <bindings>\n        <binding callGetter=\"false\" name=\"tabIds\">\n          #{webActions.currentTabIds}\n        </binding>\n        <binding callGetter=\"false\" name=\"groupname\">\n          #{groupManagementActions.selectedGroupName}\n        </binding>\n        <binding callGetter=\"false\" name=\"showGroup\">\n          #{groupManagementActions.showGroup}\n        </binding>\n      </bindings>\n    </urlPattern>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.urlservice",
          "name": "org.nuxeo.ecm.user.center.urlservice",
          "requirements": [],
          "resolutionOrder": 894,
          "services": [],
          "startOrder": 624,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.user.center.urlservice\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\"\n    point=\"codecs\">\n\n    <documentViewCodec name=\"docpathhome\" enabled=\"true\" default=\"false\"\n      prefix=\"nxhome\"\n      class=\"org.nuxeo.ecm.platform.url.codec.DocumentPathCodec\" />\n\n    <documentation>\n      The user codec uses the given username to select and display a user.\n      Urls are of the form http://site/nuxeo/user/username(/view).\n\n      The view is optional, and defaults to view_home if not present.\n    </documentation>\n    <documentViewCodec name=\"user\" enabled=\"true\" default=\"false\"\n      prefix=\"user\"\n      class=\"org.nuxeo.ecm.user.center.UserCodec\" />\n    <documentViewCodec name=\"group\" enabled=\"true\" default=\"false\"\n      prefix=\"group\"\n      class=\"org.nuxeo.ecm.user.center.GroupCodec\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.rest.URLService\"\n    point=\"urlpatterns\">\n\n    <urlPattern name=\"home\" enabled=\"true\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>true</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>docpathhome</codecName>\n      <actionBinding>#{restHelper.initContextFromRestRequest}</actionBinding>\n      <documentViewBindingApplies>\n        #{mainTabsActions.isOnMainTab('home')}\n      </documentViewBindingApplies>\n      <documentViewBinding>#{restHelper.documentView}</documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.getNewDocumentView(null)}\n      </newDocumentViewBinding>\n      <bindings>\n        <binding name=\"tabId\" callGetter=\"false\">\n          #{webActions.currentTabId}\n        </binding>\n        <binding name=\"subTabId\" callGetter=\"false\">\n          #{webActions.currentSubTabId}\n        </binding>\n        <binding name=\"tabIds\">#{webActions.currentTabIds}</binding>\n        <binding name=\"language\" callGetter=\"false\">\n          #{restHelper.localeString}\n        </binding>\n      </bindings>\n    </urlPattern>\n\n    <urlPattern name=\"user\" enabled=\"true\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>true</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>user</codecName>\n      <actionBinding>\n        #{restHelper.initContextFromRestRequest}\n      </actionBinding>\n      <bindings>\n        <binding name=\"tabIds\" callGetter=\"false\">\n          #{webActions.currentTabIds}\n        </binding>\n        <binding name=\"username\" callGetter=\"false\">\n          #{userManagementActions.selectedUserName}\n        </binding>\n        <binding name=\"showUser\" callGetter=\"false\">\n          #{userManagementActions.showUser}\n        </binding>\n      </bindings>\n    </urlPattern>\n\n    <urlPattern name=\"group\" enabled=\"true\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>true</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>group</codecName>\n      <actionBinding>\n        #{restHelper.initContextFromRestRequest}\n      </actionBinding>\n      <bindings>\n        <binding name=\"tabIds\" callGetter=\"false\">\n          #{webActions.currentTabIds}\n        </binding>\n        <binding name=\"groupname\" callGetter=\"false\">\n          #{groupManagementActions.selectedGroupName}\n        </binding>\n        <binding name=\"showGroup\" callGetter=\"false\">\n          #{groupManagementActions.showGroup}\n        </binding>\n      </bindings>\n    </urlPattern>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/urlservice-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property to control the regex used for allowed characters\n      in the user/group name when matching a request URL.\n\n      @since 8.3\n    \n",
              "documentationHtml": "<p>\nProperty to control the regex used for allowed characters\nin the user/group name when matching a request URL.\n</p><p>\n&#64;since 8.3\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.properties/Contributions/org.nuxeo.ecm.user.center.properties--configuration",
              "id": "org.nuxeo.ecm.user.center.properties--configuration",
              "registrationOrder": 67,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property to control the regex used for allowed characters\n      in the user/group name when matching a request URL.\n\n      @since 8.3\n    </documentation>\n    <property name=\"nuxeo.codec.usergroup.allowedCharacters\">[a-zA-Z_0-9\\-\\.@]*</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center/org.nuxeo.ecm.user.center.properties",
          "name": "org.nuxeo.ecm.user.center.properties",
          "requirements": [],
          "resolutionOrder": 895,
          "services": [],
          "startOrder": 622,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property to control the regex used for allowed characters\n      in the user/group name when matching a request URL.\n\n      @since 8.3\n    </documentation>\n    <property name=\"nuxeo.codec.usergroup.allowedCharacters\">[a-zA-Z_0-9\\-\\.@]*</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-group-codec-properties.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-user-center-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center",
      "id": "org.nuxeo.ecm.user.center",
      "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: 1\r\nBundle-Version: 0.0.1\r\nBundle-Name: Nuxeo User Center\r\nBundle-SymbolicName: org.nuxeo.ecm.user.center;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/actions-contrib.xml,OSGI-INF/action-widgets-co\r\n ntrib.xml,OSGI-INF/theme-contrib.xml,OSGI-INF/auth-contrib.xml,OSGI-INF\r\n /urlservice-contrib.xml,OSGI-INF/user-group-codec-properties.xml\r\n\r\n",
      "maxResolutionOrder": 895,
      "minResolutionOrder": 890,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-csv-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.csv.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.csv",
        "id": "grp:org.nuxeo.ecm.csv",
        "name": "org.nuxeo.ecm.csv",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.csv.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.csv/org.nuxeo.ecm.csv.core/org.nuxeo.ecm.csv.core.workmanager/Contributions/org.nuxeo.ecm.csv.core.workmanager--queues",
              "id": "org.nuxeo.ecm.csv.core.workmanager--queues",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"csvImporter\">\n      <maxThreads>1</maxThreads>\n      <category>csvImporter</category>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.csv/org.nuxeo.ecm.csv.core/org.nuxeo.ecm.csv.core.workmanager",
          "name": "org.nuxeo.ecm.csv.core.workmanager",
          "requirements": [],
          "resolutionOrder": 168,
          "services": [],
          "startOrder": 184,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.csv.core.workmanager\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"csvImporter\">\n      <maxThreads>1</maxThreads>\n      <category>csvImporter</category>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/csv-workmanager-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.csv.core.CSVImporterImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.csv/org.nuxeo.ecm.csv.core/org.nuxeo.ecm.csv.core.CSVImporter",
          "name": "org.nuxeo.ecm.csv.core.CSVImporter",
          "requirements": [],
          "resolutionOrder": 169,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.csv.core.CSVImporter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.csv/org.nuxeo.ecm.csv.core/org.nuxeo.ecm.csv.core.CSVImporter/Services/org.nuxeo.ecm.csv.core.CSVImporter",
              "id": "org.nuxeo.ecm.csv.core.CSVImporter",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 181,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.csv.core.CSVImporter\">\n\n  <implementation class=\"org.nuxeo.ecm.csv.core.CSVImporterImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.csv.core.CSVImporter\"/>\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/csv-importer-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.csv/org.nuxeo.ecm.csv.core/org.nuxeo.ecm.csv.core.operation.contrib/Contributions/org.nuxeo.ecm.csv.core.operation.contrib--operations",
              "id": "org.nuxeo.ecm.csv.core.operation.contrib--operations",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n        <operation class=\"org.nuxeo.ecm.csv.core.operation.CSVImportOperation\"/>\n        <operation class=\"org.nuxeo.ecm.csv.core.operation.CSVImportStatusOperation\"/>\n        <operation class=\"org.nuxeo.ecm.csv.core.operation.CSVImportLogOperation\"/>\n        <operation class=\"org.nuxeo.ecm.csv.core.operation.CSVImportResultOperation\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.csv/org.nuxeo.ecm.csv.core/org.nuxeo.ecm.csv.core.operation.contrib",
          "name": "org.nuxeo.ecm.csv.core.operation.contrib",
          "requirements": [],
          "resolutionOrder": 170,
          "services": [],
          "startOrder": 182,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.csv.core.operation.contrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n        <operation class=\"org.nuxeo.ecm.csv.core.operation.CSVImportOperation\"/>\n        <operation class=\"org.nuxeo.ecm.csv.core.operation.CSVImportStatusOperation\"/>\n        <operation class=\"org.nuxeo.ecm.csv.core.operation.CSVImportLogOperation\"/>\n        <operation class=\"org.nuxeo.ecm.csv.core.operation.CSVImportResultOperation\"/>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/csv-operation-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that enables the old legacy date format 'MM/dd/yyyy' instead of the W3C format when reading dates on\n      CSV files.\n      Defaults to false.\n\n      @since 10.3\n    \n",
              "documentationHtml": "<p>\nProperty that enables the old legacy date format &#39;MM/dd/yyyy&#39; instead of the W3C format when reading dates on\nCSV files.\nDefaults to false.\n</p><p>\n&#64;since 10.3\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.csv/org.nuxeo.ecm.csv.core/org.nuxeo.ecm.csv.core.properties/Contributions/org.nuxeo.ecm.csv.core.properties--configuration",
              "id": "org.nuxeo.ecm.csv.core.properties--configuration",
              "registrationOrder": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n\n    <documentation>\n      Property that enables the old legacy date format 'MM/dd/yyyy' instead of the W3C format when reading dates on\n      CSV files.\n      Defaults to false.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.csv.import.legacyDateFormat\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.csv/org.nuxeo.ecm.csv.core/org.nuxeo.ecm.csv.core.properties",
          "name": "org.nuxeo.ecm.csv.core.properties",
          "requirements": [],
          "resolutionOrder": 171,
          "services": [],
          "startOrder": 183,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.csv.core.properties\" version=\"1.0\">\n\n  <extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n\n    <documentation>\n      Property that enables the old legacy date format 'MM/dd/yyyy' instead of the W3C format when reading dates on\n      CSV files.\n      Defaults to false.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.csv.import.legacyDateFormat\">false</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/csv-properties-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-csv-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.csv",
      "hierarchyPath": "/grp:org.nuxeo.ecm.csv/org.nuxeo.ecm.csv.core",
      "id": "org.nuxeo.ecm.csv.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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: Nuxeo CSV\r\nBundle-SymbolicName: org.nuxeo.ecm.csv.core;singleton=true\r\nNuxeo-Component: OSGI-INF/csv-workmanager-contrib.xml,OSGI-INF/csv-impor\r\n ter-service.xml,OSGI-INF/csv-operation-contrib.xml,OSGI-INF/csv-propert\r\n ies-contrib.xml\r\nImport-Package: org.nuxeo.ecm.core,org.nuxeo.common,org.nuxeo.runtime,or\r\n g.apache.commons.io,org.apache.commons.csv,org.nuxeo.ecm.platform.userm\r\n anager,org.nuxeo.ecm.automation,org.nuxeo.ecm.platform.ec.notification,\r\n org.nuxeo.ecm.platform.url\r\n\r\n",
      "maxResolutionOrder": 171,
      "minResolutionOrder": 168,
      "packages": [
        "nuxeo-csv"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-retention-web",
      "artifactVersion": "2023.3.6",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "nuxeo-retention-web",
          "org.nuxeo.retention.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.retention",
        "id": "grp:org.nuxeo.retention",
        "name": "org.nuxeo.retention",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=nuxeo%2Fnuxeo-retention%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2023/)\n\n# Nuxeo Retention\n\nThe Nuxeo Retention addon adds the capability to create and attach retention rules to documents in order to perform advanced record management\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-retention-management/).\n\n## Context\nNuxeo Retention is an addon that can be plugged to Nuxeo. \n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo-lts) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Retention pipeline\n- **nuxeo-retention**: Backend contribution for Nuxeo Platform\n- **nuxeo-retention-package**: Builder for [nuxeo-retention](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-retention) marketplace package. This package will install all the necessary mechanisms to integrate Retention capabilities into Nuxeo\n- **nuxeo-retention-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n### Frontend Contribution\n\n`nuxeo-retention-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `v14`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Retention UI, it is assumed that there is a Nuxeo server running with Nuxeo Retention package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Retention integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/) for each maintenance branch and for each opened PR. \n\nThe following features are available:\n- Each PR merge to _lts-2021_/_lts-2023_ branch will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Retention manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).",
            "digest": "34dbcd043cd41c527a2929521f1fa815",
            "encoding": "UTF-8",
            "length": 6308,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "nuxeo-retention-web",
      "components": [],
      "fileName": "nuxeo-retention-web-2023.3.6.jar",
      "groupId": "org.nuxeo.retention",
      "hierarchyPath": "/grp:org.nuxeo.retention/nuxeo-retention-web",
      "id": "nuxeo-retention-web",
      "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-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: nuxeo-retention-web\r\nBundle-SymbolicName: nuxeo-retention-web;singleton=true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [
        "nuxeo-retention"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=nuxeo%2Fnuxeo-retention%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2023/)\n\n# Nuxeo Retention\n\nThe Nuxeo Retention addon adds the capability to create and attach retention rules to documents in order to perform advanced record management\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-retention-management/).\n\n## Context\nNuxeo Retention is an addon that can be plugged to Nuxeo. \n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo-lts) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Retention pipeline\n- **nuxeo-retention**: Backend contribution for Nuxeo Platform\n- **nuxeo-retention-package**: Builder for [nuxeo-retention](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-retention) marketplace package. This package will install all the necessary mechanisms to integrate Retention capabilities into Nuxeo\n- **nuxeo-retention-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n### Frontend Contribution\n\n`nuxeo-retention-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `v14`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Retention UI, it is assumed that there is a Nuxeo server running with Nuxeo Retention package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Retention integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/) for each maintenance branch and for each opened PR. \n\nThe following features are available:\n- Each PR merge to _lts-2021_/_lts-2023_ branch will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Retention manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).",
        "digest": "34dbcd043cd41c527a2929521f1fa815",
        "encoding": "UTF-8",
        "length": 6308,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.3.6"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-login",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.login",
          "org.nuxeo.ecm.platform.login.cas2",
          "org.nuxeo.ecm.platform.login.digest",
          "org.nuxeo.ecm.platform.login.shibboleth",
          "org.nuxeo.ecm.platform.login.token",
          "org.nuxeo.ecm.platform.login.token.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login",
        "id": "grp:org.nuxeo.ecm.platform.login",
        "name": "org.nuxeo.ecm.platform.login",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.login",
      "components": [],
      "fileName": "nuxeo-platform-login-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login",
      "id": "org.nuxeo.ecm.platform.login",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.login\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: runtime\r\nBundle-Localization: plugin\r\nBundle-Name: Nuxeo Login Module\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nImport-Package: javax.annotation;version=\"1.0\",javax.security.auth,javax\r\n .security.auth.callback,javax.security.auth.login,javax.security.auth.s\r\n pi,org.apache.commons.logging,org.nuxeo.common.xmap.annotation,org.nuxe\r\n o.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.cor\r\n e.api.security,org.nuxeo.ecm.directory;api=split,org.nuxeo.ecm.platform\r\n .api.login,org.nuxeo.ecm.platform.usermanager,org.nuxeo.runtime,org.nux\r\n eo.runtime.api,org.nuxeo.runtime.api.login,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.login\r\nEclipse-RegisterBuddy: org.nuxeo.runtime\r\nEclipse-BuddyPolicy: registered\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-localconf-simple",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.localconf",
          "org.nuxeo.ecm.localconf.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.localconf",
        "id": "grp:org.nuxeo.ecm.localconf",
        "name": "org.nuxeo.ecm.localconf",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.localconf",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.simple/Contributions/org.nuxeo.ecm.localconf.simple--schema",
              "id": "org.nuxeo.ecm.localconf.simple--schema",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <schema name=\"simpleconfiguration\" prefix=\"sconf\" src=\"schemas/simpleconfiguration.xsd\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.simple/Contributions/org.nuxeo.ecm.localconf.simple--doctype",
              "id": "org.nuxeo.ecm.localconf.simple--doctype",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <!-- facet to be used on documents handling simple configuration\n      (list of parameters key -> value) -->\n    <facet name=\"SimpleConfiguration\">\n      <schema name=\"simpleconfiguration\"/>\n    </facet>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.simple/Contributions/org.nuxeo.ecm.localconf.simple--adapters",
              "id": "org.nuxeo.ecm.localconf.simple--adapters",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n\n    <adapter class=\"org.nuxeo.ecm.localconf.SimpleConfiguration\" factory=\"org.nuxeo.ecm.localconf.SimpleConfigurationFactory\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.simple",
          "name": "org.nuxeo.ecm.localconf.simple",
          "requirements": [],
          "resolutionOrder": 232,
          "services": [],
          "startOrder": 228,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.localconf.simple\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"schema\">\n\n    <schema name=\"simpleconfiguration\" src=\"schemas/simpleconfiguration.xsd\" prefix=\"sconf\"/>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"doctype\">\n\n    <!-- facet to be used on documents handling simple configuration\n      (list of parameters key -> value) -->\n    <facet name=\"SimpleConfiguration\">\n      <schema name=\"simpleconfiguration\" />\n    </facet>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\" point=\"adapters\">\n\n    <adapter class=\"org.nuxeo.ecm.localconf.SimpleConfiguration\"\n      factory=\"org.nuxeo.ecm.localconf.SimpleConfigurationFactory\"/>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/simple-local-configuration.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.operations/Contributions/org.nuxeo.ecm.localconf.operations--operations",
              "id": "org.nuxeo.ecm.localconf.operations--operations",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <operation class=\"org.nuxeo.ecm.localconf.SetSimpleConfParamVar\"/>\n    <operation class=\"org.nuxeo.ecm.localconf.PutSimpleConfParam\"/>\n    <operation class=\"org.nuxeo.ecm.localconf.PutSimpleConfParams\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.operations",
          "name": "org.nuxeo.ecm.localconf.operations",
          "requirements": [],
          "resolutionOrder": 233,
          "services": [],
          "startOrder": 227,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.localconf.operations\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n\n    <operation\n      class=\"org.nuxeo.ecm.localconf.SetSimpleConfParamVar\" />\n    <operation\n      class=\"org.nuxeo.ecm.localconf.PutSimpleConfParam\" />\n    <operation\n      class=\"org.nuxeo.ecm.localconf.PutSimpleConfParams\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-localconf-simple-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.localconf",
      "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf",
      "id": "org.nuxeo.ecm.localconf",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Platform Local Configuration Simple\r\nBundle-SymbolicName: org.nuxeo.ecm.localconf;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/simple-local-configuration.xml,OSGI-INF/operat\r\n ions-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 233,
      "minResolutionOrder": 232,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-automation-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.automation.core",
          "org.nuxeo.ecm.automation.features",
          "org.nuxeo.ecm.automation.io",
          "org.nuxeo.ecm.automation.jsf",
          "org.nuxeo.ecm.automation.scripting",
          "org.nuxeo.ecm.automation.server"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.automation",
        "id": "grp:org.nuxeo.ecm.automation",
        "name": "org.nuxeo.ecm.automation",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.automation.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.EventService--listeners",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.automation.core.impl.ReloadListener/Contributions/org.nuxeo.ecm.automation.core.impl.ReloadListener--listeners",
              "id": "org.nuxeo.ecm.automation.core.impl.ReloadListener--listeners",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.EventService",
                "name": "org.nuxeo.runtime.EventService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listeners\" target=\"org.nuxeo.runtime.EventService\">\n        <listener class=\"org.nuxeo.ecm.automation.core.impl.ReloadListener\">\n            <topic>org.nuxeo.runtime.reload</topic>\n        </listener>\n    </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.automation.core.impl.ReloadListener",
          "name": "org.nuxeo.ecm.automation.core.impl.ReloadListener",
          "requirements": [],
          "resolutionOrder": 57,
          "services": [],
          "startOrder": 84,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.automation.core.impl.ReloadListener\">\n\n    <extension target=\"org.nuxeo.runtime.EventService\" point=\"listeners\">\n        <listener class=\"org.nuxeo.ecm.automation.core.impl.ReloadListener\">\n            <topic>org.nuxeo.runtime.reload</topic>\n        </listener>\n    </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/reload-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "@author Guillaume Renard (grenard@nuxeo.com)\n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.automation.coreContrib/Contributions/org.nuxeo.ecm.core.automation.coreContrib--operations",
              "id": "org.nuxeo.ecm.core.automation.coreContrib--operations",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <!-- register built-in operations -->\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.FetchContextDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.FetchContextBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.SetVar\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PushDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PushDocumentList\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PopDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PopDocumentList\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.SetInputAsVar\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreDocumentInput\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreDocumentsInput\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreBlobInput\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreBlobsInput\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RunScript\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreDocumentInputFromScript\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreDocumentsInputFromScript\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreBlobInputFromScript\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreBlobsInputFromScript\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.execution.RunOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.execution.RunOperationOnList\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.execution.RunInNewTransaction\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.execution.RunDocumentChain\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.execution.RunFileChain\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.CopyDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.CreateDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.CreateVersion\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.CheckInDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.CheckOutDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RestoreVersion\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.DeleteDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.EmptyTrash\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.TrashDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.UntrashDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.FetchDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.LockDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.FetchByProperty\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.FilterDocuments\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.UnlockDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.GetDocumentChildren\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.GetDocumentChild\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.GetDocumentParent\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.GetLastDocumentVersion\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.GetDocumentVersions\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.MoveDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.ReloadDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.SaveDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.execution.SaveSession\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.SetDocumentLifeCycle\">\n      <widgets>\n        <widget name=\"value\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">Transition</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">lifecycle</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>value</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.SetDocumentACE\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.AddPermission\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.ReplacePermission\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RemovePermission\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.BlockPermissionInheritance\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.UnblockPermissionInheritance\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveDocumentACL\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.AddFacet\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveFacet\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.AddItemToListProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveItemFromListProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.CopySchema\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.ResetSchema\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.SetDocumentProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveProxies\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.UpdateDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.OrderDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.PublishDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.MultiPublishDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.GetDocumentBlob\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.GetDocumentBlobs\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.GetAllDocumentBlobs\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.SetDocumentBlob\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.BulkDownload\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.PostBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.BlobToPDF\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.ConcatenatePDFs\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.ConvertBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.RunConverter\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.BlobToFile\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.CreateBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.CreateZip\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.AttachBlob\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.SetBlobFileName\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveDocumentBlob\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PushBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PushBlobList\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PopBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PopBlobList\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PullDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PullDocumentList\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PullBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PullBlobList\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.events.operations.FireEvent\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RunInputScript\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.rendering.operations.RenderDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.rendering.operations.RenderDocumentFeed\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.login.LoginAs\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.login.Logout\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.LogOperation\"/>\n\n    <!-- From presales toolkit -->\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.AddEntryToMultiValuedProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.CreateProxyLive\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.GetLiveDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveEntryOfMultiValuedProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n\n    <!-- Business Operations -->\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.business.BusinessCreateOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.business.BusinessUpdateOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.business.BusinessFetchOperation\"/>\n\n    <!-- Trace related operations -->\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.traces.AutomationTraceGetOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.traces.AutomationTraceToggleOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.traces.JsonStackToggleDisplayOperation\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.automation.coreContrib",
          "name": "org.nuxeo.ecm.core.automation.coreContrib",
          "requirements": [],
          "resolutionOrder": 58,
          "services": [],
          "startOrder": 120,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.automation.coreContrib\" version=\"1.0\">\n\n  <documentation>@author Guillaume Renard (grenard@nuxeo.com)</documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n             point=\"operations\">\n\n    <!-- register built-in operations -->\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.FetchContextDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.FetchContextBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.SetVar\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PushDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PushDocumentList\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PopDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PopDocumentList\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.SetInputAsVar\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreDocumentInput\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreDocumentsInput\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreBlobInput\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreBlobsInput\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RunScript\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RestoreDocumentInputFromScript\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.RestoreDocumentsInputFromScript\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.RestoreBlobInputFromScript\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.RestoreBlobsInputFromScript\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.execution.RunOperation\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.execution.RunOperationOnList\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.execution.RunInNewTransaction\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.execution.RunDocumentChain\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.execution.RunFileChain\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.CopyDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.CreateDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.CreateVersion\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.CheckInDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.CheckOutDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RestoreVersion\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.DeleteDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.EmptyTrash\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.TrashDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.UntrashDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.FetchDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.LockDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.FetchByProperty\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.FilterDocuments\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.UnlockDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.GetDocumentChildren\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.GetDocumentChild\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.GetDocumentParent\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.GetLastDocumentVersion\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.GetDocumentVersions\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.MoveDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.ReloadDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.SaveDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.execution.SaveSession\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.SetDocumentLifeCycle\">\n      <widgets>\n        <widget name=\"value\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">Transition</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">lifecycle</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>value</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.SetDocumentACE\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.AddPermission\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.ReplacePermission\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RemovePermission\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.BlockPermissionInheritance\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.UnblockPermissionInheritance\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveDocumentACL\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.AddFacet\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveFacet\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.AddItemToListProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveItemFromListProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.CopySchema\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.ResetSchema\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.SetDocumentProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveProxies\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.UpdateDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.OrderDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.PublishDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.MultiPublishDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.GetDocumentBlob\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.GetDocumentBlobs\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.blob.GetAllDocumentBlobs\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.SetDocumentBlob\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.BulkDownload\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.PostBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.BlobToPDF\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.ConcatenatePDFs\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.ConvertBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.RunConverter\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.BlobToFile\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.CreateBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.CreateZip\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.AttachBlob\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.SetBlobFileName\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveDocumentBlob\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PushBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PushBlobList\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PopBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PopBlobList\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PullDocument\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PullDocumentList\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PullBlob\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.stack.PullBlobList\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.events.operations.FireEvent\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.RunInputScript\"/>\n\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.rendering.operations.RenderDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.rendering.operations.RenderDocumentFeed\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.login.LoginAs\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.login.Logout\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.LogOperation\"/>\n\n    <!-- From presales toolkit -->\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.AddEntryToMultiValuedProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.CreateProxyLive\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.GetLiveDocument\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveEntryOfMultiValuedProperty\">\n      <widgets>\n        <widget name=\"xpath\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">XPath</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">xpath</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>xpath</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n\n    <!-- Business Operations -->\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.business.BusinessCreateOperation\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.business.BusinessUpdateOperation\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.business.BusinessFetchOperation\"/>\n\n    <!-- Trace related operations -->\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.traces.AutomationTraceGetOperation\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.traces.AutomationTraceToggleOperation\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.traces.JsonStackToggleDisplayOperation\"/>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      This contribution is the default contribution for automation properties.\n\n      Here are more details about some of them:\n      <ul>\n    <li>\n        <strong>nuxeo.automation.properties.value.trim</strong>: properties are expected to be of the form \"key=value\". You may wish to trim the potential spaces around value (e.g.: \"key = value\", will result in \"value\" and not \" value\").\n        </li>\n    <li>\n        <strong>nuxeo.automation.export.aliases</strong>: if true, add an operation documentation for each alias of a given operation.\n          Mainly to be backward compatible with old Java Automation client.\n        </li>\n    <li>\n        <strong>nuxeo.automation.allowVirtualUser</strong>: define whether virtual user (non-existent user) is allowed\n          in Nuxeo automation. If allowed, Nuxeo server will not check the user existence during automation execution.\n          Set this property to true if you use Nuxeo computed user or computed group.\n        </li>\n</ul>\n\n\n      @since 8.2\n    \n",
              "documentationHtml": "<p>\nThis contribution is the default contribution for automation properties.\n</p><p>\nHere are more details about some of them:\n</p><ul><li>\n<strong>nuxeo.automation.properties.value.trim</strong>: properties are expected to be of the form &#34;key&#61;value&#34;. You may wish to trim the potential spaces around value (e.g.: &#34;key &#61; value&#34;, will result in &#34;value&#34; and not &#34; value&#34;).\n</li><li>\n<strong>nuxeo.automation.export.aliases</strong>: if true, add an operation documentation for each alias of a given operation.\nMainly to be backward compatible with old Java Automation client.\n</li><li>\n<strong>nuxeo.automation.allowVirtualUser</strong>: define whether virtual user (non-existent user) is allowed\nin Nuxeo automation. If allowed, Nuxeo server will not check the user existence during automation execution.\nSet this property to true if you use Nuxeo computed user or computed group.\n</li></ul>\n<p>\n&#64;since 8.2\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.automation.core.properties/Contributions/org.nuxeo.ecm.core.automation.core.properties--configuration",
              "id": "org.nuxeo.ecm.core.automation.core.properties--configuration",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n\n    <documentation>\n      This contribution is the default contribution for automation properties.\n\n      Here are more details about some of them:\n      <ul>\n        <li>\n          <strong>nuxeo.automation.properties.value.trim</strong>: properties are expected to be of the form \"key=value\". You may wish to trim the potential spaces around value (e.g.: \"key = value\", will result in \"value\" and not \" value\").\n        </li>\n        <li>\n          <strong>nuxeo.automation.export.aliases</strong>: if true, add an operation documentation for each alias of a given operation.\n          Mainly to be backward compatible with old Java Automation client.\n        </li>\n        <li>\n          <strong>nuxeo.automation.allowVirtualUser</strong>: define whether virtual user (non-existent user) is allowed\n          in Nuxeo automation. If allowed, Nuxeo server will not check the user existence during automation execution.\n          Set this property to true if you use Nuxeo computed user or computed group.\n        </li>\n      </ul>\n\n      @since 8.2\n    </documentation>\n\n    <property name=\"nuxeo.automation.properties.value.trim\">false</property>\n\n    <property name=\"nuxeo.automation.export.aliases\">false</property>\n\n    <property name=\"nuxeo.automation.allowVirtualUser\">false</property>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.automation.core.properties",
          "name": "org.nuxeo.ecm.core.automation.core.properties",
          "requirements": [],
          "resolutionOrder": 59,
          "services": [],
          "startOrder": 119,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.automation.core.properties\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n\n    <documentation>\n      This contribution is the default contribution for automation properties.\n\n      Here are more details about some of them:\n      <ul>\n        <li>\n          <strong>nuxeo.automation.properties.value.trim</strong>: properties are expected to be of the form \"key=value\". You may wish to trim the potential spaces around value (e.g.: \"key = value\", will result in \"value\" and not \" value\").\n        </li>\n        <li>\n          <strong>nuxeo.automation.export.aliases</strong>: if true, add an operation documentation for each alias of a given operation.\n          Mainly to be backward compatible with old Java Automation client.\n        </li>\n        <li>\n          <strong>nuxeo.automation.allowVirtualUser</strong>: define whether virtual user (non-existent user) is allowed\n          in Nuxeo automation. If allowed, Nuxeo server will not check the user existence during automation execution.\n          Set this property to true if you use Nuxeo computed user or computed group.\n        </li>\n      </ul>\n\n      @since 8.2\n    </documentation>\n\n    <property name=\"nuxeo.automation.properties.value.trim\">false</property>\n\n    <property name=\"nuxeo.automation.export.aliases\">false</property>\n\n    <property name=\"nuxeo.automation.allowVirtualUser\">false</property>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/properties-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Core IO registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO registered marshallers set.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.automation.marshallers/Contributions/org.nuxeo.ecm.core.automation.marshallers--marshallers",
              "id": "org.nuxeo.ecm.core.automation.marshallers--marshallers",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- blob reader -->\n    <register class=\"org.nuxeo.ecm.automation.core.io.BlobJsonReader\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.automation.marshallers",
          "name": "org.nuxeo.ecm.core.automation.marshallers",
          "requirements": [],
          "resolutionOrder": 60,
          "services": [],
          "startOrder": 124,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.automation.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    <!-- blob reader -->\n    <register class=\"org.nuxeo.ecm.automation.core.io.BlobJsonReader\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.automation.core.impl.workmanager/Contributions/org.nuxeo.ecm.automation.core.impl.workmanager--queues",
              "id": "org.nuxeo.ecm.automation.core.impl.workmanager--queues",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"blobs\">\n      <maxThreads>2</maxThreads>\n      <category>blobListZip</category>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.automation.core.impl.workmanager",
          "name": "org.nuxeo.ecm.automation.core.impl.workmanager",
          "requirements": [],
          "resolutionOrder": 61,
          "services": [],
          "startOrder": 85,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.automation.core.impl.workmanager\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"blobs\">\n      <maxThreads>2</maxThreads>\n      <category>blobListZip</category>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/workmanager-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.automation.core.AutomationComponent",
          "declaredStartOrder": null,
          "documentation": "@author Bogdan Stefanescu (bs@nuxeo.com)\n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "descriptors": [
                "org.nuxeo.ecm.automation.core.OperationContribution"
              ],
              "documentation": "Operation registration\n",
              "documentationHtml": "<p>\nOperation registration</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/ExtensionPoints/org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "id": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "label": "operations (org.nuxeo.ecm.core.operation.OperationServiceComponent)",
              "name": "operations",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "descriptors": [
                "org.nuxeo.ecm.automation.core.TypeAdapterContribution"
              ],
              "documentation": "Type adapter registration\n",
              "documentationHtml": "<p>\nType adapter registration</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/ExtensionPoints/org.nuxeo.ecm.core.operation.OperationServiceComponent--adapters",
              "id": "org.nuxeo.ecm.core.operation.OperationServiceComponent--adapters",
              "label": "adapters (org.nuxeo.ecm.core.operation.OperationServiceComponent)",
              "name": "adapters",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "descriptors": [
                "org.nuxeo.ecm.automation.core.OperationChainContribution"
              ],
              "documentation": "Operation Chain registration\n",
              "documentationHtml": "<p>\nOperation Chain registration</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/ExtensionPoints/org.nuxeo.ecm.core.operation.OperationServiceComponent--chains",
              "id": "org.nuxeo.ecm.core.operation.OperationServiceComponent--chains",
              "label": "chains (org.nuxeo.ecm.core.operation.OperationServiceComponent)",
              "name": "chains",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "descriptors": [
                "org.nuxeo.ecm.automation.core.ChainExceptionDescriptor"
              ],
              "documentation": "\n      @since 5.7.3\n      @author Vladimir Pasquier (vpasquier@nuxeo.com)\n\n      Chain Exception registration.\n      Chain exception provides mean, during an Automation execution, to catch for a given chain, exception and to run\n      specific chain/operation. Filter condition (filterException extension point), order (priority) and rollback\n      options are available.\n\n      Example of chain exception:\n\n      <code>\n    <catchChain id=\"catchChainA\" onChainId=\"contributedchain\">\n        <run chainId=\"chainException\" filterId=\"filterA\" priority=\"0\" rollBack=\"false\"/>\n        <run chainId=\"chainException\" filterId=\"filterA\" priority=\"0\" rollBack=\"false\"/>\n        <run chainId=\"chainException\" filterId=\"filterB\" priority=\"10\" rollBack=\"true\"/>\n    </catchChain>\n</code>\n",
              "documentationHtml": "<p>\n&#64;since 5.7.3\n</p><p>\nChain Exception registration.\nChain exception provides mean, during an Automation execution, to catch for a given chain, exception and to run\nspecific chain/operation. Filter condition (filterException extension point), order (priority) and rollback\noptions are available.\n</p><p>\nExample of chain exception:\n</p><p>\n</p><pre><code>    &lt;catchChain id&#61;&#34;catchChainA&#34; onChainId&#61;&#34;contributedchain&#34;&gt;\n        &lt;run chainId&#61;&#34;chainException&#34; filterId&#61;&#34;filterA&#34; priority&#61;&#34;0&#34; rollBack&#61;&#34;false&#34;/&gt;\n        &lt;run chainId&#61;&#34;chainException&#34; filterId&#61;&#34;filterA&#34; priority&#61;&#34;0&#34; rollBack&#61;&#34;false&#34;/&gt;\n        &lt;run chainId&#61;&#34;chainException&#34; filterId&#61;&#34;filterB&#34; priority&#61;&#34;10&#34; rollBack&#61;&#34;true&#34;/&gt;\n    &lt;/catchChain&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/ExtensionPoints/org.nuxeo.ecm.core.operation.OperationServiceComponent--chainException",
              "id": "org.nuxeo.ecm.core.operation.OperationServiceComponent--chainException",
              "label": "chainException (org.nuxeo.ecm.core.operation.OperationServiceComponent)",
              "name": "chainException",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "descriptors": [
                "org.nuxeo.ecm.automation.core.AutomationFilterDescriptor"
              ],
              "documentation": "\n      @since 5.7.3\n      @author Vladimir Pasquier (vpasquier@nuxeo.com)\n\n      Automation Filter registration. See one usage of the filter into Chain Exception extension point: chainException.\n\n      Example of Automation filter:\n\n      <code>\n    <filter id=\"filterA\">expr:@{Document['dc:title']=='file'}</filter>\n    <filter id=\"filterB\">expr:@{Document['dc:title']=='document'}</filter>\n</code>\n",
              "documentationHtml": "<p>\n&#64;since 5.7.3\n</p><p>\nAutomation Filter registration. See one usage of the filter into Chain Exception extension point: chainException.\n</p><p>\nExample of Automation filter:\n</p><p>\n</p><pre><code>    &lt;filter id&#61;&#34;filterA&#34;&gt;expr:&#64;{Document[&#39;dc:title&#39;]&#61;&#61;&#39;file&#39;}&lt;/filter&gt;\n    &lt;filter id&#61;&#34;filterB&#34;&gt;expr:&#64;{Document[&#39;dc:title&#39;]&#61;&#61;&#39;document&#39;}&lt;/filter&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/ExtensionPoints/org.nuxeo.ecm.core.operation.OperationServiceComponent--automationFilter",
              "id": "org.nuxeo.ecm.core.operation.OperationServiceComponent--automationFilter",
              "label": "automationFilter (org.nuxeo.ecm.core.operation.OperationServiceComponent)",
              "name": "automationFilter",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "descriptors": [
                "org.nuxeo.ecm.automation.core.events.EventHandler"
              ],
              "documentation": "Core Event Handlers bound to operations\n",
              "documentationHtml": "<p>\nCore Event Handlers bound to operations</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/ExtensionPoints/org.nuxeo.ecm.core.operation.OperationServiceComponent--event-handlers",
              "id": "org.nuxeo.ecm.core.operation.OperationServiceComponent--event-handlers",
              "label": "event-handlers (org.nuxeo.ecm.core.operation.OperationServiceComponent)",
              "name": "event-handlers",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "descriptors": [
                "org.nuxeo.ecm.automation.context.ContextHelperDescriptor"
              ],
              "documentation": "\n      @since 7.3\n      @author Vladimir Pasquier (vpasquier@nuxeo.com)\n      Context helper functions contribution.\n      Example:\n      <code>\n    <contextHelper\n        class=\"org.nuxeo.ecm.automation.features.PlatformFunctions\" id=\"platformFunctions\"/>\n</code>\n",
              "documentationHtml": "<p>\n&#64;since 7.3\n</p><p>\nContext helper functions contribution.\nExample:\n</p><p></p><pre><code>    &lt;contextHelper\n        class&#61;&#34;org.nuxeo.ecm.automation.features.PlatformFunctions&#34; id&#61;&#34;platformFunctions&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/ExtensionPoints/org.nuxeo.ecm.core.operation.OperationServiceComponent--contextHelpers",
              "id": "org.nuxeo.ecm.core.operation.OperationServiceComponent--contextHelpers",
              "label": "contextHelpers (org.nuxeo.ecm.core.operation.OperationServiceComponent)",
              "name": "contextHelpers",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/Contributions/org.nuxeo.ecm.core.operation.OperationServiceComponent--adapters",
              "id": "org.nuxeo.ecm.core.operation.OperationServiceComponent--adapters",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <adapter accept=\"java.lang.String\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToDocRef\" produce=\"org.nuxeo.ecm.core.api.DocumentRef\"/>\n    <adapter accept=\"java.lang.String\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToDocModel\" produce=\"org.nuxeo.ecm.core.api.DocumentModel\"/>\n    <adapter accept=\"org.nuxeo.ecm.core.api.DocumentModel\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocModelToDocRef\" produce=\"org.nuxeo.ecm.core.api.DocumentRef\"/>\n    <adapter accept=\"org.nuxeo.ecm.core.api.DocumentRef\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocRefToDocModel\" produce=\"org.nuxeo.ecm.core.api.DocumentModel\"/>\n    <adapter accept=\"org.nuxeo.ecm.core.api.DocumentModelList\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocModelListToDocRefList\" produce=\"org.nuxeo.ecm.core.api.DocumentRefList\"/>\n    <adapter accept=\"org.nuxeo.ecm.core.api.DocumentModel\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocModelToDocRefList\" produce=\"org.nuxeo.ecm.core.api.DocumentRefList\"/>\n    <adapter accept=\"org.nuxeo.ecm.core.api.DocumentModel\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocModelToDocModelList\" produce=\"org.nuxeo.ecm.core.api.DocumentModelList\"/>\n    <adapter accept=\"org.nuxeo.ecm.core.api.DocumentRefList\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocRefListToDocModelList\" produce=\"org.nuxeo.ecm.core.api.DocumentModelList\"/>\n    <adapter accept=\"org.nuxeo.ecm.core.api.DocumentRef\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocRefToDocModelList\" produce=\"org.nuxeo.ecm.core.api.DocumentModelList\"/>\n    <adapter accept=\"org.nuxeo.ecm.core.api.DocumentRef\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocRefToDocRefList\" produce=\"org.nuxeo.ecm.core.api.DocumentRefList\"/>\n    <adapter accept=\"java.lang.String\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToProperties\" produce=\"org.nuxeo.ecm.automation.core.util.Properties\"/>\n    <adapter accept=\"com.fasterxml.jackson.databind.JsonNode\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.JsonNodeToProperties\" produce=\"org.nuxeo.ecm.automation.core.util.Properties\"/>\n    <adapter accept=\"java.lang.String\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToURL\" produce=\"java.net.URL\"/>\n    <adapter accept=\"java.lang.String\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToDate\" produce=\"java.util.Date\"/>\n    <adapter accept=\"java.lang.String\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToCalendar\" produce=\"java.util.Calendar\"/>\n    <adapter accept=\"java.util.Calendar\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.CalendarToDate\" produce=\"java.util.Date\"/>\n    <adapter accept=\"java.lang.String\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToList\" produce=\"org.nuxeo.ecm.automation.core.util.StringList\"/>\n    <adapter accept=\"java.lang.String\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToBoolean\" produce=\"java.lang.Boolean\"/>\n    <adapter accept=\"java.lang.String\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToInteger\" produce=\"java.lang.Integer\"/>\n    <adapter accept=\"java.lang.String\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToLong\" produce=\"java.lang.Long\"/>\n    <adapter accept=\"java.lang.Integer\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.IntegerToLong\" produce=\"java.lang.Long\"/>\n    <adapter accept=\"java.lang.Long\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.LongToInteger\" produce=\"java.lang.Integer\"/>\n    <adapter accept=\"[Ljava.lang.String;\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.ArrayStringToList\" produce=\"org.nuxeo.ecm.automation.core.util.StringList\"/>\n    <adapter accept=\"java.util.Collection\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.CollectionToStringList\" produce=\"org.nuxeo.ecm.automation.core.util.StringList\"/>\n    <adapter accept=\"com.fasterxml.jackson.databind.node.ObjectNode\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.ObjectNodeToMap\" produce=\"java.util.Map\"/>\n    <adapter accept=\"com.fasterxml.jackson.databind.node.ArrayNode\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.ArrayNodeToList\" produce=\"java.util.List\"/>\n    <adapter accept=\"[Ljava.lang.String;\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.ArrayStringToDocModelList\" produce=\"org.nuxeo.ecm.core.api.DocumentModelList\"/>\n    <adapter accept=\"java.lang.String\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToDocModelList\" produce=\"org.nuxeo.ecm.core.api.DocumentModelList\"/>\n    <adapter accept=\"java.util.Collection\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.CollectionToDocModelList\" produce=\"org.nuxeo.ecm.core.api.DocumentModelList\"/>\n    <adapter accept=\"java.util.Collection\" class=\"org.nuxeo.ecm.automation.core.impl.adapters.CollectionToBlobList\" produce=\"org.nuxeo.ecm.automation.core.util.BlobList\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/Contributions/org.nuxeo.ecm.core.operation.OperationServiceComponent--listener",
              "id": "org.nuxeo.ecm.core.operation.OperationServiceComponent--listener",
              "registrationOrder": 47,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.automation.core.events.OperationEventListener\" name=\"opchainlistener\" postCommit=\"false\" priority=\"200\">\n    </listener>\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.automation.core.events.PostCommitOperationEventListener\" name=\"opchainpclistener\" postCommit=\"true\" priority=\"200\">\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent",
          "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
          "requirements": [
            "org.nuxeo.runtime.management.ServerLocator"
          ],
          "resolutionOrder": 805,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/Services/org.nuxeo.ecm.automation.AutomationService",
              "id": "org.nuxeo.ecm.automation.AutomationService",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/Services/org.nuxeo.ecm.automation.AutomationAdmin",
              "id": "org.nuxeo.ecm.automation.AutomationAdmin",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/Services/org.nuxeo.ecm.automation.core.events.EventHandlerRegistry",
              "id": "org.nuxeo.ecm.automation.core.events.EventHandlerRegistry",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/Services/org.nuxeo.ecm.automation.core.trace.TracerFactory",
              "id": "org.nuxeo.ecm.automation.core.trace.TracerFactory",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core/org.nuxeo.ecm.core.operation.OperationServiceComponent/Services/org.nuxeo.ecm.automation.context.ContextService",
              "id": "org.nuxeo.ecm.automation.context.ContextService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 813,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n  version=\"1.0\">\n  <!-- TODO: cannot rename this component since studio is using the old name - fix this\n    <component name=\"org.nuxeo.ecm.automation.core.AutomationComponent\" version=\"1.0\">\n  -->\n\n  <documentation>@author Bogdan Stefanescu (bs@nuxeo.com)</documentation>\n\n  <implementation class=\"org.nuxeo.ecm.automation.core.AutomationComponent\" />\n\n  <require>org.nuxeo.runtime.management.ServerLocator</require>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.automation.AutomationService\" />\n    <provide interface=\"org.nuxeo.ecm.automation.AutomationAdmin\" />\n    <provide\n            interface=\"org.nuxeo.ecm.automation.core.events.EventHandlerRegistry\" />\n    <provide interface=\"org.nuxeo.ecm.automation.core.trace.TracerFactory\" />\n    <provide interface=\"org.nuxeo.ecm.automation.context.ContextService\" />\n  </service>\n\n  <extension-point name=\"operations\">\n    <documentation>Operation registration</documentation>\n    <object class=\"org.nuxeo.ecm.automation.core.OperationContribution\" />\n  </extension-point>\n\n  <extension-point name=\"adapters\">\n    <documentation>Type adapter registration</documentation>\n    <object class=\"org.nuxeo.ecm.automation.core.TypeAdapterContribution\" />\n  </extension-point>\n\n  <extension-point name=\"chains\">\n    <documentation>Operation Chain registration</documentation>\n    <object class=\"org.nuxeo.ecm.automation.core.OperationChainContribution\" />\n  </extension-point>\n\n  <extension-point name=\"chainException\">\n    <documentation>\n      @since 5.7.3\n      @author Vladimir Pasquier (vpasquier@nuxeo.com)\n\n      Chain Exception registration.\n      Chain exception provides mean, during an Automation execution, to catch for a given chain, exception and to run\n      specific chain/operation. Filter condition (filterException extension point), order (priority) and rollback\n      options are available.\n\n      Example of chain exception:\n\n      <code>\n        <catchChain id=\"catchChainA\" onChainId=\"contributedchain\">\n          <run chainId=\"chainException\" priority=\"0\" rollBack=\"false\" filterId=\"filterA\"/>\n          <run chainId=\"chainException\" priority=\"0\" rollBack=\"false\" filterId=\"filterA\"/>\n          <run chainId=\"chainException\" priority=\"10\" rollBack=\"true\" filterId=\"filterB\"/>\n        </catchChain>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.automation.core.ChainExceptionDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"automationFilter\">\n    <documentation>\n      @since 5.7.3\n      @author Vladimir Pasquier (vpasquier@nuxeo.com)\n\n      Automation Filter registration. See one usage of the filter into Chain Exception extension point: chainException.\n\n      Example of Automation filter:\n\n      <code>\n        <filter id=\"filterA\">expr:@{Document['dc:title']=='file'}</filter>\n        <filter id=\"filterB\">expr:@{Document['dc:title']=='document'}</filter>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.automation.core.AutomationFilterDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"event-handlers\">\n    <documentation>Core Event Handlers bound to operations</documentation>\n    <object class=\"org.nuxeo.ecm.automation.core.events.EventHandler\" />\n  </extension-point>\n\n  <extension-point name=\"contextHelpers\">\n    <documentation>\n      @since 7.3\n      @author Vladimir Pasquier (vpasquier@nuxeo.com)\n      Context helper functions contribution.\n      Example:\n      <code>\n        <contextHelper id=\"platformFunctions\" class=\"org.nuxeo.ecm.automation.features.PlatformFunctions\"/>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.automation.context.ContextHelperDescriptor\"/>\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToDocRef\"\n      accept=\"java.lang.String\" produce=\"org.nuxeo.ecm.core.api.DocumentRef\" />\n    <adapter\n      class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToDocModel\"\n      accept=\"java.lang.String\" produce=\"org.nuxeo.ecm.core.api.DocumentModel\" />\n    <adapter\n      class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocModelToDocRef\"\n      accept=\"org.nuxeo.ecm.core.api.DocumentModel\"\n      produce=\"org.nuxeo.ecm.core.api.DocumentRef\" />\n    <adapter\n      class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocRefToDocModel\"\n      accept=\"org.nuxeo.ecm.core.api.DocumentRef\"\n      produce=\"org.nuxeo.ecm.core.api.DocumentModel\" />\n    <adapter\n      class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocModelListToDocRefList\"\n      accept=\"org.nuxeo.ecm.core.api.DocumentModelList\"\n      produce=\"org.nuxeo.ecm.core.api.DocumentRefList\" />\n    <adapter\n      class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocModelToDocRefList\"\n      accept=\"org.nuxeo.ecm.core.api.DocumentModel\"\n      produce=\"org.nuxeo.ecm.core.api.DocumentRefList\" />\n    <adapter\n      class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocModelToDocModelList\"\n      accept=\"org.nuxeo.ecm.core.api.DocumentModel\"\n      produce=\"org.nuxeo.ecm.core.api.DocumentModelList\" />\n    <adapter\n      class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocRefListToDocModelList\"\n      accept=\"org.nuxeo.ecm.core.api.DocumentRefList\"\n      produce=\"org.nuxeo.ecm.core.api.DocumentModelList\" />\n    <adapter\n      class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocRefToDocModelList\"\n      accept=\"org.nuxeo.ecm.core.api.DocumentRef\"\n      produce=\"org.nuxeo.ecm.core.api.DocumentModelList\" />\n    <adapter\n      class=\"org.nuxeo.ecm.automation.core.impl.adapters.DocRefToDocRefList\"\n      accept=\"org.nuxeo.ecm.core.api.DocumentRef\"\n      produce=\"org.nuxeo.ecm.core.api.DocumentRefList\" />\n    <adapter\n      class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToProperties\"\n      accept=\"java.lang.String\"\n      produce=\"org.nuxeo.ecm.automation.core.util.Properties\" />\n    <adapter\n      class=\"org.nuxeo.ecm.automation.core.impl.adapters.JsonNodeToProperties\"\n      accept=\"com.fasterxml.jackson.databind.JsonNode\"\n      produce=\"org.nuxeo.ecm.automation.core.util.Properties\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToURL\"\n      accept=\"java.lang.String\" produce=\"java.net.URL\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToDate\"\n      accept=\"java.lang.String\" produce=\"java.util.Date\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToCalendar\"\n      accept=\"java.lang.String\" produce=\"java.util.Calendar\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.CalendarToDate\"\n      accept=\"java.util.Calendar\" produce=\"java.util.Date\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToList\"\n      accept=\"java.lang.String\"\n      produce=\"org.nuxeo.ecm.automation.core.util.StringList\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToBoolean\"\n      accept=\"java.lang.String\"\n      produce=\"java.lang.Boolean\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToInteger\"\n      accept=\"java.lang.String\"\n      produce=\"java.lang.Integer\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToLong\"\n      accept=\"java.lang.String\"\n      produce=\"java.lang.Long\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.IntegerToLong\"\n      accept=\"java.lang.Integer\"\n      produce=\"java.lang.Long\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.LongToInteger\"\n      accept=\"java.lang.Long\"\n      produce=\"java.lang.Integer\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.ArrayStringToList\"\n      accept=\"[Ljava.lang.String;\"\n      produce=\"org.nuxeo.ecm.automation.core.util.StringList\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.CollectionToStringList\"\n             accept=\"java.util.Collection\"\n             produce=\"org.nuxeo.ecm.automation.core.util.StringList\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.ObjectNodeToMap\"\n      accept=\"com.fasterxml.jackson.databind.node.ObjectNode\"\n      produce=\"java.util.Map\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.ArrayNodeToList\"\n      accept=\"com.fasterxml.jackson.databind.node.ArrayNode\"\n      produce=\"java.util.List\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.ArrayStringToDocModelList\"\n             accept=\"[Ljava.lang.String;\"\n             produce=\"org.nuxeo.ecm.core.api.DocumentModelList\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.StringToDocModelList\"\n             accept=\"java.lang.String\"\n             produce=\"org.nuxeo.ecm.core.api.DocumentModelList\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.CollectionToDocModelList\"\n             accept=\"java.util.Collection\"\n             produce=\"org.nuxeo.ecm.core.api.DocumentModelList\" />\n    <adapter class=\"org.nuxeo.ecm.automation.core.impl.adapters.CollectionToBlobList\"\n             accept=\"java.util.Collection\"\n             produce=\"org.nuxeo.ecm.automation.core.util.BlobList\" />\n  </extension>\n\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <listener name=\"opchainlistener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.automation.core.events.OperationEventListener\"\n      priority=\"200\">\n    </listener>\n\n    <listener name=\"opchainpclistener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.automation.core.events.PostCommitOperationEventListener\"\n      priority=\"200\">\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/AutomationService.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-automation-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.automation",
      "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.core",
      "id": "org.nuxeo.ecm.automation.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: 5.4.2.qualifier\r\nBundle-Name: Nuxeo Automation Core\r\nBundle-SymbolicName: org.nuxeo.ecm.automation.core;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nExport-Package: org.nuxeo.ecm.automation,org.nuxeo.ecm.automation.core,o\r\n rg.nuxeo.ecm.automation.core.annotations,org.nuxeo.ecm.automation.core.\r\n collectors,org.nuxeo.ecm.automation.core.doc,org.nuxeo.ecm.automation.c\r\n ore.events,org.nuxeo.ecm.automation.core.events.operations,org.nuxeo.ec\r\n m.automation.core.impl,org.nuxeo.ecm.automation.core.impl.adapters,org.\r\n nuxeo.ecm.automation.core.mail,org.nuxeo.ecm.automation.core.operations\r\n ,org.nuxeo.ecm.automation.core.operations.blob,org.nuxeo.ecm.automation\r\n .core.operations.document,org.nuxeo.ecm.automation.core.operations.exec\r\n ution,org.nuxeo.ecm.automation.core.operations.stack,org.nuxeo.ecm.auto\r\n mation.core.rendering,org.nuxeo.ecm.automation.core.rendering.operation\r\n s,org.nuxeo.ecm.automation.core.scripting,org.nuxeo.ecm.automation.core\r\n .util\r\nBundle-ActivationPolicy: lazy\r\nNuxeo-Component: OSGI-INF/AutomationService.xml,OSGI-INF/reload-contrib.\r\n xml,OSGI-INF/operations-contrib.xml,OSGI-INF/properties-contrib.xml,OSG\r\n I-INF/marshallers-contrib.xml,OSGI-INF/workmanager-contrib.xml\r\nImport-Package: freemarker.core,freemarker.template,groovy.lang;resoluti\r\n on:=optional,javax.mail,javax.mail.internet,net.sf.json,org.apache.comm\r\n ons.lang,org.apache.commons.logging,org.codehaus.groovy.control;resolut\r\n ion:=optional,org.codehaus.groovy.runtime;resolution:=optional,org.mvel\r\n 2,org.mvel2.templates,org.nuxeo.common,org.nuxeo.common.utils,org.nuxeo\r\n .common.xmap.annotation,org.nuxeo.ecm.core.api,org.nuxeo.ecm.core.api.b\r\n lobholder,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.core.api.impl.blob,\r\n org.nuxeo.ecm.core.api.model,org.nuxeo.ecm.core.api.model.impl,org.nuxe\r\n o.ecm.core.api.repository,org.nuxeo.ecm.core.api.security,org.nuxeo.ecm\r\n .core.api.security.impl,org.nuxeo.ecm.core.convert.api,org.nuxeo.ecm.co\r\n re.event,org.nuxeo.ecm.core.event.impl,org.nuxeo.ecm.core.schema,org.nu\r\n xeo.ecm.core.schema.types,org.nuxeo.ecm.core.schema.types.primitives,or\r\n g.nuxeo.ecm.core.schema.utils,org.nuxeo.ecm.core.versioning,org.nuxeo.e\r\n cm.platform.rendering.api,org.nuxeo.ecm.platform.rendering.fm,org.nuxeo\r\n .runtime.api,org.nuxeo.runtime.model,org.nuxeo.runtime.services.resourc\r\n e,org.nuxeo.runtime.transaction,org.osgi.framework;version=\"1.5.0\"\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\n\r\n",
      "maxResolutionOrder": 805,
      "minResolutionOrder": 57,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-relations-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.relations",
          "org.nuxeo.ecm.relations.api",
          "org.nuxeo.ecm.relations.core.listener",
          "org.nuxeo.ecm.relations.default.config",
          "org.nuxeo.ecm.relations.io",
          "org.nuxeo.ecm.relations.jena",
          "org.nuxeo.ecm.relations.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations",
        "id": "grp:org.nuxeo.ecm.relations",
        "name": "org.nuxeo.ecm.relations",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.relations",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.relations.services.RelationService",
          "declaredStartOrder": null,
          "documentation": "\n    This service allows the definition of graph types and graphs, and the\n    RelationManager interface gives access to the graphs.\n  \n",
          "documentationHtml": "<p>\nThis service allows the definition of graph types and graphs, and the\nRelationManager interface gives access to the graphs.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.relations.services.RelationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.relations.descriptors.GraphTypeDescriptor"
              ],
              "documentation": "\n      The definition of new graph types. Example:\n      <code>\n    <graphtype class=\"org.example.graph.MyGraph\" name=\"mytype\"/>\n</code>\n\n      The class can be an implementation of either\n      org.nuxeo.ecm.platform.relations.api.Graph or\n      org.nuxeo.ecm.platform.relations.api.GraphFactory.\n      <p/>\n\n      The standard graph type \"core\" is defined by default.\n    \n",
              "documentationHtml": "<p>\nThe definition of new graph types. Example:\n</p><p></p><pre><code>    &lt;graphtype class&#61;&#34;org.example.graph.MyGraph&#34; name&#61;&#34;mytype&#34;/&gt;\n</code></pre><p>\nThe class can be an implementation of either\norg.nuxeo.ecm.platform.relations.api.Graph or\norg.nuxeo.ecm.platform.relations.api.GraphFactory.\n</p><p>\nThe standard graph type &#34;core&#34; is defined by default.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations/org.nuxeo.ecm.platform.relations.services.RelationService/ExtensionPoints/org.nuxeo.ecm.platform.relations.services.RelationService--graphtypes",
              "id": "org.nuxeo.ecm.platform.relations.services.RelationService--graphtypes",
              "label": "graphtypes (org.nuxeo.ecm.platform.relations.services.RelationService)",
              "name": "graphtypes",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.relations.services.RelationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.relations.descriptors.GraphDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations/org.nuxeo.ecm.platform.relations.services.RelationService/ExtensionPoints/org.nuxeo.ecm.platform.relations.services.RelationService--graphs",
              "id": "org.nuxeo.ecm.platform.relations.services.RelationService--graphs",
              "label": "graphs (org.nuxeo.ecm.platform.relations.services.RelationService)",
              "name": "graphs",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.relations.services.RelationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.relations.descriptors.ResourceAdapterDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations/org.nuxeo.ecm.platform.relations.services.RelationService/ExtensionPoints/org.nuxeo.ecm.platform.relations.services.RelationService--resourceadapters",
              "id": "org.nuxeo.ecm.platform.relations.services.RelationService--resourceadapters",
              "label": "resourceadapters (org.nuxeo.ecm.platform.relations.services.RelationService)",
              "name": "resourceadapters",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.relations.services.RelationService--resourceadapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations/org.nuxeo.ecm.platform.relations.services.RelationService/Contributions/org.nuxeo.ecm.platform.relations.services.RelationService--resourceadapters",
              "id": "org.nuxeo.ecm.platform.relations.services.RelationService--resourceadapters",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.relations.services.RelationService",
                "name": "org.nuxeo.ecm.platform.relations.services.RelationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resourceadapters\" target=\"org.nuxeo.ecm.platform.relations.services.RelationService\">\n    <adapter class=\"org.nuxeo.ecm.platform.relations.adapters.DocumentModelResourceAdapter\" namespace=\"http://www.nuxeo.org/document/uid/\"/>\n    <!-- compat with incorrect code -->\n    <adapter class=\"org.nuxeo.ecm.platform.relations.adapters.DocumentModelResourceAdapter\" namespace=\"http://www.nuxeo.org/document/uid\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.relations.services.RelationService--graphtypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations/org.nuxeo.ecm.platform.relations.services.RelationService/Contributions/org.nuxeo.ecm.platform.relations.services.RelationService--graphtypes",
              "id": "org.nuxeo.ecm.platform.relations.services.RelationService--graphtypes",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.relations.services.RelationService",
                "name": "org.nuxeo.ecm.platform.relations.services.RelationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"graphtypes\" target=\"org.nuxeo.ecm.platform.relations.services.RelationService\">\n    <graphtype class=\"org.nuxeo.ecm.platform.relations.CoreGraphFactory\" name=\"core\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations/org.nuxeo.ecm.platform.relations.services.RelationService/Contributions/org.nuxeo.ecm.platform.relations.services.RelationService--doctype",
              "id": "org.nuxeo.ecm.platform.relations.services.RelationService--doctype",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <doctype extends=\"Relation\" name=\"DefaultRelation\">\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations/org.nuxeo.ecm.platform.relations.services.RelationService",
          "name": "org.nuxeo.ecm.platform.relations.services.RelationService",
          "requirements": [],
          "resolutionOrder": 463,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.relations.services.RelationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations/org.nuxeo.ecm.platform.relations.services.RelationService/Services/org.nuxeo.ecm.platform.relations.api.RelationManager",
              "id": "org.nuxeo.ecm.platform.relations.api.RelationManager",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.relations.services.RelationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations/org.nuxeo.ecm.platform.relations.services.RelationService/Services/org.nuxeo.ecm.platform.relations.api.DocumentRelationManager",
              "id": "org.nuxeo.ecm.platform.relations.api.DocumentRelationManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 866,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.relations.services.RelationService\">\n\n  <documentation>\n    This service allows the definition of graph types and graphs, and the\n    RelationManager interface gives access to the graphs.\n  </documentation>\n\n  <implementation\n      class=\"org.nuxeo.ecm.platform.relations.services.RelationService\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.relations.api.RelationManager\"/>\n    <provide interface=\"org.nuxeo.ecm.platform.relations.api.DocumentRelationManager\"/>\n  </service>\n\n  <extension-point name=\"graphtypes\">\n    <documentation>\n      The definition of new graph types. Example:\n      <code>\n        <graphtype name=\"mytype\" class=\"org.example.graph.MyGraph\" />\n      </code>\n      The class can be an implementation of either\n      org.nuxeo.ecm.platform.relations.api.Graph or\n      org.nuxeo.ecm.platform.relations.api.GraphFactory.\n      <p />\n      The standard graph type \"core\" is defined by default.\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.relations.descriptors.GraphTypeDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"graphs\">\n    <description>\n      The definition of new graphs. You use a graph using\n      relationService.getGraphByName(name).\n      <p />\n      Example:\n      <code>\n        <graph name=\"myrelations\" type=\"core\">\n          <option name=\"doctype\">DefaultRelation</option>\n          <namespaces>\n            <namespace name=\"dc\">http://purl.org/dc/elements/1.1/\n            </namespace>\n          </namespaces>\n        </graph>\n      </code>\n      <p />\n      The options are graph-dependent. For the \"core\" graphs, you can\n      use a \"doctype\" to specify which subtype of \"Relation\" should be\n      used to store the relations. \"DefaultRelation\" is a standard\n      relation type.\n      <p />\n      The namespaces allows you to define when a resource is returned as\n      a QNameResource.\n    </description>\n    <object\n      class=\"org.nuxeo.ecm.platform.relations.descriptors.GraphDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"resourceadapters\">\n    <description>\n      The definition of new resource adapters. Resource adapters are\n      used when calling\n      relationService.getResourceRepresentation(resource) or\n      relationService.getResource().\n      <p />\n      Example:\n      <code>\n        <adapter namespace=\"http://www.nuxeo.org/document/uid/\"\n          class=\"org.nuxeo.ecm.platform.relations.adapters.DocumentModelResourceAdapter\" />\n      </code>\n    </description>\n    <object\n      class=\"org.nuxeo.ecm.platform.relations.descriptors.ResourceAdapterDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.platform.relations.services.RelationService\"\n    point=\"resourceadapters\">\n    <adapter namespace=\"http://www.nuxeo.org/document/uid/\"\n      class=\"org.nuxeo.ecm.platform.relations.adapters.DocumentModelResourceAdapter\" />\n    <!-- compat with incorrect code -->\n    <adapter namespace=\"http://www.nuxeo.org/document/uid\"\n      class=\"org.nuxeo.ecm.platform.relations.adapters.DocumentModelResourceAdapter\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.relations.services.RelationService\"\n      point=\"graphtypes\">\n    <graphtype name=\"core\"\n      class=\"org.nuxeo.ecm.platform.relations.CoreGraphFactory\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n    <doctype name=\"DefaultRelation\" extends=\"Relation\">\n      <facet name=\"HiddenInNavigation\" />\n    </doctype>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxrelations.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-relations-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations",
      "id": "org.nuxeo.ecm.relations",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.relations.adapters,org.nuxeo.ecm.\r\n platform.relations.descriptors,org.nuxeo.ecm.platform.relations.service\r\n s\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: web,stateful\r\nBundle-Name: Nuxeo ECM Relations\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/nxrelations.xml\r\nImport-Package: javax.annotation;version=\"1.0\",org.apache.commons.loggin\r\n g,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.core;api=split,org.nux\r\n eo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.repository,org.nuxeo.e\r\n cm.directory;api=split,org.nuxeo.ecm.platform.relations.api,org.nuxeo.e\r\n cm.platform.relations.api.impl,org.nuxeo.runtime,org.nuxeo.runtime.api,\r\n org.nuxeo.runtime.model,org.osgi.framework;version=\"1.4\"\r\nBundle-SymbolicName: org.nuxeo.ecm.relations;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 463,
      "minResolutionOrder": 463,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-arender-core",
      "artifactVersion": "2023.0.5",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "com.nuxeo.ecm.annotation.arender.core",
          "com.nuxeo.ecm.annotation.arender.restapi",
          "com.nuxeo.ecm.annotation.arender.web.ui"
        ],
        "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender",
        "id": "grp:com.nuxeo.ecm.annotation.arender",
        "name": "com.nuxeo.ecm.annotation.arender",
        "parentIds": [
          "grp:com.nuxeo.arender"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "com.nuxeo.ecm.annotation.arender.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "com.nuxeo.ecm.arender.core.ARenderComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "com.nuxeo.ecm.arender",
              "descriptors": [
                "com.nuxeo.ecm.arender.core.ARenderDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender/ExtensionPoints/com.nuxeo.ecm.arender--configuration",
              "id": "com.nuxeo.ecm.arender--configuration",
              "label": "configuration (com.nuxeo.ecm.arender)",
              "name": "configuration",
              "version": "2023.0.5"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "com.nuxeo.ecm.arender--configuration",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender/Contributions/com.nuxeo.ecm.arender--configuration",
              "id": "com.nuxeo.ecm.arender--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:com.nuxeo.ecm.arender",
                "name": "com.nuxeo.ecm.arender",
                "type": "service"
              },
              "version": "2023.0.5",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"configuration\" target=\"com.nuxeo.ecm.arender\">\n    <configuration>\n      <previewerURL>${arender.server.previewer.host}</previewerURL>\n      <oauth2 create=\"false\">\n        <clientId>arender</clientId>\n        <clientSecret>${nuxeo.arender.oauth2.client.secret}</clientSecret>\n        <redirectURI>${nuxeo.arender.oauth2.client.redirectURI}</redirectURI>\n      </oauth2>\n    </configuration>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender/Contributions/com.nuxeo.ecm.arender--listener",
              "id": "com.nuxeo.ecm.arender--listener",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.0.5",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener class=\"com.nuxeo.ecm.arender.core.ARenderLogoutListener\" name=\"arenderLogoutListener\">\n      <event>logout</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender",
          "name": "com.nuxeo.ecm.arender",
          "requirements": [],
          "resolutionOrder": 49,
          "services": [
            {
              "@type": "NXService",
              "componentId": "com.nuxeo.ecm.arender",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender/Services/com.nuxeo.ecm.arender.core.ARenderService",
              "id": "com.nuxeo.ecm.arender.core.ARenderService",
              "overriden": false,
              "version": "2023.0.5"
            }
          ],
          "startOrder": 775,
          "version": "2023.0.5",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"com.nuxeo.ecm.arender\" version=\"1.0.0\">\n\n  <implementation class=\"com.nuxeo.ecm.arender.core.ARenderComponent\"/>\n\n  <service>\n    <provide interface=\"com.nuxeo.ecm.arender.core.ARenderService\"/>\n  </service>\n\n  <extension-point name=\"configuration\">\n    <object class=\"com.nuxeo.ecm.arender.core.ARenderDescriptor\"/>\n  </extension-point>\n\n  <extension target=\"com.nuxeo.ecm.arender\" point=\"configuration\">\n    <configuration>\n      <previewerURL>${arender.server.previewer.host}</previewerURL>\n      <oauth2 create=\"${nuxeo.arender.oauth2.client.create:=false}\">\n        <clientId>${nuxeo.arender.oauth2.client.id:=arender}</clientId>\n        <clientSecret>${nuxeo.arender.oauth2.client.secret}</clientSecret>\n        <redirectURI>${nuxeo.arender.oauth2.client.redirectURI}</redirectURI>\n      </oauth2>\n    </configuration>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"arenderLogoutListener\" class=\"com.nuxeo.ecm.arender.core.ARenderLogoutListener\">\n      <event>logout</event>\n    </listener>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/nuxeo-arender-component.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Operation allowing to retrieve a low resolution blob for ARender Previewer.\n      Operation returns the blob present in blobXPath property on input document if it's not file:content, otherwise\n      operation returns OriginalJpeg picture view if Picture facet is present on document or MP4 480p video if Video\n      facet is present on document.\n    \n",
              "documentationHtml": "<p>\nOperation allowing to retrieve a low resolution blob for ARender Previewer.\nOperation returns the blob present in blobXPath property on input document if it&#39;s not file:content, otherwise\noperation returns OriginalJpeg picture view if Picture facet is present on document or MP4 480p video if Video\nfacet is present on document.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender.low.resolution/Contributions/com.nuxeo.ecm.arender.low.resolution--operations",
              "id": "com.nuxeo.ecm.arender.low.resolution--operations",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.0.5",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <documentation>\n      Operation allowing to retrieve a low resolution blob for ARender Previewer.\n      Operation returns the blob present in blobXPath property on input document if it's not file:content, otherwise\n      operation returns OriginalJpeg picture view if Picture facet is present on document or MP4 480p video if Video\n      facet is present on document.\n    </documentation>\n    <operation class=\"com.nuxeo.ecm.arender.core.ARenderGetBlob\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Configuration property allowing to use an Automation Chain to retrieve the blob to preview in ARender Previewer.\n      The value is empty by default in order to always return the asked blob and not a low resolution.\n\n      If you want to enable the low resolution behavior just contribute the following:\n      <code>\n    <extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n        <property name=\"nuxeo.arender.low.resolution.chain\">Document.ARenderGetBlob</property>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\nConfiguration property allowing to use an Automation Chain to retrieve the blob to preview in ARender Previewer.\nThe value is empty by default in order to always return the asked blob and not a low resolution.\n</p><p>\nIf you want to enable the low resolution behavior just contribute the following:\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;configuration&#34; target&#61;&#34;org.nuxeo.runtime.ConfigurationService&#34;&gt;\n        &lt;property name&#61;&#34;nuxeo.arender.low.resolution.chain&#34;&gt;Document.ARenderGetBlob&lt;/property&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender.low.resolution/Contributions/com.nuxeo.ecm.arender.low.resolution--configuration",
              "id": "com.nuxeo.ecm.arender.low.resolution--configuration",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.0.5",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Configuration property allowing to use an Automation Chain to retrieve the blob to preview in ARender Previewer.\n      The value is empty by default in order to always return the asked blob and not a low resolution.\n\n      If you want to enable the low resolution behavior just contribute the following:\n      <code>\n        <extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n          <property name=\"nuxeo.arender.low.resolution.chain\">Document.ARenderGetBlob</property>\n        </extension>\n      </code>\n    </documentation>\n    <property name=\"nuxeo.arender.low.resolution.chain\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender.low.resolution",
          "name": "com.nuxeo.ecm.arender.low.resolution",
          "requirements": [],
          "resolutionOrder": 50,
          "services": [],
          "startOrder": 25,
          "version": "2023.0.5",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"com.nuxeo.ecm.arender.low.resolution\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <documentation>\n      Operation allowing to retrieve a low resolution blob for ARender Previewer.\n      Operation returns the blob present in blobXPath property on input document if it's not file:content, otherwise\n      operation returns OriginalJpeg picture view if Picture facet is present on document or MP4 480p video if Video\n      facet is present on document.\n    </documentation>\n    <operation class=\"com.nuxeo.ecm.arender.core.ARenderGetBlob\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Configuration property allowing to use an Automation Chain to retrieve the blob to preview in ARender Previewer.\n      The value is empty by default in order to always return the asked blob and not a low resolution.\n\n      If you want to enable the low resolution behavior just contribute the following:\n      <code>\n        <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n          <property name=\"nuxeo.arender.low.resolution.chain\">Document.ARenderGetBlob</property>\n        </extension>\n      </code>\n    </documentation>\n    <property name=\"nuxeo.arender.low.resolution.chain\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeo-arender-low-resolution-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender.operations/Contributions/com.nuxeo.ecm.arender.operations--operations",
              "id": "com.nuxeo.ecm.arender.operations--operations",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.0.5",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"com.nuxeo.ecm.arender.core.ARenderGetPreviewerUrl\"/>\n    <operation class=\"com.nuxeo.ecm.arender.core.ARenderGetDiffUrl\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender.operations",
          "name": "com.nuxeo.ecm.arender.operations",
          "requirements": [],
          "resolutionOrder": 51,
          "services": [],
          "startOrder": 26,
          "version": "2023.0.5",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"com.nuxeo.ecm.arender.operations\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"com.nuxeo.ecm.arender.core.ARenderGetPreviewerUrl\"/>\n    <operation class=\"com.nuxeo.ecm.arender.core.ARenderGetDiffUrl\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeo-arender-operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissions",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender.content.redaction/Contributions/com.nuxeo.ecm.arender.content.redaction--permissions",
              "id": "com.nuxeo.ecm.arender.content.redaction--permissions",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.0.5",
              "xml": "<extension point=\"permissions\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n    <permission name=\"Redact\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender.content.redaction/Contributions/com.nuxeo.ecm.arender.content.redaction--operations",
              "id": "com.nuxeo.ecm.arender.content.redaction--operations",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.0.5",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"com.nuxeo.ecm.arender.core.ARenderRedactCompletion\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Configuration property allowing to override the operation called when completing the redaction.\n      The value is empty by default in order to execute the default behavior and have backward compatibility (NEV still calls ARenderRedactCompletion automation).\n\n      If you want to override the redact completion behavior just contribute the following:\n      <code>\n    <extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n        <property name=\"nuxeo.arender.override.redact.completion\">CustomARenderRedactCompletion</property>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\nConfiguration property allowing to override the operation called when completing the redaction.\nThe value is empty by default in order to execute the default behavior and have backward compatibility (NEV still calls ARenderRedactCompletion automation).\n</p><p>\nIf you want to override the redact completion behavior just contribute the following:\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;configuration&#34; target&#61;&#34;org.nuxeo.runtime.ConfigurationService&#34;&gt;\n        &lt;property name&#61;&#34;nuxeo.arender.override.redact.completion&#34;&gt;CustomARenderRedactCompletion&lt;/property&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender.content.redaction/Contributions/com.nuxeo.ecm.arender.content.redaction--configuration",
              "id": "com.nuxeo.ecm.arender.content.redaction--configuration",
              "registrationOrder": 31,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.0.5",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Configuration property allowing to override the operation called when completing the redaction.\n      The value is empty by default in order to execute the default behavior and have backward compatibility (NEV still calls ARenderRedactCompletion automation).\n\n      If you want to override the redact completion behavior just contribute the following:\n      <code>\n        <extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n          <property name=\"nuxeo.arender.override.redact.completion\">CustomARenderRedactCompletion</property>\n        </extension>\n      </code>\n    </documentation>\n    <property name=\"nuxeo.arender.override.redact.completion\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender.content.redaction/Contributions/com.nuxeo.ecm.arender.content.redaction--listener",
              "id": "com.nuxeo.ecm.arender.content.redaction--listener",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.0.5",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener class=\"com.nuxeo.ecm.arender.core.ARenderRedactListener\" name=\"annotationRedactListener\" priority=\"0\">\n      <event>commentAdded</event>\n      <event>commentRemoved</event>\n    </listener>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender.content.redaction/Contributions/com.nuxeo.ecm.arender.content.redaction--event",
              "id": "com.nuxeo.ecm.arender.content.redaction--event",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.0.5",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <event name=\"redactionAdded\"/>\n    <event name=\"redactionRemoved\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core/com.nuxeo.ecm.arender.content.redaction",
          "name": "com.nuxeo.ecm.arender.content.redaction",
          "requirements": [
            "org.nuxeo.audit.directoryContrib"
          ],
          "resolutionOrder": 288,
          "services": [],
          "startOrder": 24,
          "version": "2023.0.5",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"com.nuxeo.ecm.arender.content.redaction\" version=\"1.0\">\n\n  <extension point=\"permissions\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n    <permission name=\"Redact\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"com.nuxeo.ecm.arender.core.ARenderRedactCompletion\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Configuration property allowing to override the operation called when completing the redaction.\n      The value is empty by default in order to execute the default behavior and have backward compatibility (NEV still calls ARenderRedactCompletion automation).\n\n      If you want to override the redact completion behavior just contribute the following:\n      <code>\n        <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n          <property name=\"nuxeo.arender.override.redact.completion\">CustomARenderRedactCompletion</property>\n        </extension>\n      </code>\n    </documentation>\n    <property name=\"nuxeo.arender.override.redact.completion\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"annotationRedactListener\" class=\"com.nuxeo.ecm.arender.core.ARenderRedactListener\" priority=\"0\">\n      <event>commentAdded</event>\n      <event>commentRemoved</event>\n    </listener>\n  </extension>\n\n  <!-- in order to declare audit events in eventTypes directory -->\n  <require>org.nuxeo.audit.directoryContrib</require>\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"event\">\n    <event name=\"redactionAdded\" />\n    <event name=\"redactionRemoved\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeo-arender-content-redaction-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-arender-core-2023.0.5.jar",
      "groupId": "com.nuxeo.arender",
      "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.core",
      "id": "com.nuxeo.ecm.annotation.arender.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.7\r\nBundle-ManifestVersion: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ARender Core\r\nBundle-SymbolicName: com.nuxeo.ecm.annotation.arender.core;singleton:=tr\r\n ue\r\nNuxeo-Component: OSGI-INF/nuxeo-arender-component.xml,OSGI-INF/nuxeo-are\r\n nder-content-redaction-contrib.xml,OSGI-INF/nuxeo-arender-low-resolutio\r\n n-contrib.xml,OSGI-INF/nuxeo-arender-operations-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 288,
      "minResolutionOrder": 49,
      "packages": [
        "nuxeo-arender"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.0.5"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-coldstorage-web",
      "artifactVersion": "2023.2.3",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "nuxeo-coldstorage-web",
          "org.nuxeo.coldstorage"
        ],
        "hierarchyPath": "/grp:org.nuxeo.coldstorage",
        "id": "grp:org.nuxeo.coldstorage",
        "name": "org.nuxeo.coldstorage",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=coldstorage%2Fnuxeo-coldstorage%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/job/lts-2023/)\n\n# Nuxeo Cold Storage\n\nThe Nuxeo Cold Storage addon allows the storage of the document main content in a cold storage. This can be needed for archiving, compliance, etc.\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-coldstorage/).\n\n## Context\nNuxeo Cold Storage is an addon that can be plugged to Nuxeo.\n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Cold Storage pipeline\n- **nuxeo-coldstorage**: Backend contribution for Nuxeo Platform\n- **nuxeo-coldstorage-package**: Builder for [nuxeo-coldstorage](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-coldstorage) marketplace package. This package will install all the necessary mechanisms to integrate Cold Storage capabilities into Nuxeo\n- **nuxeo-coldstorage-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n## DB configuration\n\nCreate the following db indexes for an optimal functioning of the addon:\n - `coldstorage:beingRetrieved`\n - `coldstorage:coldContent/digest`\n - `file:content/digest`\n - `ecm:mixinTypes`\n\n Typically on MongoDB:\n ```\n db.default.createIndex(\n    { \"coldstorage:beingRetrieved\": 1 },\n    { partialFilterExpression: { \"coldstorage:beingRetrieved\": true } }\n );\n\n db.default.createIndex(\n    { \"content.digest\": 1 }\n );\n\n db.default.createIndex(\n    { \"coldstorage:coldContent.digest\": 1 }\n );\n\n db.default.createIndex(\n   { \"ecm:mixinTypes\": 1 }\n);\n ```\n\n## Configuration properties\n\n - `nuxeo.coldstorage.check.retrieve.state.cronExpression` :  cron expression to define the frequency of the execution of the process to check if a document has been retrieved. Default value is `0 7 * ? * * *` i.e. every hour at the 7th minute.\n - `nuxeo.bulk.action.checkColdStorageAvailability.scroller` : scroller implementation to be used to query documents being retrieved. `elastic` value can be set to relieve the regular back-end.\n - `nuxeo.coldstorage.numberOfDaysOfAvailability.value.default` : number of days a document remains available once it has been retrieved. Default value is `1`.\n - `nuxeo.coldstorage.thumbnailPreviewRequired` : is a thumbnail required to be used as a place holder to send a document to Cold Storage. Default value is `true`.\n\n### Frontend Contribution\n\n`nuxeo-coldstorage-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\nA couple of unit test classes are designed to run with a blob provider using a real s3 bucket. In order to run them locally, you must define the following system properties:\n - `nuxeo.s3storage.awsid` : your AWS_ACCESS_KEY_ID\n - `nuxeo.s3storage.awssecret` : your AWS_SECRET_ACCESS_KEY\n - `nuxeo.test.s3storage.awstoken` : optional depending on your aws credentials type\n - `nuxeo.test.s3storage.region`: your AWS_REGION\n - `nuxeo.s3storage.bucket` : the name of the S3 bucket\n\n### Frontend Contribution\n\n#### Unit Tests\n\n```shell script\nnpm run test\n```\n\n[Web Test Runner](https://modern-web.dev/docs/test-runner/overview/) is the test runner used to run this contribution unit tests.\nThe tests run against bundled versions of Chromium, Firefox and Webkit, using [Playwright](https://www.npmjs.com/package/playwright)\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `lts/dubnium`, i.e., `v10`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Cold Storage UI, it is assumed that there is a Nuxeo server running with Nuxeo Cold Storage package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available.\n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Cold Storage integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/) for each maintenance branch, for _LTS_ (fast track) and also for each opened PR.\n\nThe following features are available:\n- Each PR merge to _10.10_/_lts-2021_/_lts-2023_ branches will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Cold Storage manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).\n",
            "digest": "39f7ca370031a727e5ab6de2f97880f9",
            "encoding": "UTF-8",
            "length": 8567,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "nuxeo-coldstorage-web",
      "components": [],
      "fileName": "nuxeo-coldstorage-web-2023.2.3.jar",
      "groupId": "org.nuxeo.coldstorage",
      "hierarchyPath": "/grp:org.nuxeo.coldstorage/nuxeo-coldstorage-web",
      "id": "nuxeo-coldstorage-web",
      "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-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: nuxeo-coldstorage-web\r\nBundle-SymbolicName: nuxeo-coldstorage-web;singleton=true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [
        "nuxeo-coldstorage"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=coldstorage%2Fnuxeo-coldstorage%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/job/lts-2023/)\n\n# Nuxeo Cold Storage\n\nThe Nuxeo Cold Storage addon allows the storage of the document main content in a cold storage. This can be needed for archiving, compliance, etc.\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-coldstorage/).\n\n## Context\nNuxeo Cold Storage is an addon that can be plugged to Nuxeo.\n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Cold Storage pipeline\n- **nuxeo-coldstorage**: Backend contribution for Nuxeo Platform\n- **nuxeo-coldstorage-package**: Builder for [nuxeo-coldstorage](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-coldstorage) marketplace package. This package will install all the necessary mechanisms to integrate Cold Storage capabilities into Nuxeo\n- **nuxeo-coldstorage-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n## DB configuration\n\nCreate the following db indexes for an optimal functioning of the addon:\n - `coldstorage:beingRetrieved`\n - `coldstorage:coldContent/digest`\n - `file:content/digest`\n - `ecm:mixinTypes`\n\n Typically on MongoDB:\n ```\n db.default.createIndex(\n    { \"coldstorage:beingRetrieved\": 1 },\n    { partialFilterExpression: { \"coldstorage:beingRetrieved\": true } }\n );\n\n db.default.createIndex(\n    { \"content.digest\": 1 }\n );\n\n db.default.createIndex(\n    { \"coldstorage:coldContent.digest\": 1 }\n );\n\n db.default.createIndex(\n   { \"ecm:mixinTypes\": 1 }\n);\n ```\n\n## Configuration properties\n\n - `nuxeo.coldstorage.check.retrieve.state.cronExpression` :  cron expression to define the frequency of the execution of the process to check if a document has been retrieved. Default value is `0 7 * ? * * *` i.e. every hour at the 7th minute.\n - `nuxeo.bulk.action.checkColdStorageAvailability.scroller` : scroller implementation to be used to query documents being retrieved. `elastic` value can be set to relieve the regular back-end.\n - `nuxeo.coldstorage.numberOfDaysOfAvailability.value.default` : number of days a document remains available once it has been retrieved. Default value is `1`.\n - `nuxeo.coldstorage.thumbnailPreviewRequired` : is a thumbnail required to be used as a place holder to send a document to Cold Storage. Default value is `true`.\n\n### Frontend Contribution\n\n`nuxeo-coldstorage-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\nA couple of unit test classes are designed to run with a blob provider using a real s3 bucket. In order to run them locally, you must define the following system properties:\n - `nuxeo.s3storage.awsid` : your AWS_ACCESS_KEY_ID\n - `nuxeo.s3storage.awssecret` : your AWS_SECRET_ACCESS_KEY\n - `nuxeo.test.s3storage.awstoken` : optional depending on your aws credentials type\n - `nuxeo.test.s3storage.region`: your AWS_REGION\n - `nuxeo.s3storage.bucket` : the name of the S3 bucket\n\n### Frontend Contribution\n\n#### Unit Tests\n\n```shell script\nnpm run test\n```\n\n[Web Test Runner](https://modern-web.dev/docs/test-runner/overview/) is the test runner used to run this contribution unit tests.\nThe tests run against bundled versions of Chromium, Firefox and Webkit, using [Playwright](https://www.npmjs.com/package/playwright)\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `lts/dubnium`, i.e., `v10`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Cold Storage UI, it is assumed that there is a Nuxeo server running with Nuxeo Cold Storage package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available.\n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Cold Storage integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/) for each maintenance branch, for _LTS_ (fast track) and also for each opened PR.\n\nThe following features are available:\n- Each PR merge to _10.10_/_lts-2021_/_lts-2023_ branches will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Cold Storage manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).\n",
        "digest": "39f7ca370031a727e5ab6de2f97880f9",
        "encoding": "UTF-8",
        "length": 8567,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.2.3"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-management",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.management",
          "org.nuxeo.ecm.core.management.jtajca"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management",
        "id": "grp:org.nuxeo.ecm.core.management",
        "name": "org.nuxeo.ecm.core.management",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.management",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.typesContrib/Contributions/org.nuxeo.ecm.core.management.typesContrib--schema",
              "id": "org.nuxeo.ecm.core.management.typesContrib--schema",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"status\" src=\"schemas/status.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.typesContrib/Contributions/org.nuxeo.ecm.core.management.typesContrib--doctype",
              "id": "org.nuxeo.ecm.core.management.typesContrib--doctype",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"Folder\" name=\"ManagementRoot\">\n      <schema name=\"dublincore\"/>\n      <facet name=\"HiddenInNavigation\"/>\n      <facet name=\"SystemDocument\"/>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"AdministrativeStatusContainer\">\n      <schema name=\"dublincore\"/>\n      <facet name=\"HiddenInNavigation\"/>\n      <facet name=\"SystemDocument\"/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"AdministrativeStatus\">\n      <schema name=\"dublincore\"/>\n      <schema name=\"status\"/>\n      <facet name=\"HiddenInNavigation\"/>\n      <facet name=\"SystemDocument\"/>\n    </doctype>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.typesContrib",
          "name": "org.nuxeo.ecm.core.management.typesContrib",
          "requirements": [],
          "resolutionOrder": 151,
          "services": [],
          "startOrder": 142,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.management.typesContrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"status\" src=\"schemas/status.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <doctype name=\"ManagementRoot\" extends=\"Folder\">\n      <schema name=\"dublincore\" />\n      <facet name=\"HiddenInNavigation\" />\n      <facet name=\"SystemDocument\" />\n    </doctype>\n\n    <doctype name=\"AdministrativeStatusContainer\" extends=\"Folder\">\n      <schema name=\"dublincore\" />\n      <facet name=\"HiddenInNavigation\" />\n      <facet name=\"SystemDocument\" />\n    </doctype>\n\n    <doctype name=\"AdministrativeStatus\" extends=\"Document\">\n      <schema name=\"dublincore\" />\n      <schema name=\"status\" />\n      <facet name=\"HiddenInNavigation\" />\n      <facet name=\"SystemDocument\" />\n    </doctype>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-management-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.management.CoreManagementComponent--serviceDefinition",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.contribs/Contributions/org.nuxeo.ecm.core.management.contribs--serviceDefinition",
              "id": "org.nuxeo.ecm.core.management.contribs--serviceDefinition",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"serviceDefinition\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n\n    <administrableService id=\"org.nuxeo.ecm.instance.availability\" name=\"nuxeoInstance\">\n      <label>Nuxeo Instance</label>\n      <description>\n        Indicates if the Nuxeo Instance is available or not.\n      </description>\n    </administrableService>\n\n    <administrableService id=\"org.nuxeo.ecm.administrator.message\" name=\"adminMessage\">\n      <label>Administrator message</label>\n      <description>\n        Displays a message from administrator on all pages\n      </description>\n      <initialState>passive</initialState>\n    </administrableService>\n\n    <administrableService id=\"org.nuxeo.ecm.smtp\" name=\"smtpService\">\n      <label>SMTP services</label>\n      <description>\n        Indicates if the Nuxeo instance can send e-mails\n      </description>\n    </administrableService>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.management.CoreManagementComponent--probes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.contribs/Contributions/org.nuxeo.ecm.core.management.contribs--probes",
              "id": "org.nuxeo.ecm.core.management.contribs--probes",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"probes\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n\n    <probe class=\"org.nuxeo.ecm.core.management.probes.AdministrativeStatusProbe\" name=\"administrativeStatus\">\n      <label>Local Instance availability</label>\n      <description>Test if local Nuxeo Instance is available</description>\n    </probe>\n\n    <probe class=\"org.nuxeo.ecm.core.management.statuses.RuntimeStartedProbe\" name=\"runtimeStatus\">\n      <label>Runtime started probe</label>\n      <description>Test if the runtime is started or not</description>\n    </probe>\n\n    <probe class=\"org.nuxeo.ecm.core.management.statuses.RepositoryStatusProbe\" name=\"repositoryStatus\">\n      <label>Repository started probe</label>\n      <description>Test the repository by fetching the root document</description>\n    </probe>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.management.CoreManagementComponent--healthCheck",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.contribs/Contributions/org.nuxeo.ecm.core.management.contribs--healthCheck",
              "id": "org.nuxeo.ecm.core.management.contribs--healthCheck",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"healthCheck\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n     <probe enabled=\"true\" name=\"runtimeStatus\"/>\n     <probe enabled=\"true\" name=\"repositoryStatus\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.contribs",
          "name": "org.nuxeo.ecm.core.management.contribs",
          "requirements": [],
          "resolutionOrder": 152,
          "services": [],
          "startOrder": 140,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.management.contribs\">\n\n  <extension target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\"\n    point=\"serviceDefinition\">\n\n    <administrableService id=\"org.nuxeo.ecm.instance.availability\"\n      name=\"nuxeoInstance\">\n      <label>Nuxeo Instance</label>\n      <description>\n        Indicates if the Nuxeo Instance is available or not.\n      </description>\n    </administrableService>\n\n    <administrableService id=\"org.nuxeo.ecm.administrator.message\"\n      name=\"adminMessage\">\n      <label>Administrator message</label>\n      <description>\n        Displays a message from administrator on all pages\n      </description>\n      <initialState>passive</initialState>\n    </administrableService>\n\n    <administrableService id=\"org.nuxeo.ecm.smtp\" name=\"smtpService\">\n      <label>SMTP services</label>\n      <description>\n        Indicates if the Nuxeo instance can send e-mails\n      </description>\n    </administrableService>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\"\n    point=\"probes\">\n\n    <probe name=\"administrativeStatus\"\n      class=\"org.nuxeo.ecm.core.management.probes.AdministrativeStatusProbe\">\n      <label>Local Instance availability</label>\n      <description>Test if local Nuxeo Instance is available</description>\n    </probe>\n\n    <probe name=\"runtimeStatus\"\n      class=\"org.nuxeo.ecm.core.management.statuses.RuntimeStartedProbe\">\n      <label>Runtime started probe</label>\n      <description>Test if the runtime is started or not</description>\n    </probe>\n\n    <probe name=\"repositoryStatus\"\n      class=\"org.nuxeo.ecm.core.management.statuses.RepositoryStatusProbe\">\n      <label>Repository started probe</label>\n      <description>Test the repository by fetching the root document</description>\n    </probe>\n\n  </extension>\n\n   <extension target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\" point=\"healthCheck\">\n     <probe name=\"runtimeStatus\" enabled=\"true\"/>\n     <probe name=\"repositoryStatus\" enabled=\"true\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-management-contribs.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.management.ResourcePublisher--factories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.runtime.management.contribs/Contributions/org.nuxeo.ecm.core.management.runtime.management.contribs--factories",
              "id": "org.nuxeo.ecm.core.management.runtime.management.contribs--factories",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.management.ResourcePublisher",
                "name": "org.nuxeo.runtime.management.ResourcePublisher",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"factories\" target=\"org.nuxeo.runtime.management.ResourcePublisher\">\n    <factory class=\"org.nuxeo.ecm.core.management.StatusesManagementFactory\" name=\"managementStatusesFactory\"/>\n     <factory class=\"org.nuxeo.ecm.core.management.works.WorksMonitoringFactory\" name=\"WorkMonitoring\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.runtime.management.contribs",
          "name": "org.nuxeo.ecm.core.management.runtime.management.contribs",
          "requirements": [],
          "resolutionOrder": 153,
          "services": [],
          "startOrder": 141,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.management.runtime.management.contribs\">\n\n  <extension target=\"org.nuxeo.runtime.management.ResourcePublisher\"\n    point=\"factories\">\n    <factory name=\"managementStatusesFactory\"\n      class=\"org.nuxeo.ecm.core.management.StatusesManagementFactory\" />\n     <factory name=\"WorkMonitoring\"\n      class=\"org.nuxeo.ecm.core.management.works.WorksMonitoringFactory\" />\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/runtime-management-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.management.CoreManagementComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.management.CoreManagementComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.management.probes.ProbeDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.CoreManagementComponent/ExtensionPoints/org.nuxeo.ecm.core.management.CoreManagementComponent--probes",
              "id": "org.nuxeo.ecm.core.management.CoreManagementComponent--probes",
              "label": "probes (org.nuxeo.ecm.core.management.CoreManagementComponent)",
              "name": "probes",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.management.CoreManagementComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.management.statuses.AdministrableServiceDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.CoreManagementComponent/ExtensionPoints/org.nuxeo.ecm.core.management.CoreManagementComponent--serviceDefinition",
              "id": "org.nuxeo.ecm.core.management.CoreManagementComponent--serviceDefinition",
              "label": "serviceDefinition (org.nuxeo.ecm.core.management.CoreManagementComponent)",
              "name": "serviceDefinition",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.management.CoreManagementComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.management.storage.DocumentStoreConfigurationDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.CoreManagementComponent/ExtensionPoints/org.nuxeo.ecm.core.management.CoreManagementComponent--storageConfiguration",
              "id": "org.nuxeo.ecm.core.management.CoreManagementComponent--storageConfiguration",
              "label": "storageConfiguration (org.nuxeo.ecm.core.management.CoreManagementComponent)",
              "name": "storageConfiguration",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.management.CoreManagementComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.management.storage.DocumentStoreHandlerDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.CoreManagementComponent/ExtensionPoints/org.nuxeo.ecm.core.management.CoreManagementComponent--storageHandlers",
              "id": "org.nuxeo.ecm.core.management.CoreManagementComponent--storageHandlers",
              "label": "storageHandlers (org.nuxeo.ecm.core.management.CoreManagementComponent)",
              "name": "storageHandlers",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.management.CoreManagementComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.management.probes.HealthCheckProbesDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.CoreManagementComponent/ExtensionPoints/org.nuxeo.ecm.core.management.CoreManagementComponent--healthCheck",
              "id": "org.nuxeo.ecm.core.management.CoreManagementComponent--healthCheck",
              "label": "healthCheck (org.nuxeo.ecm.core.management.CoreManagementComponent)",
              "name": "healthCheck",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.CoreManagementComponent",
          "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
          "requirements": [
            "org.nuxeo.ecm.core.repository.RepositoryService"
          ],
          "resolutionOrder": 793,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.management.CoreManagementComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.CoreManagementComponent/Services/org.nuxeo.ecm.core.management.CoreManagementComponent",
              "id": "org.nuxeo.ecm.core.management.CoreManagementComponent",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.management.CoreManagementComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.CoreManagementComponent/Services/org.nuxeo.ecm.core.management.api.ProbeManager",
              "id": "org.nuxeo.ecm.core.management.api.ProbeManager",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.management.CoreManagementComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.CoreManagementComponent/Services/org.nuxeo.ecm.core.management.api.GlobalAdministrativeStatusManager",
              "id": "org.nuxeo.ecm.core.management.api.GlobalAdministrativeStatusManager",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.management.CoreManagementComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.CoreManagementComponent/Services/org.nuxeo.ecm.core.management.api.AdministrativeStatusManager",
              "id": "org.nuxeo.ecm.core.management.api.AdministrativeStatusManager",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.management.CoreManagementComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.CoreManagementComponent/Services/org.nuxeo.ecm.core.event.EventStats",
              "id": "org.nuxeo.ecm.core.event.EventStats",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 809,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n\n  <implementation class=\"org.nuxeo.ecm.core.management.CoreManagementComponent\" />\n\n  <require>org.nuxeo.ecm.core.repository.RepositoryService</require>\n  <!-- TODO: Cannot use this ince content template is not in the core .. find another solution.\n  <require>org.nuxeo.ecm.platform.content.template.service.ContentTemplateService</require>\n  -->\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.management.CoreManagementComponent\" />\n    <provide interface=\"org.nuxeo.ecm.core.management.api.ProbeManager\" />\n    <provide\n      interface=\"org.nuxeo.ecm.core.management.api.GlobalAdministrativeStatusManager\" />\n    <provide\n      interface=\"org.nuxeo.ecm.core.management.api.AdministrativeStatusManager\" />\n    <provide\n      interface=\"org.nuxeo.ecm.core.event.EventStats\" />\n  </service>\n\n  <extension-point name=\"probes\">\n    <object class=\"org.nuxeo.ecm.core.management.probes.ProbeDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"serviceDefinition\">\n    <object\n      class=\"org.nuxeo.ecm.core.management.statuses.AdministrableServiceDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"storageConfiguration\">\n    <object\n      class=\"org.nuxeo.ecm.core.management.storage.DocumentStoreConfigurationDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"storageHandlers\">\n    <object\n      class=\"org.nuxeo.ecm.core.management.storage.DocumentStoreHandlerDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"healthCheck\">\n    <!-- @since 9.3, list of probes to be evaluated for the healthCheck -->\n    <object class=\"org.nuxeo.ecm.core.management.probes.HealthCheckProbesDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-management-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.management.standby.StandbyComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.managemment.standby",
          "name": "org.nuxeo.ecm.core.managemment.standby",
          "requirements": [
            "org.nuxeo.runtime.management.ResourcePublisher",
            "org.nuxeo.runtime.metrics.MetricsService",
            "org.nuxeo.runtime.EventService"
          ],
          "resolutionOrder": 810,
          "services": [],
          "startOrder": 810,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.managemment.standby\">\n\n  <require>org.nuxeo.runtime.EventService</require>\n  <require>org.nuxeo.runtime.management.ResourcePublisher</require>\n  <require>org.nuxeo.runtime.metrics.MetricsService</require>\n\n  <implementation class=\"org.nuxeo.ecm.core.management.standby.StandbyComponent\" />\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/standby.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-management-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management",
      "id": "org.nuxeo.ecm.core.management",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 5.4.2.qualifier\r\nExport-Package: org.nuxeo.ecm.core.management,org.nuxeo.ecm.core.managem\r\n ent.api,org.nuxeo.ecm.core.management.guards,org.nuxeo.ecm.core.managem\r\n ent.probes,org.nuxeo.ecm.core.management.statuses,org.nuxeo.ecm.core.ma\r\n nagement.storage\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: nuxeo core management\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-BuddyPolicy: dependent\r\nNuxeo-Component: OSGI-INF/core-management-types-contrib.xml,OSGI-INF/cor\r\n e-management-framework.xml,OSGI-INF/core-management-contribs.xml,OSGI-I\r\n NF/runtime-management-contrib.xml,OSGI-INF/standby.xml\r\nImport-Package: javax.annotation,javax.servlet.http;resolution:=optional\r\n ,org.apache.commons.lang,org.apache.commons.logging,org.nuxeo.common.xm\r\n ap.annotation,org.nuxeo.ecm.core,org.nuxeo.ecm.core.api;api=split,org.n\r\n uxeo.ecm.core.api.repository,org.nuxeo.ecm.core.api.security,org.nuxeo.\r\n ecm.core.event,org.nuxeo.ecm.core.event.impl,org.nuxeo.ecm.core.model,o\r\n rg.nuxeo.ecm.core.repository,org.nuxeo.runtime,org.nuxeo.runtime.api,or\r\n g.nuxeo.runtime.management,org.nuxeo.runtime.model,org.nuxeo.runtime.se\r\n rvices.event,org.osgi.framework\r\nBundle-SymbolicName: org.nuxeo.ecm.core.management;singleton:=true\r\nRequire-Bundle: org.nuxeo.ecm.core;bundle-version=\"0.0.0\"\r\n\r\n",
      "maxResolutionOrder": 810,
      "minResolutionOrder": 151,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-common",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.common"
        ],
        "hierarchyPath": "/grp:org.nuxeo.common",
        "id": "grp:org.nuxeo.common",
        "name": "org.nuxeo.common",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.common",
      "components": [],
      "fileName": "nuxeo-common-2023.7.9.jar",
      "groupId": "org.nuxeo.common",
      "hierarchyPath": "/grp:org.nuxeo.common/org.nuxeo.common",
      "id": "org.nuxeo.common",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 5.4.2.qualifier\r\nExport-Package: org.nuxeo.common,org.nuxeo.common.collections,org.nuxeo.\r\n common.debug,org.nuxeo.common.logging,org.nuxeo.common.persistence,org.\r\n nuxeo.common.server,org.nuxeo.common.utils,org.nuxeo.common.utils.i18n,\r\n org.nuxeo.common.xmap,org.nuxeo.common.xmap.annotation\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo Common\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-BuddyPolicy: registered\r\nImport-Package: javax.naming,javax.naming.spi,javax.resource,javax.trans\r\n action.xa,javax.xml.parsers,org.apache.commons.io,org.apache.commons.lo\r\n gging,org.apache.commons.lang3.builder,org.apache.xml.serialize,org.w3c\r\n .dom,org.w3c.dom.ranges,org.xml.sax\r\nBundle-SymbolicName: org.nuxeo.common;singleton:=true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-publisher",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.publisher.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher",
        "id": "grp:org.nuxeo.ecm.platform.publisher",
        "name": "org.nuxeo.ecm.platform.publisher",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.publisher",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.platform.publisher.descriptors.PublicationTreeDescriptor"
              ],
              "documentation": "\n      Used to register the PublicationTree implementations available to build\n      treeInstance.\n\n      A sample contribution could be\n      <code>\n    <publicationTree\n        class=\"org.nuxeo.ecm.platform.publisher.impl.core.SectionPublicationTree\" name=\"CoreTree\"/>\n</code>\n\n      It registers a SectionPublicationTree, tree implementation used to publish documents on\n      local Section documents.\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nUsed to register the PublicationTree implementations available to build\ntreeInstance.\n</p><p>\nA sample contribution could be\n</p><p></p><pre><code>    &lt;publicationTree\n        class&#61;&#34;org.nuxeo.ecm.platform.publisher.impl.core.SectionPublicationTree&#34; name&#61;&#34;CoreTree&#34;/&gt;\n</code></pre><p>\nIt registers a SectionPublicationTree, tree implementation used to publish documents on\nlocal Section documents.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl/ExtensionPoints/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--tree",
              "id": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--tree",
              "label": "tree (org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl)",
              "name": "tree",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.platform.publisher.descriptors.PublicationTreeConfigDescriptor"
              ],
              "documentation": "\n      Used to register actual publication tree instances, where we define\n      the factory to use, the underlying tree to use, its name / title.\n\n      Here is the default contribution:\n      <code>\n    <publicationTreeConfig factory=\"CoreProxy\"\n        name=\"DefaultSectionsTree\"\n        title=\"label.publication.tree.local.sections\" tree=\"RootSectionsCoreTree\">\n        <parameters>\n            <!-- <parameter name=\"RootPath\">/default-domain/sections</parameter> -->\n            <parameter name=\"RelativeRootPath\">/sections</parameter>\n            <parameter name=\"enableSnapshot\">true</parameter>\n            <parameter name=\"iconExpanded\">/icons/folder_open.gif</parameter>\n            <parameter name=\"iconCollapsed\">/icons/folder.gif</parameter>\n        </parameters>\n    </publicationTreeConfig>\n</code>\n\n\n      Parameters:\n      - RootPath: it's used when you want to define the root publication node\n      of your PublicationTree. You can't use RootPath AND RelativeRoothPath\n      parameter.\n\n      - RelativeRootPath: used when you just want to define a relative path\n      (without specifying the domain path). A PublicationTree instance will be\n      created automatically for each Domain, appending the RelativeroothPath\n      value to each Domain.\n\n      - iconExpanded and iconCollapsed: specify which icons to use when\n      displaying the PublicationTree on the interface.\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nUsed to register actual publication tree instances, where we define\nthe factory to use, the underlying tree to use, its name / title.\n</p><p>\nHere is the default contribution:\n</p><p></p><pre><code>    &lt;publicationTreeConfig factory&#61;&#34;CoreProxy&#34;\n        name&#61;&#34;DefaultSectionsTree&#34;\n        title&#61;&#34;label.publication.tree.local.sections&#34; tree&#61;&#34;RootSectionsCoreTree&#34;&gt;\n        &lt;parameters&gt;\n            &lt;!-- &lt;parameter name&#61;&#34;RootPath&#34;&gt;/default-domain/sections&lt;/parameter&gt; --&gt;\n            &lt;parameter name&#61;&#34;RelativeRootPath&#34;&gt;/sections&lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;enableSnapshot&#34;&gt;true&lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;iconExpanded&#34;&gt;/icons/folder_open.gif&lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;iconCollapsed&#34;&gt;/icons/folder.gif&lt;/parameter&gt;\n        &lt;/parameters&gt;\n    &lt;/publicationTreeConfig&gt;\n</code></pre><p>\nParameters:\n- RootPath: it&#39;s used when you want to define the root publication node\nof your PublicationTree. You can&#39;t use RootPath AND RelativeRoothPath\nparameter.\n</p><p>\n- RelativeRootPath: used when you just want to define a relative path\n(without specifying the domain path). A PublicationTree instance will be\ncreated automatically for each Domain, appending the RelativeroothPath\nvalue to each Domain.\n</p><p>\n- iconExpanded and iconCollapsed: specify which icons to use when\ndisplaying the PublicationTree on the interface.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl/ExtensionPoints/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--treeInstance",
              "id": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--treeInstance",
              "label": "treeInstance (org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl)",
              "name": "treeInstance",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.platform.publisher.descriptors.PublishedDocumentFactoryDescriptor"
              ],
              "documentation": "\n      A factory is used to actually create the published document.\n      It also manages the approval / rejection workflow on published documents.\n\n      <code>\n    <publishedDocumentFactory\n        class=\"org.nuxeo.ecm.platform.publisher.impl.core.CoreProxyFactory\" name=\"CoreProxy\"/>\n</code>\n\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nA factory is used to actually create the published document.\nIt also manages the approval / rejection workflow on published documents.\n</p><p>\n</p><pre><code>    &lt;publishedDocumentFactory\n        class&#61;&#34;org.nuxeo.ecm.platform.publisher.impl.core.CoreProxyFactory&#34; name&#61;&#34;CoreProxy&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl/ExtensionPoints/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--factory",
              "id": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--factory",
              "label": "factory (org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl)",
              "name": "factory",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.platform.publisher.rules.ValidatorsRuleDescriptor"
              ],
              "documentation": "\n      A validators rule object is aiming at being\n      responsible of computing the validators of a just published document.\n\n      <code>\n    <validatorsRule\n        class=\"org.nuxeo.ecm.platform.publisher.rules.DefaultValidatorsRule\" name=\"CoreValidatorsRule\"/>\n</code>\n\n\n      @author Thomas Roger(troger@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nA validators rule object is aiming at being\nresponsible of computing the validators of a just published document.\n</p><p>\n</p><pre><code>    &lt;validatorsRule\n        class&#61;&#34;org.nuxeo.ecm.platform.publisher.rules.DefaultValidatorsRule&#34; name&#61;&#34;CoreValidatorsRule&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl/ExtensionPoints/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--validatorsRule",
              "id": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--validatorsRule",
              "label": "validatorsRule (org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl)",
              "name": "validatorsRule",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.platform.publisher.descriptors.RootSectionFinderFactoryDescriptor"
              ],
              "documentation": "\n      A factory is used to create the RootSectionFinder implementation that is used in the PublisherTree administration and in the RootSectionsPublicationTree implementation.\n      <code>\n    <rootSectionFinderFactory class=\"org.nuxeo.ecm.platform.publisher.impl.finder.DefaultRootSectionsFinder\"/>\n</code>\n\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nA factory is used to create the RootSectionFinder implementation that is used in the PublisherTree administration and in the RootSectionsPublicationTree implementation.\n</p><p></p><pre><code>    &lt;rootSectionFinderFactory class&#61;&#34;org.nuxeo.ecm.platform.publisher.impl.finder.DefaultRootSectionsFinder&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl/ExtensionPoints/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--rootSectionFinderFactory",
              "id": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--rootSectionFinderFactory",
              "label": "rootSectionFinderFactory (org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl)",
              "name": "rootSectionFinderFactory",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
          "name": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
          "requirements": [],
          "resolutionOrder": 450,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl/Services/org.nuxeo.ecm.platform.publisher.api.PublisherService",
              "id": "org.nuxeo.ecm.platform.publisher.api.PublisherService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 864,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component\n    name=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\">\n  <implementation\n      class=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\"/>\n\n  <documentation>\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide\n        interface=\"org.nuxeo.ecm.platform.publisher.api.PublisherService\"/>\n  </service>\n\n\n  <extension-point name=\"tree\">\n    <documentation>\n      Used to register the PublicationTree implementations available to build\n      treeInstance.\n\n      A sample contribution could be\n      <code>\n        <publicationTree name=\"CoreTree\"\n                     class=\"org.nuxeo.ecm.platform.publisher.impl.core.SectionPublicationTree\"/>\n      </code>\n      It registers a SectionPublicationTree, tree implementation used to publish documents on\n      local Section documents.\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object\n        class=\"org.nuxeo.ecm.platform.publisher.descriptors.PublicationTreeDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"treeInstance\">\n    <documentation>\n      Used to register actual publication tree instances, where we define\n      the factory to use, the underlying tree to use, its name / title.\n\n      Here is the default contribution:\n      <code>\n        <publicationTreeConfig name=\"DefaultSectionsTree\" tree=\"RootSectionsCoreTree\"\n            factory=\"CoreProxy\"\n            title=\"label.publication.tree.local.sections\" >\n          <parameters>\n            <!-- <parameter name=\"RootPath\">/default-domain/sections</parameter> -->\n            <parameter name=\"RelativeRootPath\">/sections</parameter>\n            <parameter name=\"enableSnapshot\">true</parameter>\n            <parameter name=\"iconExpanded\">/icons/folder_open.gif</parameter>\n            <parameter name=\"iconCollapsed\">/icons/folder.gif</parameter>\n          </parameters>\n        </publicationTreeConfig>\n      </code>\n\n      Parameters:\n      - RootPath: it's used when you want to define the root publication node\n      of your PublicationTree. You can't use RootPath AND RelativeRoothPath\n      parameter.\n\n      - RelativeRootPath: used when you just want to define a relative path\n      (without specifying the domain path). A PublicationTree instance will be\n      created automatically for each Domain, appending the RelativeroothPath\n      value to each Domain.\n\n      - iconExpanded and iconCollapsed: specify which icons to use when\n      displaying the PublicationTree on the interface.\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object\n        class=\"org.nuxeo.ecm.platform.publisher.descriptors.PublicationTreeConfigDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"factory\">\n    <documentation>\n      A factory is used to actually create the published document.\n      It also manages the approval / rejection workflow on published documents.\n\n      <code>\n        <publishedDocumentFactory name=\"CoreProxy\"\n            class=\"org.nuxeo.ecm.platform.publisher.impl.core.CoreProxyFactory\"/>\n      </code>\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object\n        class=\"org.nuxeo.ecm.platform.publisher.descriptors.PublishedDocumentFactoryDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"validatorsRule\">\n    <documentation>\n      A validators rule object is aiming at being\n      responsible of computing the validators of a just published document.\n\n      <code>\n        <validatorsRule name=\"CoreValidatorsRule\"\n            class=\"org.nuxeo.ecm.platform.publisher.rules.DefaultValidatorsRule\"/>\n      </code>\n\n      @author Thomas Roger(troger@nuxeo.com)\n    </documentation>\n    <object\n        class=\"org.nuxeo.ecm.platform.publisher.rules.ValidatorsRuleDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"rootSectionFinderFactory\">\n    <documentation>\n      A factory is used to create the RootSectionFinder implementation that is used in the PublisherTree administration and in the RootSectionsPublicationTree implementation.\n      <code>\n        <rootSectionFinderFactory\n            class=\"org.nuxeo.ecm.platform.publisher.impl.finder.DefaultRootSectionsFinder\"/>\n      </code>\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object\n        class=\"org.nuxeo.ecm.platform.publisher.descriptors.RootSectionFinderFactoryDescriptor\"/>\n  </extension-point>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/publisher-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Default ValidatorsRule to use: the validators will be principals having\n      manage everything rights in the sections where the document\n      has been published.\n\n      @author Thomas Roger(troger@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nDefault ValidatorsRule to use: the validators will be principals having\nmanage everything rights in the sections where the document\nhas been published.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--validatorsRule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.contrib/Contributions/org.nuxeo.ecm.platform.publisher.contrib--validatorsRule",
              "id": "org.nuxeo.ecm.platform.publisher.contrib--validatorsRule",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "name": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"validatorsRule\" target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\">\n\n    <documentation>\n      Default ValidatorsRule to use: the validators will be principals having\n      manage everything rights in the sections where the document\n      has been published.\n\n      @author Thomas Roger(troger@nuxeo.com)\n    </documentation>\n\n    <validatorsRule class=\"org.nuxeo.ecm.platform.publisher.rules.DefaultValidatorsRule\" name=\"CoreValidatorsRule\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Default PublishedDocumentFactories available to use.\n\n      - CoreProxy: to manage published documents based on a proxy\n\n      @author Thomas Roger(troger@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nDefault PublishedDocumentFactories available to use.\n</p><p>\n- CoreProxy: to manage published documents based on a proxy\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--factory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.contrib/Contributions/org.nuxeo.ecm.platform.publisher.contrib--factory",
              "id": "org.nuxeo.ecm.platform.publisher.contrib--factory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "name": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"factory\" target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\">\n\n    <documentation>\n      Default PublishedDocumentFactories available to use.\n\n      - CoreProxy: to manage published documents based on a proxy\n\n      @author Thomas Roger(troger@nuxeo.com)\n    </documentation>\n\n    <publishedDocumentFactory class=\"org.nuxeo.ecm.platform.publisher.impl.core.CoreProxyFactory\" name=\"CoreProxy\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Default PublicationTrees available to use.\n\n      - CoreTree: tree to use when publishing on local sections\n\n      - RootSectionsCoreTree: tree to use when publishing on local sections but\n      using the information stored in the Workspace to get the sections where\n      a publication is allowed\n\n      @author Thomas Roger(troger@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nDefault PublicationTrees available to use.\n</p><p>\n- CoreTree: tree to use when publishing on local sections\n</p><p>\n- RootSectionsCoreTree: tree to use when publishing on local sections but\nusing the information stored in the Workspace to get the sections where\na publication is allowed\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--tree",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.contrib/Contributions/org.nuxeo.ecm.platform.publisher.contrib--tree",
              "id": "org.nuxeo.ecm.platform.publisher.contrib--tree",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "name": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"tree\" target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\">\n\n    <documentation>\n      Default PublicationTrees available to use.\n\n      - CoreTree: tree to use when publishing on local sections\n\n      - RootSectionsCoreTree: tree to use when publishing on local sections but\n      using the information stored in the Workspace to get the sections where\n      a publication is allowed\n\n      @author Thomas Roger(troger@nuxeo.com)\n    </documentation>\n\n    <publicationTree class=\"org.nuxeo.ecm.platform.publisher.impl.core.SectionPublicationTree\" name=\"CoreTree\"/>\n    <publicationTree class=\"org.nuxeo.ecm.platform.publisher.impl.core.RootSectionsPublicationTree\" name=\"RootSectionsCoreTree\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Contribute the default PublicationTree instance to be able to publish\n      documents in local sections.\n    \n",
              "documentationHtml": "<p>\nContribute the default PublicationTree instance to be able to publish\ndocuments in local sections.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--treeInstance",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.contrib/Contributions/org.nuxeo.ecm.platform.publisher.contrib--treeInstance",
              "id": "org.nuxeo.ecm.platform.publisher.contrib--treeInstance",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "name": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"treeInstance\" target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\">\n\n    <documentation>\n      Contribute the default PublicationTree instance to be able to publish\n      documents in local sections.\n    </documentation>\n\n    <publicationTreeConfig factory=\"CoreProxy\" name=\"DefaultSectionsTree\" title=\"label.publication.tree.local.sections\" tree=\"RootSectionsCoreTree\">\n      <parameters>\n        <!-- <parameter name=\"RootPath\">/default-domain/sections</parameter> -->\n        <parameter name=\"RelativeRootPath\">/sections</parameter>\n        <parameter name=\"enableSnapshot\">true</parameter>\n        <parameter name=\"iconExpanded\">/icons/folder_open.gif</parameter>\n        <parameter name=\"iconCollapsed\">/icons/folder.gif</parameter>\n      </parameters>\n    </publicationTreeConfig>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.contrib",
          "requirements": [],
          "resolutionOrder": 451,
          "services": [],
          "startOrder": 407,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.publisher.contrib\">\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\"\n      point=\"validatorsRule\">\n\n    <documentation>\n      Default ValidatorsRule to use: the validators will be principals having\n      manage everything rights in the sections where the document\n      has been published.\n\n      @author Thomas Roger(troger@nuxeo.com)\n    </documentation>\n\n    <validatorsRule name=\"CoreValidatorsRule\"\n                    class=\"org.nuxeo.ecm.platform.publisher.rules.DefaultValidatorsRule\"/>\n\n  </extension>\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\"\n      point=\"factory\">\n\n    <documentation>\n      Default PublishedDocumentFactories available to use.\n\n      - CoreProxy: to manage published documents based on a proxy\n\n      @author Thomas Roger(troger@nuxeo.com)\n    </documentation>\n\n    <publishedDocumentFactory name=\"CoreProxy\"\n                              class=\"org.nuxeo.ecm.platform.publisher.impl.core.CoreProxyFactory\"/>\n\n  </extension>\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\"\n      point=\"tree\">\n\n    <documentation>\n      Default PublicationTrees available to use.\n\n      - CoreTree: tree to use when publishing on local sections\n\n      - RootSectionsCoreTree: tree to use when publishing on local sections but\n      using the information stored in the Workspace to get the sections where\n      a publication is allowed\n\n      @author Thomas Roger(troger@nuxeo.com)\n    </documentation>\n\n    <publicationTree name=\"CoreTree\"\n                     class=\"org.nuxeo.ecm.platform.publisher.impl.core.SectionPublicationTree\"/>\n    <publicationTree name=\"RootSectionsCoreTree\"\n                     class=\"org.nuxeo.ecm.platform.publisher.impl.core.RootSectionsPublicationTree\"/>\n\n  </extension>\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\"\n      point=\"treeInstance\">\n\n    <documentation>\n      Contribute the default PublicationTree instance to be able to publish\n      documents in local sections.\n    </documentation>\n\n    <publicationTreeConfig name=\"DefaultSectionsTree\" tree=\"RootSectionsCoreTree\"\n                           factory=\"CoreProxy\"\n                           title=\"label.publication.tree.local.sections\" >\n      <parameters>\n        <!-- <parameter name=\"RootPath\">/default-domain/sections</parameter> -->\n        <parameter name=\"RelativeRootPath\">/sections</parameter>\n        <parameter name=\"enableSnapshot\">true</parameter>\n        <parameter name=\"iconExpanded\">/icons/folder_open.gif</parameter>\n        <parameter name=\"iconCollapsed\">/icons/folder.gif</parameter>\n      </parameters>\n    </publicationTreeConfig>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/publisher-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.listeners.contrib/Contributions/org.nuxeo.ecm.platform.publisher.listeners.contrib--listener",
              "id": "org.nuxeo.ecm.platform.publisher.listeners.contrib--listener",
              "registrationOrder": 32,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.publisher.listeners.DomainEventsListener\" name=\"domainCreationListener\" postCommit=\"false\" priority=\"140\">\n      <event>documentCreated</event>\n      <event>documentModified</event>\n      <event>documentRemoved</event>\n      <event>documentMoved</event>\n      <event>lifecycle_transition_event</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.listeners.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.listeners.contrib",
          "requirements": [],
          "resolutionOrder": 452,
          "services": [],
          "startOrder": 408,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.publisher.listeners.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n             point=\"listener\">\n\n    <listener name=\"domainCreationListener\" async=\"false\" postCommit=\"false\"\n              class=\"org.nuxeo.ecm.platform.publisher.listeners.DomainEventsListener\"\n              priority=\"140\">\n      <event>documentCreated</event>\n      <event>documentModified</event>\n      <event>documentRemoved</event>\n      <event>documentMoved</event>\n      <event>lifecycle_transition_event</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/publisher-listeners-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.type.contrib/Contributions/org.nuxeo.ecm.platform.publisher.type.contrib--doctype",
              "id": "org.nuxeo.ecm.platform.publisher.type.contrib--doctype",
              "registrationOrder": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <doctype extends=\"Relation\" name=\"PublicationRelation\">\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.type.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.type.contrib",
          "requirements": [],
          "resolutionOrder": 453,
          "services": [],
          "startOrder": 413,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.publisher.type.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n    <doctype name=\"PublicationRelation\" extends=\"Relation\">\n      <facet name=\"HiddenInNavigation\" />\n    </doctype>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/publisher-type-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.pageprovider.contrib/Contributions/org.nuxeo.ecm.platform.publisher.pageprovider.contrib--providers",
              "id": "org.nuxeo.ecm.platform.publisher.pageprovider.contrib--providers",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n    <coreQueryPageProvider name=\"domains_for_publishing\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:primaryType = 'Domain'\n        AND ecm:parentId = ? AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"publish_space_suggestion\">\n      <pattern escapeParameters=\"true\" quoteParameters=\"false\">\n        SELECT * FROM Document WHERE dc:title ILIKE '?%'\n          AND ecm:mixinType = 'PublishSpace' AND ecm:isVersion = 0 AND\n          ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.pageprovider.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.pageprovider.contrib",
          "requirements": [],
          "resolutionOrder": 454,
          "services": [],
          "startOrder": 409,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.publisher.pageprovider.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n    <coreQueryPageProvider name=\"domains_for_publishing\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:primaryType = 'Domain'\n        AND ecm:parentId = ? AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"publish_space_suggestion\">\n      <pattern quoteParameters=\"false\" escapeParameters=\"true\">\n        SELECT * FROM Document WHERE dc:title ILIKE '?%'\n          AND ecm:mixinType = 'PublishSpace' AND ecm:isVersion = 0 AND\n          ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/publisher-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.relations.services.RelationService--graphs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.relations.contrib/Contributions/org.nuxeo.ecm.platform.publisher.relations.contrib--graphs",
              "id": "org.nuxeo.ecm.platform.publisher.relations.contrib--graphs",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.relations.services.RelationService",
                "name": "org.nuxeo.ecm.platform.relations.services.RelationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"graphs\" target=\"org.nuxeo.ecm.platform.relations.services.RelationService\">\n    <graph name=\"publication\" type=\"core\">\n      <option name=\"doctype\">PublicationRelation</option>\n      <namespaces>\n        <namespace name=\"rdf\">\n          http://www.w3.org/1999/02/22-rdf-syntax-ns#\n        </namespace>\n        <namespace name=\"dcterms\">http://purl.org/dc/terms/1.1/</namespace>\n        <namespace name=\"nuxeo\">http://www.nuxeo.org/document/uid/</namespace>\n        <namespace name=\"pTree\">http://www.nuxeo.org/publication/tree/</namespace>\n      </namespaces>\n    </graph>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.relations.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.relations.contrib",
          "requirements": [],
          "resolutionOrder": 455,
          "services": [],
          "startOrder": 410,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.publisher.relations.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.relations.services.RelationService\"\n    point=\"graphs\">\n    <graph name=\"publication\" type=\"core\">\n      <option name=\"doctype\">PublicationRelation</option>\n      <namespaces>\n        <namespace name=\"rdf\">\n          http://www.w3.org/1999/02/22-rdf-syntax-ns#\n        </namespace>\n        <namespace name=\"dcterms\">http://purl.org/dc/terms/1.1/</namespace>\n        <namespace name=\"nuxeo\">http://www.nuxeo.org/document/uid/</namespace>\n        <namespace name=\"pTree\">http://www.nuxeo.org/publication/tree/</namespace>\n      </namespaces>\n    </graph>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/publisher-relations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.audit.contrib/Contributions/org.nuxeo.ecm.platform.publisher.audit.contrib--event",
              "id": "org.nuxeo.ecm.platform.publisher.audit.contrib--event",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n\n    <event name=\"documentPublished\"/>\n    <event name=\"documentUnPublished\"/>\n    <event name=\"documentSubmitedForPublication\"/>\n    <event name=\"documentPublicationRejected\"/>\n    <event name=\"documentPublicationApproved\"/>\n    <event name=\"documentWaitingPublication\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.audit.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.audit.contrib",
          "requirements": [],
          "resolutionOrder": 456,
          "services": [],
          "startOrder": 406,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.publisher.audit.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\"\n      point=\"event\">\n\n    <event name=\"documentPublished\"/>\n    <event name=\"documentUnPublished\"/>\n    <event name=\"documentSubmitedForPublication\"/>\n    <event name=\"documentPublicationRejected\"/>\n    <event name=\"documentPublicationApproved\"/>\n    <event name=\"documentWaitingPublication\"/>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/publisher-audit-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publishing.permissions.contrib/Contributions/org.nuxeo.ecm.platform.publishing.permissions.contrib--permissions",
              "id": "org.nuxeo.ecm.platform.publishing.permissions.contrib--permissions",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"permissions\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <permission name=\"CanAskForPublishing\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publishing.permissions.contrib/Contributions/org.nuxeo.ecm.platform.publishing.permissions.contrib--permissionsVisibility",
              "id": "org.nuxeo.ecm.platform.publishing.permissions.contrib--permissionsVisibility",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"permissionsVisibility\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <visibility type=\"Section\">\n      <item order=\"150\" show=\"true\">CanAskForPublishing</item>\n    </visibility>\n\n    <visibility type=\"SectionRoot\">\n      <item order=\"150\" show=\"true\">CanAskForPublishing</item>\n    </visibility>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publishing.permissions.contrib",
          "name": "org.nuxeo.ecm.platform.publishing.permissions.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.security.defaultPermissions"
          ],
          "resolutionOrder": 457,
          "services": [],
          "startOrder": 415,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.publishing.permissions.contrib\">\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=\"CanAskForPublishing\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissionsVisibility\">\n\n    <visibility type=\"Section\">\n      <item show=\"true\" order=\"150\">CanAskForPublishing</item>\n    </visibility>\n\n    <visibility type=\"SectionRoot\">\n      <item show=\"true\" order=\"150\">CanAskForPublishing</item>\n    </visibility>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/publisher-permissions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--factory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.task.contrib/Contributions/org.nuxeo.ecm.platform.publisher.task.contrib--factory",
              "id": "org.nuxeo.ecm.platform.publisher.task.contrib--factory",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "name": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"factory\" target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\">\n\n    <publishedDocumentFactory class=\"org.nuxeo.ecm.platform.publisher.task.CoreProxyWithWorkflowFactory\" name=\"CoreProxyWithWorkflow\" validatorsRule=\"CoreValidatorsRule\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl--treeInstance",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.task.contrib/Contributions/org.nuxeo.ecm.platform.publisher.task.contrib--treeInstance",
              "id": "org.nuxeo.ecm.platform.publisher.task.contrib--treeInstance",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "name": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"treeInstance\" target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\">\n\n    <publicationTreeConfig factory=\"CoreProxyWithWorkflow\" name=\"DefaultSectionsTree\" title=\"label.publication.tree.local.sections\" tree=\"RootSectionsCoreTree\">\n      <parameters>\n        <!-- <parameter name=\"RootPath\">/default-domain/sections</parameter> -->\n        <parameter name=\"RelativeRootPath\">/sections</parameter>\n        <parameter name=\"enableSnapshot\">true</parameter>\n        <parameter name=\"iconExpanded\">/icons/folder_open.gif</parameter>\n        <parameter name=\"iconCollapsed\">/icons/folder.gif</parameter>\n      </parameters>\n    </publicationTreeConfig>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.task.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.task.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.publisher.contrib"
          ],
          "resolutionOrder": 458,
          "services": [],
          "startOrder": 411,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.publisher.task.contrib\">\n\n <require>org.nuxeo.ecm.platform.publisher.contrib</require>\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\"\n      point=\"factory\">\n\n    <publishedDocumentFactory name=\"CoreProxyWithWorkflow\"\n                              class=\"org.nuxeo.ecm.platform.publisher.task.CoreProxyWithWorkflowFactory\"\n                              validatorsRule=\"CoreValidatorsRule\"/>\n\n  </extension>\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\"\n      point=\"treeInstance\">\n\n    <publicationTreeConfig name=\"DefaultSectionsTree\" tree=\"RootSectionsCoreTree\"\n                           factory=\"CoreProxyWithWorkflow\"\n                           title=\"label.publication.tree.local.sections\">\n      <parameters>\n        <!-- <parameter name=\"RootPath\">/default-domain/sections</parameter> -->\n        <parameter name=\"RelativeRootPath\">/sections</parameter>\n        <parameter name=\"enableSnapshot\">true</parameter>\n        <parameter name=\"iconExpanded\">/icons/folder_open.gif</parameter>\n        <parameter name=\"iconCollapsed\">/icons/folder.gif</parameter>\n      </parameters>\n    </publicationTreeConfig>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/publisher-task-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-publisher-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher",
      "id": "org.nuxeo.ecm.platform.publisher",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM Publisher Service\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.publisher;singleton:=true\r\nNuxeo-Component: OSGI-INF/publisher-framework.xml,OSGI-INF/publisher-con\r\n trib.xml,OSGI-INF/publisher-listeners-contrib.xml,OSGI-INF/publisher-ty\r\n pe-contrib.xml,OSGI-INF/publisher-pageprovider-contrib.xml,OSGI-INF/pub\r\n lisher-relations-contrib.xml,OSGI-INF/publisher-audit-contrib.xml,OSGI-\r\n INF/publisher-permissions-contrib.xml,OSGI-INF/publisher-task-contrib.x\r\n ml\r\n\r\n",
      "maxResolutionOrder": 458,
      "minResolutionOrder": 450,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-connect-update",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.connect.update"
        ],
        "hierarchyPath": "/grp:org.nuxeo.connect",
        "id": "grp:org.nuxeo.connect",
        "name": "org.nuxeo.connect",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.connect.update",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.connect.update.PackageUpdateComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.connect/org.nuxeo.connect.update/org.nuxeo.connect.update.PackageUpdateService",
          "name": "org.nuxeo.connect.update.PackageUpdateService",
          "requirements": [
            "org.nuxeo.connect.client.ConnectClientComponent"
          ],
          "resolutionOrder": 82,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.connect.update.PackageUpdateService",
              "hierarchyPath": "/grp:org.nuxeo.connect/org.nuxeo.connect.update/org.nuxeo.connect.update.PackageUpdateService/Services/org.nuxeo.connect.update.PackageUpdateService",
              "id": "org.nuxeo.connect.update.PackageUpdateService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 782,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.connect.update.PackageUpdateService\">\n\n    <require>org.nuxeo.connect.client.ConnectClientComponent</require>\n\n    <implementation\n        class=\"org.nuxeo.connect.update.PackageUpdateComponent\" />\n\n    <service>\n        <provide\n            interface=\"org.nuxeo.connect.update.PackageUpdateService\" />\n    </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/connect-update-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-connect-update-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.connect/org.nuxeo.connect.update",
      "id": "org.nuxeo.connect.update",
      "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: 1\r\nBundle-Version: 0.0.1\r\nBundle-Name: nuxeo connect update\r\nBundle-SymbolicName: org.nuxeo.connect.update;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/connect-update-service.xml\r\n\r\n",
      "maxResolutionOrder": 82,
      "minResolutionOrder": 82,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-binary-metadata",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.audit.io",
          "org.nuxeo.ecm.default.config",
          "org.nuxeo.ecm.jwt",
          "org.nuxeo.ecm.permissions",
          "org.nuxeo.ecm.platform",
          "org.nuxeo.ecm.platform.api",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.convert",
          "org.nuxeo.ecm.platform.csv.export",
          "org.nuxeo.ecm.platform.dublincore",
          "org.nuxeo.ecm.platform.filemanager",
          "org.nuxeo.ecm.platform.htmlsanitizer",
          "org.nuxeo.ecm.platform.mail",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.threed",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.ecm.webdav",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "org.nuxeo.mongodb.audit",
          "org.nuxeo.search.ui",
          "org.nuxeo.usermapper"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform",
        "id": "grp:org.nuxeo.ecm.platform",
        "name": "org.nuxeo.ecm.platform",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Platform Importer\n\n## About Nuxeo Platform Importer\n\nThe file importer comes as a Java library (with nuxeo runtime service) and a sample JAX-RS interface to launch, monitor and abort import jobs.\nThis project is an on-going project, supported by Nuxeo\n\n## Building\n### How to Build Nuxeo Platform Importer\nBuild the Nuxeo Platform Importer with Maven:\n```$ mvn install -Dmaven.test.skip=true```\n\n## Deploying\nNuxeo Platform Importer is available as two package add-ons [from the Nuxeo Marketplace]\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-platform-importer\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-scan-importer\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Platform Importer is available in our Documentation Center: http://doc.nuxeo.com/x/gYBVAQ\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Nuxeo Platform Importer component:\nhttps://jira.nuxeo.com/browse/NXP/component/10621\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "83bb2a4c6415c9f07db3ab17fa99510c",
            "encoding": "UTF-8",
            "length": 1753,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.binary.metadata",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.binary.metadata.internals.BinaryMetadataComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.binary.metadata",
              "descriptors": [
                "org.nuxeo.binary.metadata.internals.MetadataProcessorDescriptor"
              ],
              "documentation": "<code>\n    <processor class=\"org.nuxeo.binary.metadata.ExifToolProcessor\"\n        id=\"exifTool\" prefix=\"true\"/>\n</code>\n",
              "documentationHtml": "<p>\n</p><pre><code>    &lt;processor class&#61;&#34;org.nuxeo.binary.metadata.ExifToolProcessor&#34;\n        id&#61;&#34;exifTool&#34; prefix&#61;&#34;true&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata/org.nuxeo.binary.metadata/ExtensionPoints/org.nuxeo.binary.metadata--metadataProcessors",
              "id": "org.nuxeo.binary.metadata--metadataProcessors",
              "label": "metadataProcessors (org.nuxeo.binary.metadata)",
              "name": "metadataProcessors",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.binary.metadata",
              "descriptors": [
                "org.nuxeo.binary.metadata.internals.MetadataMappingDescriptor"
              ],
              "documentation": "<code>\n    <metadataMapping blobXPath=\"file:content\" id=\"xmp\"\n        ignorePrefix=\"true\" processor=\"exifTool\">\n        <metadata name=\"tiff:ImageWidth\" xpath=\"xmp:ImageWidth\"/>\n        <metadata name=\"tiff:ImageLength\" xpath=\"xmp:ImageLength\"/>\n        <metadata name=\"xmp:CreatorTool\" xpath=\"xmp:CreatorTool\"/>\n    </metadataMapping>\n</code>\n",
              "documentationHtml": "<p>\n</p><pre><code>    &lt;metadataMapping blobXPath&#61;&#34;file:content&#34; id&#61;&#34;xmp&#34;\n        ignorePrefix&#61;&#34;true&#34; processor&#61;&#34;exifTool&#34;&gt;\n        &lt;metadata name&#61;&#34;tiff:ImageWidth&#34; xpath&#61;&#34;xmp:ImageWidth&#34;/&gt;\n        &lt;metadata name&#61;&#34;tiff:ImageLength&#34; xpath&#61;&#34;xmp:ImageLength&#34;/&gt;\n        &lt;metadata name&#61;&#34;xmp:CreatorTool&#34; xpath&#61;&#34;xmp:CreatorTool&#34;/&gt;\n    &lt;/metadataMapping&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata/org.nuxeo.binary.metadata/ExtensionPoints/org.nuxeo.binary.metadata--metadataMappings",
              "id": "org.nuxeo.binary.metadata--metadataMappings",
              "label": "metadataMappings (org.nuxeo.binary.metadata)",
              "name": "metadataMappings",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.binary.metadata",
              "descriptors": [
                "org.nuxeo.binary.metadata.internals.MetadataRuleDescriptor"
              ],
              "documentation": "<code>\n    <rule async=\"false\" enabled=\"true\" id=\"default\" order=\"0\">\n        <metadataMappings>\n            <metadataMapping-id>xmp</metadataMapping-id>\n        </metadataMappings>\n        <filters>\n            <filter-id>hasXMPFacet</filter-id>\n        </filters>\n    </rule>\n</code>\n",
              "documentationHtml": "<p>\n</p><pre><code>    &lt;rule async&#61;&#34;false&#34; enabled&#61;&#34;true&#34; id&#61;&#34;default&#34; order&#61;&#34;0&#34;&gt;\n        &lt;metadataMappings&gt;\n            &lt;metadataMapping-id&gt;xmp&lt;/metadataMapping-id&gt;\n        &lt;/metadataMappings&gt;\n        &lt;filters&gt;\n            &lt;filter-id&gt;hasXMPFacet&lt;/filter-id&gt;\n        &lt;/filters&gt;\n    &lt;/rule&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata/org.nuxeo.binary.metadata/ExtensionPoints/org.nuxeo.binary.metadata--metadataRules",
              "id": "org.nuxeo.binary.metadata--metadataRules",
              "label": "metadataRules (org.nuxeo.binary.metadata)",
              "name": "metadataRules",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata/org.nuxeo.binary.metadata/Contributions/org.nuxeo.binary.metadata--listener",
              "id": "org.nuxeo.binary.metadata--listener",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener class=\"org.nuxeo.binary.metadata.internals.listeners.BinaryMetadataSyncListener\" name=\"binaryMetadataSyncListener\" priority=\"100\">\n      <event>aboutToCreate</event>\n      <event>documentCreated</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata/org.nuxeo.binary.metadata/Contributions/org.nuxeo.binary.metadata--operations",
              "id": "org.nuxeo.binary.metadata--operations",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.binary.metadata.internals.operations.WriteMetadataToBinaryFromDocument\"/>\n    <operation class=\"org.nuxeo.binary.metadata.internals.operations.WriteMetadataToBinaryFromContext\"/>\n    <operation class=\"org.nuxeo.binary.metadata.internals.operations.TriggerMetadataMappingOnDocument\"/>\n    <operation class=\"org.nuxeo.binary.metadata.internals.operations.ReadMetadataFromBinaryToContext\"/>\n    <operation class=\"org.nuxeo.binary.metadata.internals.operations.ReadMetadataFromBinary\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata/org.nuxeo.binary.metadata",
          "name": "org.nuxeo.binary.metadata",
          "requirements": [],
          "resolutionOrder": 75,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.binary.metadata",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata/org.nuxeo.binary.metadata/Services/org.nuxeo.binary.metadata.api.BinaryMetadataService",
              "id": "org.nuxeo.binary.metadata.api.BinaryMetadataService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 779,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.binary.metadata\">\n  <implementation\n          class=\"org.nuxeo.binary.metadata.internals.BinaryMetadataComponent\"/>\n  <service>\n    <provide\n            interface=\"org.nuxeo.binary.metadata.api.BinaryMetadataService\"/>\n  </service>\n\n  <extension-point name=\"metadataProcessors\">\n    <object class=\"org.nuxeo.binary.metadata.internals.MetadataProcessorDescriptor\"/>\n    <documentation>\n      <code>\n        <processor id=\"exifTool\"\n                   class=\"org.nuxeo.binary.metadata.ExifToolProcessor\"\n                   prefix=\"true\"/>\n      </code>\n    </documentation>\n  </extension-point>\n\n  <extension-point name=\"metadataMappings\">\n    <object\n            class=\"org.nuxeo.binary.metadata.internals.MetadataMappingDescriptor\"/>\n    <documentation>\n      <code>\n        <metadataMapping id=\"xmp\" processor=\"exifTool\" blobXPath=\"file:content\"\n                         ignorePrefix=\"true\">\n          <metadata name=\"tiff:ImageWidth\" xpath=\"xmp:ImageWidth\"/>\n          <metadata name=\"tiff:ImageLength\" xpath=\"xmp:ImageLength\"/>\n          <metadata name=\"xmp:CreatorTool\" xpath=\"xmp:CreatorTool\"/>\n        </metadataMapping>\n      </code>\n    </documentation>\n  </extension-point>\n\n  <extension-point name=\"metadataRules\">\n    <object\n            class=\"org.nuxeo.binary.metadata.internals.MetadataRuleDescriptor\"/>\n    <documentation>\n      <code>\n        <rule id=\"default\" order=\"0\" enabled=\"true\" async=\"false\">\n          <metadataMappings>\n            <metadataMapping-id>xmp</metadataMapping-id>\n          </metadataMappings>\n          <filters>\n            <filter-id>hasXMPFacet</filter-id>\n          </filters>\n        </rule>\n      </code>\n    </documentation>\n  </extension-point>\n\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n             point=\"listener\">\n    <listener name=\"binaryMetadataSyncListener\"\n              class=\"org.nuxeo.binary.metadata.internals.listeners.BinaryMetadataSyncListener\"\n              priority=\"100\">\n      <event>aboutToCreate</event>\n      <event>documentCreated</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n             point=\"operations\">\n    <operation\n            class=\"org.nuxeo.binary.metadata.internals.operations.WriteMetadataToBinaryFromDocument\"/>\n    <operation\n            class=\"org.nuxeo.binary.metadata.internals.operations.WriteMetadataToBinaryFromContext\"/>\n    <operation\n            class=\"org.nuxeo.binary.metadata.internals.operations.TriggerMetadataMappingOnDocument\"/>\n    <operation\n            class=\"org.nuxeo.binary.metadata.internals.operations.ReadMetadataFromBinaryToContext\"/>\n    <operation\n            class=\"org.nuxeo.binary.metadata.internals.operations.ReadMetadataFromBinary\"/>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/binary-metadata-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.binary.metadata--metadataProcessors",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata/org.nuxeo.binary.metadata.contribs/Contributions/org.nuxeo.binary.metadata.contribs--metadataProcessors",
              "id": "org.nuxeo.binary.metadata.contribs--metadataProcessors",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.binary.metadata",
                "name": "org.nuxeo.binary.metadata",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"metadataProcessors\" target=\"org.nuxeo.binary.metadata\">\n    <processor class=\"org.nuxeo.binary.metadata.internals.ExifToolProcessor\" id=\"exifTool\" prefix=\"true\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--environment",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata/org.nuxeo.binary.metadata.contribs/Contributions/org.nuxeo.binary.metadata.contribs--environment",
              "id": "org.nuxeo.binary.metadata.contribs--environment",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"environment\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n    <environment name=\"exiftool\">\n      <parameters>\n        <!-- See http://search.cpan.org/dist/PAR/lib/PAR.pm#Notes -->\n        <parameter name=\"PAR_GLOBAL_TMPDIR\">********</parameter>\n        <!-- set PAR_CLEAN cleaning PAR_GLOBAL_TEMP after execution -->\n        <!-- <parameter name=\"PAR_CLEAN\">0</parameter> -->\n      </parameters>\n    </environment>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--command",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata/org.nuxeo.binary.metadata.contribs/Contributions/org.nuxeo.binary.metadata.contribs--command",
              "id": "org.nuxeo.binary.metadata.contribs--command",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n\n    <command enabled=\"true\" name=\"exiftool-read-taglist\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -G -json #{tagList} #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"exiftool-read\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -G -json #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"exiftool-write\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -G -overwrite_original #{tagList} #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n    <!-- Since 7.3 -->\n    <command enabled=\"true\" name=\"exiftool-read-taglist-noprefix\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -json #{tagList} #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n    <!-- Since 7.3 -->\n    <command enabled=\"true\" name=\"exiftool-read-noprefix\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -json #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n    <!-- Since 7.3 -->\n    <command enabled=\"true\" name=\"exiftool-write-noprefix\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -overwrite_original #{tagList} #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata/org.nuxeo.binary.metadata.contribs",
          "name": "org.nuxeo.binary.metadata.contribs",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 310,
          "services": [],
          "startOrder": 47,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.binary.metadata.contribs\">\n\n  <require>org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib</require>\n\n  <extension target=\"org.nuxeo.binary.metadata\" point=\"metadataProcessors\">\n    <processor id=\"exifTool\" class=\"org.nuxeo.binary.metadata.internals.ExifToolProcessor\" prefix=\"true\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\" point=\"environment\">\n    <environment name=\"exiftool\">\n      <parameters>\n        <!-- See http://search.cpan.org/dist/PAR/lib/PAR.pm#Notes -->\n        <parameter name=\"PAR_GLOBAL_TMPDIR\">********</parameter>\n        <!-- set PAR_CLEAN cleaning PAR_GLOBAL_TEMP after execution -->\n        <!-- <parameter name=\"PAR_CLEAN\">0</parameter> -->\n      </parameters>\n    </environment>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\" point=\"command\">\n\n    <command name=\"exiftool-read-taglist\" enabled=\"true\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -G -json #{tagList} #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n    <command name=\"exiftool-read\" enabled=\"true\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -G -json #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n    <command name=\"exiftool-write\" enabled=\"true\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -G -overwrite_original #{tagList} #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n    <!-- Since 7.3 -->\n    <command name=\"exiftool-read-taglist-noprefix\" enabled=\"true\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -json #{tagList} #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n    <!-- Since 7.3 -->\n    <command name=\"exiftool-read-noprefix\" enabled=\"true\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -json #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n    <!-- Since 7.3 -->\n    <command name=\"exiftool-write-noprefix\" enabled=\"true\">\n      <commandLine>exiftool</commandLine>\n      <parameterString>-m -q -q -overwrite_original #{tagList} #{inFilePath}</parameterString>\n      <installationDirective>You need to install exiftool</installationDirective>\n    </command>\n\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/binary-metadata-default-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-binary-metadata-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.binary.metadata",
      "id": "org.nuxeo.binary.metadata",
      "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-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: nuxeo-binary-metadata\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.7\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.binary.metadata\r\nNuxeo-Component: OSGI-INF/binary-metadata-service.xml,OSGI-INF/binary-me\r\n tadata-default-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 310,
      "minResolutionOrder": 75,
      "packages": [],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "#Nuxeo Binary Metadata\n\n## General information and motivation\n\nThe **Nuxeo** addon _binary-metadata_ gives the ability to extract and rewrite binaries metadata through Nuxeo platform.\n- Use by default [Exif Tool|http://www.sno.phy.queensu.ca/~phil/exiftool/]\n- Let contributing other metadata processors\n\n## Documentation\n\n[Nuxeo Binary Metadata Documentation](http://doc.nuxeo.com/x/w4JkAQ)\n\n# Building\n\n    mvn clean install\n\n## Deploying\n\nCopy the built artifacts into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\n##Report & Contribute\n\nWe are glad to welcome new developers on this initiative, and even simple usage feedback is great.\n- Ask your questions on [Nuxeo Answers](http://answers.nuxeo.com)\n- Report issues on this GitHub repository (see [issues link](http://github.com/nuxeo/nuxeo-binary-metadata/issues) on the right)\n- Contribute: Send pull requests!\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "9cdb9663014adc8a07f63b2e3968f156",
        "encoding": "UTF-8",
        "length": 1575,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-virtualnavigation-core-contrib",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.platform.virtualnavigation.types",
          "org.nuxeo.platform.virtualnavigation.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.platform.virtualnavigation",
        "id": "grp:org.nuxeo.platform.virtualnavigation",
        "name": "org.nuxeo.platform.virtualnavigation",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.platform.virtualnavigation.types",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.platform.virtualnavigation/org.nuxeo.platform.virtualnavigation.types/org.nuxeo.virtualnav.coreTypes/Contributions/org.nuxeo.virtualnav.coreTypes--schema",
              "id": "org.nuxeo.virtualnav.coreTypes--schema",
              "registrationOrder": 42,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"querynav\" src=\"schemas/querynav.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.platform.virtualnavigation/org.nuxeo.platform.virtualnavigation.types/org.nuxeo.virtualnav.coreTypes/Contributions/org.nuxeo.virtualnav.coreTypes--doctype",
              "id": "org.nuxeo.virtualnav.coreTypes--doctype",
              "registrationOrder": 40,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"Document\" name=\"QueryNav\">\n      <schema name=\"querynav\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.platform.virtualnavigation/org.nuxeo.platform.virtualnavigation.types/org.nuxeo.virtualnav.coreTypes",
          "name": "org.nuxeo.virtualnav.coreTypes",
          "requirements": [],
          "resolutionOrder": 603,
          "services": [],
          "startOrder": 754,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.virtualnav.coreTypes\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"querynav\" src=\"schemas/querynav.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <doctype name=\"QueryNav\" extends=\"Document\">\n      <schema name=\"querynav\" />\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-type-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-virtualnavigation-core-contrib-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.platform.virtualnavigation/org.nuxeo.platform.virtualnavigation.types",
      "id": "org.nuxeo.platform.virtualnavigation.types",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: nuxeo-platform-virtualnavigation-types\r\nBundle-SymbolicName: org.nuxeo.platform.virtualnavigation.types;singleto\r\n n:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: core, stateful\r\nProvide-Package: org.nuxeo.platform.virtualnavigation\r\nRequire-Bundle: org.nuxeo.runtime,org.nuxeo.ecm.core.api,org.nuxeo.ecm.c\r\n ore,org.nuxeo.ecm.default.config\r\nNuxeo-Component: OSGI-INF/core-type-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 603,
      "minResolutionOrder": 603,
      "packages": [
        "nuxeo-virtualnavigation"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.runtime",
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.core",
        "org.nuxeo.ecm.default.config"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-web-resources-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.web.resources.api",
          "org.nuxeo.web.resources.core",
          "org.nuxeo.web.resources.jsf",
          "org.nuxeo.web.resources.rest",
          "org.nuxeo.web.resources.wro"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources",
        "id": "grp:org.nuxeo.web.resources",
        "name": "org.nuxeo.web.resources",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.web.resources.api",
      "components": [],
      "fileName": "nuxeo-web-resources-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.api",
      "id": "org.nuxeo.web.resources.api",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240130-104846\r\nBundle-Name: Nuxeo Web Resources API\r\nBundle-SymbolicName: org.nuxeo.web.resources.api;singleton:=true\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: api\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-preview-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.preview.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview",
        "id": "grp:org.nuxeo.ecm.platform.preview",
        "name": "org.nuxeo.ecm.platform.preview",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.preview",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Adapters for preview\n  \n",
          "documentationHtml": "<p>\nAdapters for preview\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapters/Contributions/org.nuxeo.ecm.platform.preview.adapters--adapters",
              "id": "org.nuxeo.ecm.platform.preview.adapters--adapters",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.platform.preview.api.HtmlPreviewAdapter\" factory=\"org.nuxeo.ecm.platform.preview.adapter.PreviewDocumentModelAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapters",
          "name": "org.nuxeo.ecm.platform.preview.adapters",
          "requirements": [],
          "resolutionOrder": 694,
          "services": [],
          "startOrder": 399,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.preview.adapters\">\n  <documentation>\n    Adapters for preview\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.platform.preview.api.HtmlPreviewAdapter\"\n      factory=\"org.nuxeo.ecm.platform.preview.adapter.PreviewDocumentModelAdapterFactory\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
          "declaredStartOrder": null,
          "documentation": "\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
              "descriptors": [
                "org.nuxeo.ecm.platform.preview.adapter.AdapterFactoryDescriptor"
              ],
              "documentation": "\n    @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent/ExtensionPoints/org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--AdapterFactory",
              "id": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--AdapterFactory",
              "label": "AdapterFactory (org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent)",
              "name": "AdapterFactory",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
              "descriptors": [
                "org.nuxeo.ecm.platform.preview.adapter.MimeTypePreviewerDescriptor"
              ],
              "documentation": "\n      Allows to contribute default implementation of preview according to the mime type.\n    \n",
              "documentationHtml": "<p>\nAllows to contribute default implementation of preview according to the mime type.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent/ExtensionPoints/org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--MimeTypePreviewer",
              "id": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--MimeTypePreviewer",
              "label": "MimeTypePreviewer (org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent)",
              "name": "MimeTypePreviewer",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
              "descriptors": [
                "org.nuxeo.ecm.platform.preview.adapter.BlobPostProcessorDescriptor"
              ],
              "documentation": "\n      Allows to contribute post processor to preview blobs after they got retrieved.\n    \n",
              "documentationHtml": "<p>\nAllows to contribute post processor to preview blobs after they got retrieved.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent/ExtensionPoints/org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--blobPostProcessor",
              "id": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--blobPostProcessor",
              "label": "blobPostProcessor (org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent)",
              "name": "blobPostProcessor",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
          "name": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
          "requirements": [],
          "resolutionOrder": 695,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent/Services/org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManager",
              "id": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 863,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\">\n  <implementation\n    class=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\" />\n\n  <documentation>\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManager\" />\n  </service>\n\n  <extension-point name=\"AdapterFactory\">\n    <documentation>\n    @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.preview.adapter.AdapterFactoryDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"MimeTypePreviewer\">\n    <documentation>\n      Allows to contribute default implementation of preview according to the mime type.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.preview.adapter.MimeTypePreviewerDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"blobPostProcessor\">\n    <documentation>\n      Allows to contribute post processor to preview blobs after they got retrieved.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.preview.adapter.BlobPostProcessorDescriptor\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/preview-adapter-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n    Default builtin adapters\n    \n",
              "documentationHtml": "<p>\nDefault builtin adapters\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--AdapterFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapter.contrib/Contributions/org.nuxeo.ecm.platform.preview.adapter.contrib--AdapterFactory",
              "id": "org.nuxeo.ecm.platform.preview.adapter.contrib--AdapterFactory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "name": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"AdapterFactory\" target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\">\n\n    <documentation>\n    Default builtin adapters\n    </documentation>\n\n    <previewAdapter enabled=\"false\" name=\"notePreviewAdapter\">\n      <typeName>Note</typeName>\n      <class>org.nuxeo.ecm.platform.preview.adapter.factories.NotePreviewAdapter</class>\n    </previewAdapter>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--MimeTypePreviewer",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapter.contrib/Contributions/org.nuxeo.ecm.platform.preview.adapter.contrib--MimeTypePreviewer",
              "id": "org.nuxeo.ecm.platform.preview.adapter.contrib--MimeTypePreviewer",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "name": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"MimeTypePreviewer\" target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\">\n      <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.HtmlPreviewer\">\n        <pattern>text/html</pattern>\n      </previewer>\n      <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.PlainTextPreviewer\">\n        <pattern>text/plain</pattern>\n      </previewer>\n      <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.PlainTextPreviewer\">\n        <pattern>text/partial</pattern>\n      </previewer>\n      <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.ZipPreviewer\">\n        <pattern>application/zip</pattern>\n      </previewer>\n    </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapter.contrib",
          "name": "org.nuxeo.ecm.platform.preview.adapter.contrib",
          "requirements": [],
          "resolutionOrder": 696,
          "services": [],
          "startOrder": 398,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.preview.adapter.contrib\">\n  <extension target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\"\n    point=\"AdapterFactory\">\n\n    <documentation>\n    Default builtin adapters\n    </documentation>\n\n    <previewAdapter name=\"notePreviewAdapter\" enabled=\"false\">\n      <typeName>Note</typeName>\n      <class>org.nuxeo.ecm.platform.preview.adapter.factories.NotePreviewAdapter</class>\n    </previewAdapter>\n\n  </extension>\n\n    <extension target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\"\n    point=\"MimeTypePreviewer\">\n      <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.HtmlPreviewer\">\n        <pattern>text/html</pattern>\n      </previewer>\n      <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.PlainTextPreviewer\">\n        <pattern>text/plain</pattern>\n      </previewer>\n      <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.PlainTextPreviewer\">\n        <pattern>text/partial</pattern>\n      </previewer>\n      <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.ZipPreviewer\">\n        <pattern>application/zip</pattern>\n      </previewer>\n    </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/preview-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.convert.preview.plugins/Contributions/org.nuxeo.ecm.platform.convert.preview.plugins--converter",
              "id": "org.nuxeo.ecm.platform.convert.preview.plugins--converter",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <converter class=\"org.nuxeo.ecm.platform.preview.converters.HtmlPreviewConverter\" name=\"any2html\">\n      <destinationMimeType>text/html</destinationMimeType>\n\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n      <sourceMimeType>application/rtf</sourceMimeType>\n      <sourceMimeType>text/csv</sourceMimeType>\n      <sourceMimeType>text/tsv</sourceMimeType>\n      <sourceMimeType>text/partial</sourceMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/msword</sourceMimeType>\n      <sourceMimeType>application/vnd.ms-powerpoint</sourceMimeType>\n      <sourceMimeType>application/vnd.ms-excel</sourceMimeType>\n\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n       application/vnd.openxmlformats-officedocument.wordprocessingml.document\n      </sourceMimeType>\n      <sourceMimeType>\n       application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </sourceMimeType>\n      <sourceMimeType>\n       application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n      </sourceMimeType>\n\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.impress</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.impress.template</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc.template</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.draw</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.draw.template</sourceMimeType>\n\n      <!-- OpenOffice.org 2.x documents -->\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.spreadsheet\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.spreadsheet-template\n      </sourceMimeType>\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation-template\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.graphics\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.graphics-template\n      </sourceMimeType>\n\n      <!-- WordPerfect -->\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n\n    </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.convert.preview.plugins",
          "name": "org.nuxeo.ecm.platform.convert.preview.plugins",
          "requirements": [
            "org.nuxeo.ecm.platform.convert.plugins"
          ],
          "resolutionOrder": 699,
          "services": [],
          "startOrder": 312,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.convert.preview.plugins\">\n\n  <require>org.nuxeo.ecm.platform.convert.plugins</require>\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"\n    point=\"converter\">\n\n    <converter name=\"any2html\" class=\"org.nuxeo.ecm.platform.preview.converters.HtmlPreviewConverter\">\n      <destinationMimeType>text/html</destinationMimeType>\n\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n      <sourceMimeType>application/rtf</sourceMimeType>\n      <sourceMimeType>text/csv</sourceMimeType>\n      <sourceMimeType>text/tsv</sourceMimeType>\n      <sourceMimeType>text/partial</sourceMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/msword</sourceMimeType>\n      <sourceMimeType>application/vnd.ms-powerpoint</sourceMimeType>\n      <sourceMimeType>application/vnd.ms-excel</sourceMimeType>\n\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n       application/vnd.openxmlformats-officedocument.wordprocessingml.document\n      </sourceMimeType>\n      <sourceMimeType>\n       application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </sourceMimeType>\n      <sourceMimeType>\n       application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n      </sourceMimeType>\n\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.impress</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.impress.template</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc.template</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.draw</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.draw.template</sourceMimeType>\n\n      <!-- OpenOffice.org 2.x documents -->\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.spreadsheet\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.spreadsheet-template\n      </sourceMimeType>\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation-template\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.graphics\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.graphics-template\n      </sourceMimeType>\n\n      <!-- WordPerfect -->\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n\n    </converter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/convert-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Core IO registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO registered marshallers set.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.convert.preview.marshallers/Contributions/org.nuxeo.ecm.platform.convert.preview.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.convert.preview.marshallers--marshallers",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- preview document enricher -->\n    <register class=\"org.nuxeo.ecm.platform.preview.io.PreviewJsonEnricher\" enable=\"true\"/>\n    <!-- preview blob enricher -->\n    <register class=\"org.nuxeo.ecm.platform.preview.io.BlobPreviewJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.convert.preview.marshallers",
          "name": "org.nuxeo.ecm.platform.convert.preview.marshallers",
          "requirements": [],
          "resolutionOrder": 700,
          "services": [],
          "startOrder": 311,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.convert.preview.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    <!-- preview document enricher -->\n    <register class=\"org.nuxeo.ecm.platform.preview.io.PreviewJsonEnricher\" enable=\"true\" />\n    <!-- preview blob enricher -->\n    <register class=\"org.nuxeo.ecm.platform.preview.io.BlobPreviewJsonEnricher\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that enables or disables zip files preview.\n    \n",
              "documentationHtml": "<p>\nProperty that enables or disables zip files preview.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.properties/Contributions/org.nuxeo.ecm.platform.preview.properties--configuration",
              "id": "org.nuxeo.ecm.platform.preview.properties--configuration",
              "registrationOrder": 56,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that enables or disables zip files preview.\n    </documentation>\n    <property name=\"nuxeo.preview.zip.enabled\">false</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that enables or disables sanitization on zip files preview.\n    \n",
              "documentationHtml": "<p>\nProperty that enables or disables sanitization on zip files preview.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.properties/Contributions/org.nuxeo.ecm.platform.preview.properties--configuration1",
              "id": "org.nuxeo.ecm.platform.preview.properties--configuration1",
              "registrationOrder": 57,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that enables or disables sanitization on zip files preview.\n    </documentation>\n    <property name=\"nuxeo.preview.zip.sanitize.enabled\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.properties",
          "name": "org.nuxeo.ecm.platform.preview.properties",
          "requirements": [],
          "resolutionOrder": 701,
          "services": [],
          "startOrder": 403,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.preview.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that enables or disables zip files preview.\n    </documentation>\n    <property name=\"nuxeo.preview.zip.enabled\">false</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that enables or disables sanitization on zip files preview.\n    </documentation>\n    <property name=\"nuxeo.preview.zip.sanitize.enabled\">true</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/properties-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-preview-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview",
      "id": "org.nuxeo.ecm.platform.preview",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM Preview Plugin\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.preview;singleton:=true\r\nBundle-Category: web,stateless\r\nRequire-Bundle: org.nuxeo.ecm.platform.ui,org.nuxeo.ecm.platform.convert\r\n ,org.nuxeo.ecm.platform.mimetype.api\r\nNuxeo-Component: OSGI-INF/document-adapter-contrib.xml,OSGI-INF/preview-\r\n adapter-framework.xml,OSGI-INF/preview-adapter-contrib.xml,OSGI-INF/con\r\n vert-service-contrib.xml,OSGI-INF/marshallers-contrib.xml,OSGI-INF/prop\r\n erties-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 701,
      "minResolutionOrder": 694,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.ui",
        "org.nuxeo.ecm.platform.convert",
        "org.nuxeo.ecm.platform.mimetype.api"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-tag",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.tag.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag",
        "id": "grp:org.nuxeo.ecm.platform.tag",
        "name": "org.nuxeo.ecm.platform.tag",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.tag",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.tag.TagServiceImpl",
          "declaredStartOrder": 99,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.TagService",
          "name": "org.nuxeo.ecm.platform.tag.TagService",
          "requirements": [],
          "resolutionOrder": 505,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.tag.TagService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.TagService/Services/org.nuxeo.ecm.platform.tag.TagService",
              "id": "org.nuxeo.ecm.platform.tag.TagService",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.tag.TagService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.TagService/Services/org.nuxeo.ecm.platform.tag.TagServiceImpl",
              "id": "org.nuxeo.ecm.platform.tag.TagServiceImpl",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 771,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.tag.TagService\">\n\n  <implementation class=\"org.nuxeo.ecm.platform.tag.TagServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.tag.TagService\" />\n    <provide interface=\"org.nuxeo.ecm.platform.tag.TagServiceImpl\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/TagService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.coreTypes/Contributions/org.nuxeo.ecm.platform.tag.service.coreTypes--schema",
              "id": "org.nuxeo.ecm.platform.tag.service.coreTypes--schema",
              "registrationOrder": 33,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"tag\" prefix=\"tag\" src=\"schemas/tag.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.coreTypes/Contributions/org.nuxeo.ecm.platform.tag.service.coreTypes--doctype",
              "id": "org.nuxeo.ecm.platform.tag.service.coreTypes--doctype",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"Document\" name=\"Tag\">\n      <schema name=\"tag\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n    <doctype extends=\"Relation\" name=\"Tagging\">\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.coreTypes",
          "name": "org.nuxeo.ecm.platform.tag.service.coreTypes",
          "requirements": [],
          "resolutionOrder": 506,
          "services": [],
          "startOrder": 487,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.tag.service.coreTypes\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"schema\">\n    <schema name=\"tag\" src=\"schemas/tag.xsd\" prefix=\"tag\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"doctype\">\n\n    <doctype name=\"Tag\" extends=\"Document\">\n      <schema name=\"tag\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n    <doctype name=\"Tagging\" extends=\"Relation\">\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/tag-service-core-types.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that enables sanitization on tags.\n    \n",
              "documentationHtml": "<p>\nProperty that enables sanitization on tags.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.tag.service.properties/Contributions/org.nuxeo.tag.service.properties--configuration",
              "id": "org.nuxeo.tag.service.properties--configuration",
              "registrationOrder": 39,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that enables sanitization on tags.\n    </documentation>\n    <property name=\"nuxeo.tag.sanitization.enabled\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.tag.service.properties",
          "name": "org.nuxeo.tag.service.properties",
          "requirements": [],
          "resolutionOrder": 507,
          "services": [],
          "startOrder": 743,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.tag.service.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that enables sanitization on tags.\n    </documentation>\n    <property name=\"nuxeo.tag.sanitization.enabled\">true</property>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/tag-service-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService--queryMaker",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.querymaker/Contributions/org.nuxeo.ecm.platform.tag.service.querymaker--queryMaker",
              "id": "org.nuxeo.ecm.platform.tag.service.querymaker--queryMaker",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
                "name": "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"queryMaker\" target=\"org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService\">\n    <queryMaker name=\"NXTAG\">org.nuxeo.ecm.platform.tag.TagQueryMaker\n    </queryMaker>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.querymaker",
          "name": "org.nuxeo.ecm.platform.tag.service.querymaker",
          "requirements": [],
          "resolutionOrder": 508,
          "services": [],
          "startOrder": 490,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.tag.service.querymaker\"\n  version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService\"\n    point=\"queryMaker\">\n    <queryMaker name=\"NXTAG\">org.nuxeo.ecm.platform.tag.TagQueryMaker\n    </queryMaker>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/tag-querymaker-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.listener/Contributions/org.nuxeo.ecm.platform.tag.service.listener--listener",
              "id": "org.nuxeo.ecm.platform.tag.service.listener--listener",
              "registrationOrder": 36,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.tag.TaggedVersionListener\" name=\"taggedVersionListener\" postCommit=\"true\">\n      <event>documentRestored</event>\n      <event>documentProxyPublished</event>\n      <event>documentRemoved</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.listener",
          "name": "org.nuxeo.ecm.platform.tag.service.listener",
          "requirements": [],
          "resolutionOrder": 509,
          "services": [],
          "startOrder": 488,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.tag.service.listener\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n\n    <listener name=\"taggedVersionListener\" class=\"org.nuxeo.ecm.platform.tag.TaggedVersionListener\"\n      async=\"true\" postCommit=\"true\">\n      <event>documentRestored</event>\n      <event>documentProxyPublished</event>\n      <event>documentRemoved</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/tag-listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.pageprovider/Contributions/org.nuxeo.ecm.platform.tag.service.pageprovider--providers",
              "id": "org.nuxeo.ecm.platform.tag.service.pageprovider--providers",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_DOCUMENT_IDS_FOR_FACETED_TAG\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT DISTINCT ecm:uuid FROM Document WHERE nxtag:tags/*/label = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_DOCUMENT_IDS_FOR_TAG\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT ecm:uuid FROM Tag WHERE tag:label = ? AND ecm:isProxy = 0\n      </pattern>\n      <pageSize>1</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_FIRST_TAGGING_FOR_DOC_AND_TAG\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT ecm:uuid FROM Tagging WHERE relation:source = ? AND\n        relation:target = ?\n      </pattern>\n      <pageSize>1</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_FIRST_TAGGING_FOR_DOC_AND_TAG_AND_USER\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT ecm:uuid FROM Tagging WHERE relation:source = ? AND\n        relation:target = ? AND dc:creator = ?\n      </pattern>\n      <pageSize>1</pageSize>\n    </genericPageProvider>\n\n    <!-- page provider that can be optimized using ES for instance -->\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_TAGS_FOR_DOCUMENT\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT tag:label FROM Tagging WHERE\n        relation:source = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <!-- page provider that should keep on using the VCS storage -->\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_TAGS_FOR_DOCUMENT_CORE\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT tag:label FROM Tagging WHERE\n        relation:source = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_DOCUMENTS_FOR_TAG\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT relation:source FROM Tagging WHERE\n        tag:label = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <!-- page provider that can be optimized using ES for instance -->\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_TAGS_FOR_DOCUMENT_AND_USER\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT tag:label FROM Tagging WHERE\n        relation:source = ? AND dc:creator = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <!-- page provider that should keep on using the VCS storage -->\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_TAGS_FOR_DOCUMENT_AND_USER_CORE\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT tag:label FROM Tagging WHERE\n        relation:source = ? AND dc:creator = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_DOCUMENTS_FOR_TAG_AND_USER\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT relation:source FROM Tagging WHERE\n        tag:label = ? AND dc:creator = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_TAGS_TO_COPY_FOR_DOCUMENT\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT tag:label, dc:created, dc:creator,\n        relation:target FROM Tagging\n        WHERE relation:source = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_FACETED_TAG_SUGGESTIONS\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT nxtag:tags/*1/label FROM Document WHERE nxtag:tags/*1/label LIKE ? AND\n        ecm:isProxy = 0\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_TAG_SUGGESTIONS\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT DISTINCT tag:label FROM Tag WHERE tag:label LIKE ? AND\n        ecm:isProxy = 0\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_TAG_SUGGESTIONS_FOR_USER\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT DISTINCT tag:label FROM Tag WHERE tag:label LIKE ? AND\n        ecm:isProxy = 0\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_ALL_TAGS\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        COUNTSOURCE: SELECT tag:label, relation:source FROM Tagging\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_ALL_TAGS_FOR_USER\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        COUNTSOURCE: SELECT tag:label, relation:source FROM Tagging WHERE\n        dc:creator = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_TAGS_FOR_DOCUMENTS\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        COUNTSOURCE: SELECT tag:label, relation:source FROM Tagging WHERE\n        relation:source IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_TAGS_FOR_DOCUMENTS_AND_USER\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        COUNTSOURCE: SELECT tag:label, relation:source FROM Tagging WHERE\n        relation:source IN ? AND dc:creator = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"GET_TAGGED_DOCUMENTS_UNDER\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT ecm:uuid FROM Document WHERE ecm:path STARTSWITH ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.pageprovider",
          "name": "org.nuxeo.ecm.platform.tag.service.pageprovider",
          "requirements": [],
          "resolutionOrder": 510,
          "services": [],
          "startOrder": 489,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.tag.service.pageprovider\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <genericPageProvider name=\"GET_DOCUMENT_IDS_FOR_FACETED_TAG\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT DISTINCT ecm:uuid FROM Document WHERE nxtag:tags/*/label = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_DOCUMENT_IDS_FOR_TAG\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT ecm:uuid FROM Tag WHERE tag:label = ? AND ecm:isProxy = 0\n      </pattern>\n      <pageSize>1</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_FIRST_TAGGING_FOR_DOC_AND_TAG\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT ecm:uuid FROM Tagging WHERE relation:source = ? AND\n        relation:target = ?\n      </pattern>\n      <pageSize>1</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_FIRST_TAGGING_FOR_DOC_AND_TAG_AND_USER\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT ecm:uuid FROM Tagging WHERE relation:source = ? AND\n        relation:target = ? AND dc:creator = ?\n      </pattern>\n      <pageSize>1</pageSize>\n    </genericPageProvider>\n\n    <!-- page provider that can be optimized using ES for instance -->\n    <genericPageProvider name=\"GET_TAGS_FOR_DOCUMENT\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT tag:label FROM Tagging WHERE\n        relation:source = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <!-- page provider that should keep on using the VCS storage -->\n    <genericPageProvider name=\"GET_TAGS_FOR_DOCUMENT_CORE\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT tag:label FROM Tagging WHERE\n        relation:source = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_DOCUMENTS_FOR_TAG\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT relation:source FROM Tagging WHERE\n        tag:label = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <!-- page provider that can be optimized using ES for instance -->\n    <genericPageProvider name=\"GET_TAGS_FOR_DOCUMENT_AND_USER\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT tag:label FROM Tagging WHERE\n        relation:source = ? AND dc:creator = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <!-- page provider that should keep on using the VCS storage -->\n    <genericPageProvider name=\"GET_TAGS_FOR_DOCUMENT_AND_USER_CORE\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT tag:label FROM Tagging WHERE\n        relation:source = ? AND dc:creator = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_DOCUMENTS_FOR_TAG_AND_USER\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT DISTINCT relation:source FROM Tagging WHERE\n        tag:label = ? AND dc:creator = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_TAGS_TO_COPY_FOR_DOCUMENT\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        TAGISTARGET: SELECT tag:label, dc:created, dc:creator,\n        relation:target FROM Tagging\n        WHERE relation:source = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_FACETED_TAG_SUGGESTIONS\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT nxtag:tags/*1/label FROM Document WHERE nxtag:tags/*1/label LIKE ? AND\n        ecm:isProxy = 0\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_TAG_SUGGESTIONS\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT DISTINCT tag:label FROM Tag WHERE tag:label LIKE ? AND\n        ecm:isProxy = 0\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_TAG_SUGGESTIONS_FOR_USER\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT DISTINCT tag:label FROM Tag WHERE tag:label LIKE ? AND\n        ecm:isProxy = 0\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_ALL_TAGS\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        COUNTSOURCE: SELECT tag:label, relation:source FROM Tagging\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_ALL_TAGS_FOR_USER\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        COUNTSOURCE: SELECT tag:label, relation:source FROM Tagging WHERE\n        dc:creator = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_TAGS_FOR_DOCUMENTS\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        COUNTSOURCE: SELECT tag:label, relation:source FROM Tagging WHERE\n        relation:source IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_TAGS_FOR_DOCUMENTS_AND_USER\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <property name=\"language\">NXTAG</property>\n      <pattern>\n        COUNTSOURCE: SELECT tag:label, relation:source FROM Tagging WHERE\n        relation:source IN ? AND dc:creator = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"GET_TAGGED_DOCUMENTS_UNDER\"\n      class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <property name=\"useUnrestrictedSession\">true</property>\n      <pattern>\n        SELECT ecm:uuid FROM Document WHERE ecm:path STARTSWITH ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/tag-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.operations.contrib/Contributions/org.nuxeo.ecm.platform.tag.operations.contrib--operations",
              "id": "org.nuxeo.ecm.platform.tag.operations.contrib--operations",
              "registrationOrder": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.platform.tag.operations.TagDocument\"/>\n    <operation class=\"org.nuxeo.ecm.platform.tag.operations.UntagDocument\"/>\n    <operation class=\"org.nuxeo.ecm.platform.tag.operations.RemoveDocumentTags\"/>\n    <operation class=\"org.nuxeo.ecm.platform.tag.automation.SuggestTagEntry\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.operations.contrib",
          "name": "org.nuxeo.ecm.platform.tag.operations.contrib",
          "requirements": [],
          "resolutionOrder": 511,
          "services": [],
          "startOrder": 486,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.tag.operations.contrib\" version=\"1.0\">\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n             point=\"operations\">\n    <operation class=\"org.nuxeo.ecm.platform.tag.operations.TagDocument\"/>\n    <operation class=\"org.nuxeo.ecm.platform.tag.operations.UntagDocument\"/>\n    <operation\n            class=\"org.nuxeo.ecm.platform.tag.operations.RemoveDocumentTags\"/>\n    <operation\n      class=\"org.nuxeo.ecm.platform.tag.automation.SuggestTagEntry\" />\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/tag-operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.tags.jsonEnrichers/Contributions/org.nuxeo.ecm.tags.jsonEnrichers--marshallers",
              "id": "org.nuxeo.ecm.tags.jsonEnrichers--marshallers",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.platform.tag.io.TagsJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.tags.jsonEnrichers",
          "name": "org.nuxeo.ecm.tags.jsonEnrichers",
          "requirements": [],
          "resolutionOrder": 512,
          "services": [],
          "startOrder": 593,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.tags.jsonEnrichers\">\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.platform.tag.io.TagsJsonEnricher\"\n      enable=\"true\" />\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/json-enrichers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.tags.schemas/Contributions/org.nuxeo.ecm.tags.schemas--schema",
              "id": "org.nuxeo.ecm.tags.schemas--schema",
              "registrationOrder": 34,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <schema name=\"facetedTag\" prefix=\"nxtag\" src=\"schemas/facetedTag.xsd\"/>\n\n    <property indexOrder=\"ascending\" name=\"tags/*/label\" schema=\"facetedTag\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.tags.schemas/Contributions/org.nuxeo.ecm.tags.schemas--doctype",
              "id": "org.nuxeo.ecm.tags.schemas--doctype",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"NXTag\">\n      <schema name=\"facetedTag\"/>\n    </facet>\n\n    <doctype append=\"true\" name=\"Folder\">\n      <facet name=\"NXTag\"/>\n    </doctype>\n\n    <doctype append=\"true\" name=\"File\">\n      <facet name=\"NXTag\"/>\n    </doctype>\n\n    <doctype append=\"true\" name=\"Note\">\n      <facet name=\"NXTag\"/>\n    </doctype>\n\n    <doctype append=\"true\" name=\"Collection\">\n      <facet name=\"NXTag\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.tags.schemas",
          "name": "org.nuxeo.ecm.tags.schemas",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 513,
          "services": [],
          "startOrder": 594,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.tags.schemas\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n\n    <schema name=\"facetedTag\" src=\"schemas/facetedTag.xsd\" prefix=\"nxtag\" />\n\n    <property schema=\"facetedTag\" name=\"tags/*/label\" indexOrder=\"ascending\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <facet name=\"NXTag\">\n      <schema name=\"facetedTag\" />\n    </facet>\n\n    <doctype name=\"Folder\" append=\"true\">\n      <facet name=\"NXTag\" />\n    </doctype>\n\n    <doctype name=\"File\" append=\"true\">\n      <facet name=\"NXTag\" />\n    </doctype>\n\n    <doctype name=\"Note\" append=\"true\">\n      <facet name=\"NXTag\" />\n    </doctype>\n\n    <doctype name=\"Collection\" append=\"true\">\n      <facet name=\"NXTag\" />\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/faceted-tag-service-core-types.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.versioning.VersioningService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.tags.versioning.policy/Contributions/org.nuxeo.ecm.tags.versioning.policy--policies",
              "id": "org.nuxeo.ecm.tags.versioning.policy--policies",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"policies\" target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n    <policy beforeUpdate=\"true\" id=\"no-versioning-for-faceted-tag-before\" increment=\"NONE\" order=\"3\">\n      <filter-id>no-versioning-faceted-tag-filter</filter-id>\n    </policy>\n    <policy id=\"no-versioning-for-faceted-tag\" increment=\"NONE\" order=\"3\">\n      <filter-id>no-versioning-faceted-tag-filter</filter-id>\n    </policy>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.versioning.VersioningService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.tags.versioning.policy/Contributions/org.nuxeo.ecm.tags.versioning.policy--filters",
              "id": "org.nuxeo.ecm.tags.versioning.policy--filters",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n    <filter class=\"org.nuxeo.ecm.platform.tag.NoVersioningFacetedTagFilter\" id=\"no-versioning-faceted-tag-filter\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.tags.versioning.policy",
          "name": "org.nuxeo.ecm.tags.versioning.policy",
          "requirements": [],
          "resolutionOrder": 516,
          "services": [],
          "startOrder": 596,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.tags.versioning.policy\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" point=\"policies\">\n    <policy id=\"no-versioning-for-faceted-tag-before\" increment=\"NONE\" order=\"3\" beforeUpdate=\"true\">\n      <filter-id>no-versioning-faceted-tag-filter</filter-id>\n    </policy>\n    <policy id=\"no-versioning-for-faceted-tag\" increment=\"NONE\" order=\"3\">\n      <filter-id>no-versioning-faceted-tag-filter</filter-id>\n    </policy>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" point=\"filters\">\n    <filter id=\"no-versioning-faceted-tag-filter\" class=\"org.nuxeo.ecm.platform.tag.NoVersioningFacetedTagFilter\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/faceted-tag-versioning-policy.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-tag-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag",
      "id": "org.nuxeo.ecm.platform.tag",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.tag;core=split\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core,stateful\r\nBundle-Name: Nuxeo ECM Tag Core\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nRequire-Bundle: org.nuxeo.ecm.platform.tag.api;visibility:=reexport\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: false\r\nNuxeo-Component: OSGI-INF/TagService.xml, OSGI-INF/tag-service-core-type\r\n s.xml, OSGI-INF/tag-service-properties.xml, OSGI-INF/tag-querymaker-con\r\n trib.xml, OSGI-INF/tag-listener-contrib.xml, OSGI-INF/tag-pageprovider-\r\n contrib.xml, OSGI-INF/tag-operations-contrib.xml, OSGI-INF/json-enriche\r\n rs-contrib.xml, OSGI-INF/faceted-tag-service-core-types.xml, OSGI-INF/f\r\n aceted-tag-versioning-policy.xml\r\nImport-Package: javax.resource,org.apache.commons.logging,org.nuxeo.comm\r\n on.utils,org.nuxeo.ecm.core.api,org.nuxeo.ecm.core.api.repository,org.n\r\n uxeo.ecm.core.query,org.nuxeo.ecm.core.query.sql,org.nuxeo.ecm.core.sto\r\n rage,org.nuxeo.ecm.core.storage.sql,org.nuxeo.ecm.core.storage.sql.jdbc\r\n ,org.nuxeo.ecm.core.storage.sql.jdbc.db,org.nuxeo.ecm.core.storage.sql.\r\n jdbc.dialect,org.nuxeo.runtime.api,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.tag;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 516,
      "minResolutionOrder": 505,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.tag.api"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-webengine-base",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.webengine.base",
          "org.nuxeo.ecm.webengine.core",
          "org.nuxeo.ecm.webengine.invite",
          "org.nuxeo.ecm.webengine.jaxrs",
          "org.nuxeo.ecm.webengine.ui"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.webengine",
        "id": "grp:org.nuxeo.ecm.webengine",
        "name": "org.nuxeo.ecm.webengine",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.webengine.base",
      "components": [],
      "fileName": "nuxeo-webengine-base-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.webengine",
      "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.base",
      "id": "org.nuxeo.ecm.webengine.base",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.core.rest,org.nuxeo.ecm.core.rest.security\r\n ,org.nuxeo.ecm.webengine.base,org.nuxeo.ecm.webengine.ui.wizard\r\nPrivate-Package: .\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo WebEngine Base\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nRequire-Bundle: org.nuxeo.ecm.webengine.core\r\nNuxeo-WebModule: org.nuxeo.ecm.webengine.app.WebEngineModule\r\nImport-Package: javax.annotation,javax.ejb,javax.servlet,javax.servlet.h\r\n ttp,javax.ws.rs,javax.ws.rs.core,org.apache.commons.logging,org.nuxeo.c\r\n ommon.collections,org.nuxeo.common.utils,org.nuxeo.ecm.core;api=split,o\r\n rg.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.facet,org.nuxeo.\r\n ecm.core.api.model,org.nuxeo.ecm.core.api.security,org.nuxeo.ecm.core.a\r\n pi.security.impl,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm.director\r\n y;api=split,org.nuxeo.ecm.platform.audit.api,org.nuxeo.ecm.platform.com\r\n ment.api,org.nuxeo.ecm.platform.comment.workflow.services,org.nuxeo.ecm\r\n .platform.usermanager,org.nuxeo.ecm.platform.versioning.api,org.nuxeo.e\r\n cm.webengine,org.nuxeo.ecm.webengine.app.impl,org.nuxeo.ecm.webengine.f\r\n orms,org.nuxeo.ecm.webengine.forms.validation,org.nuxeo.ecm.webengine.m\r\n odel.exceptions,org.nuxeo.ecm.webengine.model.impl,org.nuxeo.ecm.webeng\r\n ine.model.io,org.nuxeo.ecm.webengine.util,org.nuxeo.runtime.api,org.nux\r\n eo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.webengine.base;singleton:=true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.webengine.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-apidoc-core",
      "artifactVersion": "2023.0.3",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.apidoc.core",
          "org.nuxeo.apidoc.repo",
          "org.nuxeo.apidoc.webengine"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc",
        "id": "grp:org.nuxeo.apidoc",
        "name": "org.nuxeo.apidoc",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# About Explorer\n\nThese modules provide an API to browse the Nuxeo distribution tree:\n\n    - BundleGroup (maven group or artificial grouping)\n      - Bundle\n        - Component\n          - Service\n          - Extension Points\n          - Contributions\n    - Operations\n    - Packages\n\nThe Nuxeo Distribution can be:\n\n- live: in memory (meaning runtime introspection)\n- persisted: saved in Nuxeo Repository as a tree of Documents\n\nThe following documentation items are also extracted:\n\n- documentation that is built-in Nuxeo Runtime descriptors\n- readme files that may be embedded inside the jar\n\n## What it can be used for\n\n- browse you distribution\n- check that a given contribution is deployed\n- play with Nuxeo Runtime\n\n## Configuration\n\nThe template `explorer-sitemode` enables the nuxeo.conf property `org.nuxeo.apidoc.site.mode` and\ndefines an anonymous user.\nThe property `org.nuxeo.apidoc.site.mode` comes with a more user friendly design and hides the current\n\"live\" distribution from display and API.\n\nThe template `explorer-virtualadmin` disables the usual `Administrator` user creation at database\ninitialization and adds a virtual admin user with name `apidocAdmin`, whose password can be changed using\nnuxeo.conf property `org.nuxeo.apidoc.apidocAdmin.password`.\n\nThe template `explorer-disable-validation` disables validation on documents: it is used as an optimization\nto speed up distributions imports, but should not be used on a Nuxeo instance not dedicated to the explorer\npackage usage.\n\n## Modules\n\nThis plugin is composed of 3 bundles:\n\n- nuxeo-apidoc-core: for the low level API on the live runtime\n- nuxeo-apidoc-repo: for the persistence of exported content on the Nuxeo repository\n- nuxeo-apidoc-webengine: for JAX-RS API and Webview\n",
            "digest": "a5a70df9144c861d8a679d1fccf67ef8",
            "encoding": "UTF-8",
            "length": 1761,
            "mimeType": "text/plain",
            "name": "ReadMe.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.apidoc.core",
      "components": [],
      "fileName": "nuxeo-apidoc-core-2023.0.3.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.core",
      "id": "org.nuxeo.apidoc.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: 1\r\nBundle-Version: 0.0.1\r\nBundle-SymbolicName: org.nuxeo.apidoc.core;singleton:=true\r\nBundle-Name: nuxeo api documentation server\r\nBundle-Vendor: Nuxeo\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [
        "platform-explorer"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "# About Explorer\n\nThese modules provide an API to browse the Nuxeo distribution tree:\n\n    - BundleGroup (maven group or artificial grouping)\n      - Bundle\n        - Component\n          - Service\n          - Extension Points\n          - Contributions\n    - Operations\n    - Packages\n\nThe Nuxeo Distribution can be:\n\n- live: in memory (meaning runtime introspection)\n- persisted: saved in Nuxeo Repository as a tree of Documents\n\nThe following documentation items are also extracted:\n\n- documentation that is built-in Nuxeo Runtime descriptors\n- readme files that may be embedded inside the jar\n\n## What it can be used for\n\n- browse you distribution\n- check that a given contribution is deployed\n- play with Nuxeo Runtime\n\n## Configuration\n\nThe template `explorer-sitemode` enables the nuxeo.conf property `org.nuxeo.apidoc.site.mode` and\ndefines an anonymous user.\nThe property `org.nuxeo.apidoc.site.mode` comes with a more user friendly design and hides the current\n\"live\" distribution from display and API.\n\nThe template `explorer-virtualadmin` disables the usual `Administrator` user creation at database\ninitialization and adds a virtual admin user with name `apidocAdmin`, whose password can be changed using\nnuxeo.conf property `org.nuxeo.apidoc.apidocAdmin.password`.\n\nThe template `explorer-disable-validation` disables validation on documents: it is used as an optimization\nto speed up distributions imports, but should not be used on a Nuxeo instance not dedicated to the explorer\npackage usage.\n\n## Modules\n\nThis plugin is composed of 3 bundles:\n\n- nuxeo-apidoc-core: for the low level API on the live runtime\n- nuxeo-apidoc-repo: for the persistence of exported content on the Nuxeo repository\n- nuxeo-apidoc-webengine: for JAX-RS API and Webview\n",
        "digest": "a5a70df9144c861d8a679d1fccf67ef8",
        "encoding": "UTF-8",
        "length": 1761,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "readme": {
        "blobProviderId": "default",
        "content": "## About nuxeo-apidoc-core\n\nThis bundle provides an API to browse the Nuxeo distribution tree:\n\n    - BundleGroup (maven group or artificial grouping)\n      - Bundle\n        - Component\n          - Service\n          - Extension Points\n          - Contributions\n    - Operations\n    - Packages\n\nThis API has 2 implementations:\n - org.nuxeo.apidoc.introspection: Nuxeo Runtime in memory introspection\n - org.nuxeo.apidoc.adapters: DocumentModel adapters implementing the same API\n\nThe following documentation items are also extracted:\n - documentation that is built-in Nuxeo Runtime descriptors\n - readme files that may be embedded inside the jar\n\nThe service is made pluggable in two ways:\n - the plugins extension point allows to:\n    - add more introspection to the live runtime\n    - persist this introspection\n    - display this introspection in the webengine UI\n - the exports extension point allows to generate custom exports from a live distribution\n",
        "digest": "e39fbcaf23f8bd511b34e291c2b605af",
        "encoding": "UTF-8",
        "length": 956,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "requirements": [],
      "version": "2023.0.3"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-liveconnect",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.liveconnect"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect",
        "id": "grp:org.nuxeo.ecm.liveconnect",
        "name": "org.nuxeo.ecm.liveconnect",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.liveconnect",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.core.types/Contributions/org.nuxeo.ecm.liveconnect.core.types--schema",
              "id": "org.nuxeo.ecm.liveconnect.core.types--schema",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"blobconversions\" prefix=\"blobconversions\" src=\"schemas/blobconversions.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.core.types/Contributions/org.nuxeo.ecm.liveconnect.core.types--doctype",
              "id": "org.nuxeo.ecm.liveconnect.core.types--doctype",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"BlobConversions\">\n      <schema name=\"blobconversions\"/>\n    </facet>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.core.types",
          "name": "org.nuxeo.ecm.liveconnect.core.types",
          "requirements": [],
          "resolutionOrder": 223,
          "services": [],
          "startOrder": 218,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.liveconnect.core.types\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"blobconversions\" src=\"schemas/blobconversions.xsd\" prefix=\"blobconversions\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <facet name=\"BlobConversions\">\n      <schema name=\"blobconversions\" />\n    </facet>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/liveconnect-core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scheduler.SchedulerService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.scheduler/Contributions/org.nuxeo.ecm.liveconnect.scheduler--schedule",
              "id": "org.nuxeo.ecm.liveconnect.scheduler--schedule",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scheduler.SchedulerService",
                "name": "org.nuxeo.ecm.core.scheduler.SchedulerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\">\n    <schedule id=\"blobProviderDocumentUpdate\">\n      <event>blobProviderDocumentUpdateEvent</event>\n      <!-- cleanup every 30 sec  -->\n      <!-- cronExpression>0/30 * * * * ?</cronExpression-->\n      <!-- every day at 11.59 PM -->\n      <cronExpression>0 0/5 * * * ?</cronExpression>\n    </schedule>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.scheduler/Contributions/org.nuxeo.ecm.liveconnect.scheduler--listener",
              "id": "org.nuxeo.ecm.liveconnect.scheduler--listener",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener class=\"org.nuxeo.ecm.liveconnect.update.listener.BlobProviderDocumentsUpdateListener\" name=\"blobProviderDocumentUpdate\">\n      <event>blobProviderDocumentUpdateEvent</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.scheduler",
          "name": "org.nuxeo.ecm.liveconnect.scheduler",
          "requirements": [],
          "resolutionOrder": 224,
          "services": [],
          "startOrder": 224,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.liveconnect.scheduler\">\n\n  <extension target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\"\n    point=\"schedule\">\n    <schedule id=\"blobProviderDocumentUpdate\">\n      <event>blobProviderDocumentUpdateEvent</event>\n      <!-- cleanup every 30 sec  -->\n      <!-- cronExpression>0/30 * * * * ?</cronExpression-->\n      <!-- every day at 11.59 PM -->\n      <cronExpression>0 0/5 * * * ?</cronExpression>\n    </schedule>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"blobProviderDocumentUpdate\"\n      class=\"org.nuxeo.ecm.liveconnect.update.listener.BlobProviderDocumentsUpdateListener\">\n      <event>blobProviderDocumentUpdateEvent</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/liveconnect-scheduler-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.workmanager/Contributions/org.nuxeo.ecm.liveconnect.workmanager--queues",
              "id": "org.nuxeo.ecm.liveconnect.workmanager--queues",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"blobProviderDocumentUpdate\">\n      <maxThreads>2</maxThreads>\n      <category>blobProviderDocumentsUpdate</category>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.workmanager",
          "name": "org.nuxeo.ecm.liveconnect.workmanager",
          "requirements": [],
          "resolutionOrder": 225,
          "services": [],
          "startOrder": 225,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.liveconnect.workmanager\">\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"blobProviderDocumentUpdate\">\n      <maxThreads>2</maxThreads>\n      <category>blobProviderDocumentsUpdate</category>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/liveconnect-workmanager-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.cache.CacheService--caches",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.box.core.cache/Contributions/org.nuxeo.ecm.liveconnect.box.core.cache--caches",
              "id": "org.nuxeo.ecm.liveconnect.box.core.cache--caches",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.cache.CacheService",
                "name": "org.nuxeo.ecm.core.cache.CacheService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"caches\" target=\"org.nuxeo.ecm.core.cache.CacheService\">\n\n    <cache name=\"box\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n      <ttl>60</ttl>\n    </cache>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.box.core.cache",
          "name": "org.nuxeo.ecm.liveconnect.box.core.cache",
          "requirements": [],
          "resolutionOrder": 226,
          "services": [],
          "startOrder": 216,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.liveconnect.box.core.cache\">\n\n  <extension target=\"org.nuxeo.ecm.core.cache.CacheService\" point=\"caches\">\n\n    <cache name=\"box\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n      <ttl>60</ttl>\n    </cache>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/liveconnect-box-cache-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.box.core.pageprovider/Contributions/org.nuxeo.ecm.liveconnect.box.core.pageprovider--providers",
              "id": "org.nuxeo.ecm.liveconnect.box.core.pageprovider--providers",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"box_document_to_be_updated\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n       SELECT * FROM Document WHERE content/data LIKE 'box:%' AND ecm:isVersion = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"ecm:uuid\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.box.core.pageprovider",
          "name": "org.nuxeo.ecm.liveconnect.box.core.pageprovider",
          "requirements": [],
          "resolutionOrder": 227,
          "services": [],
          "startOrder": 217,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.liveconnect.box.core.pageprovider\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider name=\"box_document_to_be_updated\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n       SELECT * FROM Document WHERE content/data LIKE 'box:%' AND ecm:isVersion = 0\n      </pattern>\n      <sort column=\"ecm:uuid\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/liveconnect-box-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.cache.CacheService--caches",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.google.drive.core.cache/Contributions/org.nuxeo.ecm.liveconnect.google.drive.core.cache--caches",
              "id": "org.nuxeo.ecm.liveconnect.google.drive.core.cache--caches",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.cache.CacheService",
                "name": "org.nuxeo.ecm.core.cache.CacheService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"caches\" target=\"org.nuxeo.ecm.core.cache.CacheService\">\n\n    <cache name=\"googleDrive\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n      <ttl>60</ttl>\n    </cache>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.google.drive.core.cache",
          "name": "org.nuxeo.ecm.liveconnect.google.drive.core.cache",
          "requirements": [],
          "resolutionOrder": 228,
          "services": [],
          "startOrder": 220,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.liveconnect.google.drive.core.cache\">\n\n  <extension target=\"org.nuxeo.ecm.core.cache.CacheService\" point=\"caches\">\n\n    <cache name=\"googleDrive\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n      <ttl>60</ttl>\n    </cache>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/liveconnect-googledrive-cache-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.google.drive.core.converters/Contributions/org.nuxeo.ecm.liveconnect.google.drive.core.converters--converter",
              "id": "org.nuxeo.ecm.liveconnect.google.drive.core.converters--converter",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <!-- PDF converter for Google Drive native files -->\n    <converter class=\"org.nuxeo.ecm.liveconnect.google.drive.converter.GoogleDriveBlobConverter\" name=\"googlePDFExport\">\n      <sourceMimeType>application/vnd.google-apps</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.document</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.presentation</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.spreadsheet</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.drawing</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.form</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.fusiontable</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.photo</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.script</sourceMimeType>\n      <destinationMimeType>application/pdf</destinationMimeType>\n    </converter>\n\n    <!-- Text converter for files supporting text export -->\n    <converter class=\"org.nuxeo.ecm.liveconnect.google.drive.converter.GoogleDriveBlobConverter\" name=\"googleTextExport\">\n      <destinationMimeType>text/plain</destinationMimeType>\n      <sourceMimeType>application/vnd.google-apps.document</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.presentation</sourceMimeType>\n    </converter>\n\n    <!-- Text converter for files without a plain text export -->\n    <converter name=\"google2text\">\n      <destinationMimeType>text/plain</destinationMimeType>\n      <sourceMimeType>application/vnd.google-apps.spreadsheet</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.drawing</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.form</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.fusiontable</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.photo</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.script</sourceMimeType>\n      <conversionSteps>\n        <subconverter>googlePDFExport</subconverter>\n        <subconverter>pdf2text</subconverter>\n      </conversionSteps>\n    </converter>\n\n    <!-- HTML converter for files supporting HTML export -->\n    <converter class=\"org.nuxeo.ecm.liveconnect.google.drive.converter.GoogleDriveBlobConverter\" name=\"googleHtmlExport\">\n      <destinationMimeType>text/html</destinationMimeType>\n      <sourceMimeType>application/vnd.google-apps.document</sourceMimeType>\n    </converter>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.google.drive.core.converters",
          "name": "org.nuxeo.ecm.liveconnect.google.drive.core.converters",
          "requirements": [
            "org.nuxeo.ecm.core.convert.plugins"
          ],
          "resolutionOrder": 229,
          "services": [],
          "startOrder": 221,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.liveconnect.google.drive.core.converters\">\n  <require>org.nuxeo.ecm.core.convert.plugins</require>\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"\n             point=\"converter\">\n\n    <!-- PDF converter for Google Drive native files -->\n    <converter name=\"googlePDFExport\" class=\"org.nuxeo.ecm.liveconnect.google.drive.converter.GoogleDriveBlobConverter\">\n      <sourceMimeType>application/vnd.google-apps</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.document</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.presentation</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.spreadsheet</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.drawing</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.form</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.fusiontable</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.photo</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.script</sourceMimeType>\n      <destinationMimeType>application/pdf</destinationMimeType>\n    </converter>\n\n    <!-- Text converter for files supporting text export -->\n    <converter name=\"googleTextExport\" class=\"org.nuxeo.ecm.liveconnect.google.drive.converter.GoogleDriveBlobConverter\">\n      <destinationMimeType>text/plain</destinationMimeType>\n      <sourceMimeType>application/vnd.google-apps.document</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.presentation</sourceMimeType>\n    </converter>\n\n    <!-- Text converter for files without a plain text export -->\n    <converter name=\"google2text\">\n      <destinationMimeType>text/plain</destinationMimeType>\n      <sourceMimeType>application/vnd.google-apps.spreadsheet</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.drawing</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.form</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.fusiontable</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.photo</sourceMimeType>\n      <sourceMimeType>application/vnd.google-apps.script</sourceMimeType>\n      <conversionSteps>\n        <subconverter>googlePDFExport</subconverter>\n        <subconverter>pdf2text</subconverter>\n      </conversionSteps>\n    </converter>\n\n    <!-- HTML converter for files supporting HTML export -->\n    <converter name=\"googleHtmlExport\" class=\"org.nuxeo.ecm.liveconnect.google.drive.converter.GoogleDriveBlobConverter\">\n      <destinationMimeType>text/html</destinationMimeType>\n      <sourceMimeType>application/vnd.google-apps.document</sourceMimeType>\n    </converter>\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/liveconnect-googledrive-convert-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--mimetype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.google.drive.mimetypes/Contributions/org.nuxeo.ecm.liveconnect.google.drive.mimetypes--mimetype",
              "id": "org.nuxeo.ecm.liveconnect.google.drive.mimetypes--mimetype",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
                "name": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"mimetype\" target=\"org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService\">\n\n    <!-- https://developers.google.com/drive/web/mime-types -->\n    <mimetype binary=\"false\" iconPath=\"google_drive.png\" normalized=\"application/vnd.google-apps\">\n      <mimetypes>\n        <mimetype>application/vnd.google-apps.document</mimetype>\n        <mimetype>application/vnd.google-apps.audio</mimetype>\n        <mimetype>application/vnd.google-apps.file</mimetype>\n        <mimetype>application/vnd.google-apps.folder</mimetype>\n        <mimetype>application/vnd.google-apps.form</mimetype>\n        <mimetype>application/vnd.google-apps.fusiontable</mimetype>\n        <mimetype>application/vnd.google-apps.photo</mimetype>\n        <mimetype>application/vnd.google-apps.presentation</mimetype>\n        <mimetype>application/vnd.google-apps.script</mimetype>\n        <mimetype>application/vnd.google-apps.sites</mimetype>\n        <mimetype>application/vnd.google-apps.spreadsheet</mimetype>\n        <mimetype>application/vnd.google-apps.unknown</mimetype>\n        <mimetype>application/vnd.google-apps.video</mimetype>\n      </mimetypes>\n    </mimetype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.google.drive.mimetypes",
          "name": "org.nuxeo.ecm.liveconnect.google.drive.mimetypes",
          "requirements": [],
          "resolutionOrder": 230,
          "services": [],
          "startOrder": 223,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.liveconnect.google.drive.mimetypes\">\n  <extension\n          target=\"org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService\"\n          point=\"mimetype\">\n\n    <!-- https://developers.google.com/drive/web/mime-types -->\n    <mimetype normalized=\"application/vnd.google-apps\" binary=\"false\" iconPath=\"google_drive.png\">\n      <mimetypes>\n        <mimetype>application/vnd.google-apps.document</mimetype>\n        <mimetype>application/vnd.google-apps.audio</mimetype>\n        <mimetype>application/vnd.google-apps.file</mimetype>\n        <mimetype>application/vnd.google-apps.folder</mimetype>\n        <mimetype>application/vnd.google-apps.form</mimetype>\n        <mimetype>application/vnd.google-apps.fusiontable</mimetype>\n        <mimetype>application/vnd.google-apps.photo</mimetype>\n        <mimetype>application/vnd.google-apps.presentation</mimetype>\n        <mimetype>application/vnd.google-apps.script</mimetype>\n        <mimetype>application/vnd.google-apps.sites</mimetype>\n        <mimetype>application/vnd.google-apps.spreadsheet</mimetype>\n        <mimetype>application/vnd.google-apps.unknown</mimetype>\n        <mimetype>application/vnd.google-apps.video</mimetype>\n      </mimetypes>\n    </mimetype>\n\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/liveconnect-googledrive-mimetype-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.google.drive.core.pageprovider/Contributions/org.nuxeo.ecm.liveconnect.google.drive.core.pageprovider--providers",
              "id": "org.nuxeo.ecm.liveconnect.google.drive.core.pageprovider--providers",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"googledrive_document_to_be_updated\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n       SELECT * FROM Document WHERE content/data LIKE 'googledrive:%' AND ecm:isVersion = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"ecm:uuid\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.google.drive.core.pageprovider",
          "name": "org.nuxeo.ecm.liveconnect.google.drive.core.pageprovider",
          "requirements": [],
          "resolutionOrder": 231,
          "services": [],
          "startOrder": 222,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.liveconnect.google.drive.core.pageprovider\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider name=\"googledrive_document_to_be_updated\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n       SELECT * FROM Document WHERE content/data LIKE 'googledrive:%' AND ecm:isVersion = 0\n      </pattern>\n      <sort column=\"ecm:uuid\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/liveconnect-googledrive-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Management of Google Drive configuration.\n  \n",
          "documentationHtml": "<p>\nManagement of Google Drive configuration.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.google.drive.core.GoogleDriveComponent/Contributions/org.nuxeo.ecm.liveconnect.google.drive.core.GoogleDriveComponent--providers",
              "id": "org.nuxeo.ecm.liveconnect.google.drive.core.GoogleDriveComponent--providers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
                "name": "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry\">\n    <provider>\n      <name>googledrive</name>\n      <description>Google Drive</description>\n      <class>org.nuxeo.ecm.liveconnect.google.drive.GoogleOAuth2ServiceProvider</class>\n      <tokenServerURL>https://accounts.google.com/o/oauth2/token</tokenServerURL>\n      <authorizationServerURL>https://accounts.google.com/o/oauth2/auth?access_type=offline&amp;approval_prompt=force</authorizationServerURL>\n      <scope>https://www.googleapis.com/auth/drive</scope>\n      <scope>https://www.googleapis.com/auth/drive.apps.readonly</scope>\n      <scope>email</scope>\n      <clientId/>\n    </provider>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.blob.BlobManager--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.google.drive.core.GoogleDriveComponent/Contributions/org.nuxeo.ecm.liveconnect.google.drive.core.GoogleDriveComponent--configuration",
              "id": "org.nuxeo.ecm.liveconnect.google.drive.core.GoogleDriveComponent--configuration",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.blob.BlobManager",
                "name": "org.nuxeo.ecm.core.blob.BlobManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.ecm.core.blob.BlobManager\">\n    <blobprovider name=\"googledrive\">\n      <class>org.nuxeo.ecm.liveconnect.google.drive.GoogleDriveBlobProvider</class>\n      <property name=\"serviceAccountId\"/>\n      <property name=\"serviceAccountP12Path\"/>\n      <property name=\"clientId\"/>\n    </blobprovider>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.google.drive.core.GoogleDriveComponent",
          "name": "org.nuxeo.ecm.liveconnect.google.drive.core.GoogleDriveComponent",
          "requirements": [
            "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
            "org.nuxeo.ecm.core.blob.BlobManager"
          ],
          "resolutionOrder": 435,
          "services": [],
          "startOrder": 219,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.liveconnect.google.drive.core.GoogleDriveComponent\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.blob.BlobManager</require>\n  <require>org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry</require>\n\n  <documentation>\n    Management of Google Drive configuration.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry\" point=\"providers\">\n    <provider>\n      <name>googledrive</name>\n      <description>Google Drive</description>\n      <class>org.nuxeo.ecm.liveconnect.google.drive.GoogleOAuth2ServiceProvider</class>\n      <tokenServerURL>https://accounts.google.com/o/oauth2/token</tokenServerURL>\n      <authorizationServerURL>https://accounts.google.com/o/oauth2/auth?access_type=offline&amp;approval_prompt=force</authorizationServerURL>\n      <scope>https://www.googleapis.com/auth/drive</scope>\n      <scope>https://www.googleapis.com/auth/drive.apps.readonly</scope>\n      <scope>email</scope>\n      <clientId>${nuxeo.google.clientId:=}</clientId>\n    </provider>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.blob.BlobManager\" point=\"configuration\">\n    <blobprovider name=\"googledrive\">\n      <class>org.nuxeo.ecm.liveconnect.google.drive.GoogleDriveBlobProvider</class>\n      <property name=\"serviceAccountId\">${nuxeo.google.serviceAccountId:=}</property>\n      <property name=\"serviceAccountP12Path\">${nuxeo.google.serviceAccountP12Path:=}</property>\n      <property name=\"clientId\">${nuxeo.google.clientId:=}</property>\n    </blobprovider>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/liveconnect-googledrive-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Management of Box configuration.\n  \n",
          "documentationHtml": "<p>\nManagement of Box configuration.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.box.core.BoxComponent/Contributions/org.nuxeo.ecm.liveconnect.box.core.BoxComponent--providers",
              "id": "org.nuxeo.ecm.liveconnect.box.core.BoxComponent--providers",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
                "name": "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry\">\n    <provider>\n      <name>box</name>\n      <description>Box</description>\n      <class>org.nuxeo.ecm.liveconnect.box.BoxOAuth2ServiceProvider</class>\n      <tokenServerURL>https://app.box.com/api/oauth2/token</tokenServerURL>\n      <authorizationServerURL>https://app.box.com/api/oauth2/authorize?response_type=code</authorizationServerURL>\n      <clientId/>\n    </provider>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.blob.BlobManager--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.box.core.BoxComponent/Contributions/org.nuxeo.ecm.liveconnect.box.core.BoxComponent--configuration",
              "id": "org.nuxeo.ecm.liveconnect.box.core.BoxComponent--configuration",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.blob.BlobManager",
                "name": "org.nuxeo.ecm.core.blob.BlobManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.ecm.core.blob.BlobManager\">\n    <blobprovider name=\"box\">\n      <class>org.nuxeo.ecm.liveconnect.box.BoxBlobProvider</class>\n      <property name=\"clientId\"/>\n    </blobprovider>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect.box.core.BoxComponent",
          "name": "org.nuxeo.ecm.liveconnect.box.core.BoxComponent",
          "requirements": [
            "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
            "org.nuxeo.ecm.core.blob.BlobManager"
          ],
          "resolutionOrder": 436,
          "services": [],
          "startOrder": 215,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.liveconnect.box.core.BoxComponent\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.blob.BlobManager</require>\n  <require>org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry</require>\n\n  <documentation>\n    Management of Box configuration.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry\" point=\"providers\">\n    <provider>\n      <name>box</name>\n      <description>Box</description>\n      <class>org.nuxeo.ecm.liveconnect.box.BoxOAuth2ServiceProvider</class>\n      <tokenServerURL>https://app.box.com/api/oauth2/token</tokenServerURL>\n      <authorizationServerURL>https://app.box.com/api/oauth2/authorize?response_type=code</authorizationServerURL>\n      <clientId>${nuxeo.box.clientId:=}</clientId>\n    </provider>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.blob.BlobManager\" point=\"configuration\">\n    <blobprovider name=\"box\">\n      <class>org.nuxeo.ecm.liveconnect.box.BoxBlobProvider</class>\n      <property name=\"clientId\">${nuxeo.box.clientId:=}</property>\n    </blobprovider>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/liveconnect-box-config.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-liveconnect-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.liveconnect",
      "hierarchyPath": "/grp:org.nuxeo.ecm.liveconnect/org.nuxeo.ecm.liveconnect",
      "id": "org.nuxeo.ecm.liveconnect",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Live Connect\r\nBundle-SymbolicName: org.nuxeo.ecm.liveconnect;singleton:=true\r\nNuxeo-Component: OSGI-INF/liveconnect-core-types-contrib.xml,OSGI-INF/li\r\n veconnect-scheduler-contrib.xml,OSGI-INF/liveconnect-workmanager-contri\r\n b.xml,OSGI-INF/liveconnect-box-cache-config.xml,OSGI-INF/liveconnect-bo\r\n x-config.xml,OSGI-INF/liveconnect-box-pageprovider-contrib.xml,OSGI-INF\r\n /liveconnect-googledrive-cache-config.xml,OSGI-INF/liveconnect-googledr\r\n ive-config.xml,OSGI-INF/liveconnect-googledrive-convert-service-contrib\r\n .xml,OSGI-INF/liveconnect-googledrive-mimetype-contrib.xml,OSGI-INF/liv\r\n econnect-googledrive-pageprovider-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 436,
      "minResolutionOrder": 223,
      "packages": [
        "nuxeo-liveconnect"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-dam",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.dam"
        ],
        "hierarchyPath": "/grp:org.nuxeo.dam",
        "id": "grp:org.nuxeo.dam",
        "name": "org.nuxeo.dam",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.dam",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.dam/org.nuxeo.dam/org.nuxeo.dam.core.types/Contributions/org.nuxeo.dam.core.types--schema",
              "id": "org.nuxeo.dam.core.types--schema",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"assets_search\" src=\"schemas/assets_search.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.dam/org.nuxeo.dam/org.nuxeo.dam.core.types/Contributions/org.nuxeo.dam.core.types--doctype",
              "id": "org.nuxeo.dam.core.types--doctype",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"Document\" name=\"AssetsSearch\">\n      <facet name=\"ContentViewDisplay\"/>\n      <facet name=\"SavedSearch\"/>\n      <facet name=\"HiddenInNavigation\"/>\n      <schema name=\"assets_search\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.dam/org.nuxeo.dam/org.nuxeo.dam.core.types",
          "name": "org.nuxeo.dam.core.types",
          "requirements": [
            "org.nuxeo.ecm.core.schema.TypeService"
          ],
          "resolutionOrder": 172,
          "services": [],
          "startOrder": 60,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.dam.core.types\">\n\n  <require>org.nuxeo.ecm.core.schema.TypeService</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"assets_search\" src=\"schemas/assets_search.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <doctype name=\"AssetsSearch\" extends=\"Document\">\n      <facet name=\"ContentViewDisplay\"/>\n      <facet name=\"SavedSearch\"/>\n      <facet name=\"HiddenInNavigation\"/>\n      <schema name=\"assets_search\"/>\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/dam-core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.dam/org.nuxeo.dam/org.nuxeo.dam.pageprovider/Contributions/org.nuxeo.dam.pageprovider--providers",
              "id": "org.nuxeo.dam.pageprovider--providers",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\" name=\"assets_search\">\n      <searchDocumentType>AssetsSearch</searchDocumentType>\n      <whereClause>\n        <predicate operator=\"FULLTEXT ALL\" parameter=\"ecm:fulltext\">\n          <field name=\"ecm_fulltext\" schema=\"assets_search\"/>\n        </predicate>\n        <fixedPart>ecm:mixinType IN ('Picture', 'Audio', 'Video') AND ecm:isVersion = 0 AND\n          ecm:isTrashed = 0 AND ecm:isProxy=0\n        </fixedPart>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"system_primaryType_agg\" parameter=\"ecm:primaryType\" type=\"terms\">\n          <field name=\"system_primaryType_agg\" schema=\"assets_search\"/>\n        </aggregate>\n        <aggregate id=\"system_mimetype_agg\" parameter=\"file:content/mime-type\" type=\"terms\">\n          <field name=\"system_mimetype_agg\" schema=\"assets_search\"/>\n        </aggregate>\n        <aggregate id=\"asset_width_agg\" parameter=\"picture:info/width\" type=\"range\">\n          <field name=\"asset_width_agg\" schema=\"assets_search\"/>\n          <ranges>\n            <range key=\"to_500_px\" to=\"500.0\"/>\n            <range from=\"500.0\" key=\"from_500_to_1500_px\" to=\"1500.0\"/>\n            <range from=\"1500.0\" key=\"from_1500_to_2000_px\" to=\"2000.0\"/>\n            <range from=\"2000.0\" key=\"from_2000_px\"/>\n          </ranges>\n        </aggregate>\n        <aggregate id=\"asset_height_agg\" parameter=\"picture:info/height\" type=\"range\">\n          <field name=\"asset_height_agg\" schema=\"assets_search\"/>\n          <ranges>\n            <range key=\"to_500_px\" to=\"500.0\"/>\n            <range from=\"500.0\" key=\"from_500_to_1500_px\" to=\"1500.0\"/>\n            <range from=\"1500.0\" key=\"from_1500_to_2000_px\" to=\"2000.0\"/>\n            <range from=\"2000.0\" key=\"from_2000_px\"/>\n          </ranges>\n        </aggregate>\n        <aggregate id=\"color_profile_agg\" parameter=\"picture:info/colorSpace\" type=\"terms\">\n          <field name=\"color_profile_agg\" schema=\"assets_search\"/>\n        </aggregate>\n        <aggregate id=\"color_depth_agg\" parameter=\"picture:info/depth\" type=\"terms\">\n          <field name=\"color_depth_agg\" schema=\"assets_search\"/>\n        </aggregate>\n        <aggregate id=\"video_duration_agg\" parameter=\"vid:info/duration\" type=\"range\">\n          <field name=\"video_duration_agg\" schema=\"assets_search\"/>\n          <ranges>\n            <range key=\"to_30_s\" to=\"30.0\"/>\n            <range from=\"30.0\" key=\"from_30_to_180_s\" to=\"180.0\"/>\n            <range from=\"180.0\" key=\"from_180_to_600_s\" to=\"600.0\"/>\n            <range from=\"600.0\" key=\"from_600_to_1800_s\" to=\"1800.0\"/>\n            <range from=\"1800.0\" key=\"from_1800_s\"/>\n          </ranges>\n        </aggregate>\n      </aggregates>\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.dam/org.nuxeo.dam/org.nuxeo.dam.pageprovider",
          "name": "org.nuxeo.dam.pageprovider",
          "requirements": [
            "org.nuxeo.ecm.platform.query.api.PageProviderService"
          ],
          "resolutionOrder": 461,
          "services": [],
          "startOrder": 61,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.dam.pageprovider\">\n\n  <require>org.nuxeo.ecm.platform.query.api.PageProviderService</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n             point=\"providers\">\n\n    <genericPageProvider name=\"assets_search\" class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\">\n      <searchDocumentType>AssetsSearch</searchDocumentType>\n      <whereClause>\n        <predicate parameter=\"ecm:fulltext\" operator=\"FULLTEXT ALL\">\n          <field schema=\"assets_search\" name=\"ecm_fulltext\"/>\n        </predicate>\n        <fixedPart>ecm:mixinType IN ('Picture', 'Audio', 'Video') AND ecm:isVersion = 0 AND\n          ecm:isTrashed = 0 AND ecm:isProxy=0\n        </fixedPart>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"system_primaryType_agg\" type=\"terms\" parameter=\"ecm:primaryType\">\n          <field schema=\"assets_search\" name=\"system_primaryType_agg\"/>\n        </aggregate>\n        <aggregate id=\"system_mimetype_agg\" type=\"terms\" parameter=\"file:content/mime-type\">\n          <field schema=\"assets_search\" name=\"system_mimetype_agg\"/>\n        </aggregate>\n        <aggregate id=\"asset_width_agg\" type=\"range\" parameter=\"picture:info/width\">\n          <field schema=\"assets_search\" name=\"asset_width_agg\"/>\n          <ranges>\n            <range key=\"to_500_px\" to=\"500.0\"/>\n            <range key=\"from_500_to_1500_px\" from=\"500.0\" to=\"1500.0\"/>\n            <range key=\"from_1500_to_2000_px\" from=\"1500.0\" to=\"2000.0\"/>\n            <range key=\"from_2000_px\" from=\"2000.0\"/>\n          </ranges>\n        </aggregate>\n        <aggregate id=\"asset_height_agg\" type=\"range\" parameter=\"picture:info/height\">\n          <field schema=\"assets_search\" name=\"asset_height_agg\"/>\n          <ranges>\n            <range key=\"to_500_px\" to=\"500.0\"/>\n            <range key=\"from_500_to_1500_px\" from=\"500.0\" to=\"1500.0\"/>\n            <range key=\"from_1500_to_2000_px\" from=\"1500.0\" to=\"2000.0\"/>\n            <range key=\"from_2000_px\" from=\"2000.0\"/>\n          </ranges>\n        </aggregate>\n        <aggregate id=\"color_profile_agg\" type=\"terms\" parameter=\"picture:info/colorSpace\">\n          <field schema=\"assets_search\" name=\"color_profile_agg\"/>\n        </aggregate>\n        <aggregate id=\"color_depth_agg\" type=\"terms\" parameter=\"picture:info/depth\">\n          <field schema=\"assets_search\" name=\"color_depth_agg\"/>\n        </aggregate>\n        <aggregate id=\"video_duration_agg\" type=\"range\" parameter=\"vid:info/duration\">\n          <field schema=\"assets_search\" name=\"video_duration_agg\"/>\n          <ranges>\n            <range key=\"to_30_s\" to=\"30.0\"/>\n            <range key=\"from_30_to_180_s\" from=\"30.0\" to=\"180.0\"/>\n            <range key=\"from_180_to_600_s\" from=\"180.0\" to=\"600.0\"/>\n            <range key=\"from_600_to_1800_s\" from=\"600.0\" to=\"1800.0\"/>\n            <range key=\"from_1800_s\" from=\"1800.0\"/>\n          </ranges>\n        </aggregate>\n      </aggregates>\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/dam-page-provider-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-dam-2023.7.9.jar",
      "groupId": "org.nuxeo.dam",
      "hierarchyPath": "/grp:org.nuxeo.dam/org.nuxeo.dam",
      "id": "org.nuxeo.dam",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: Nuxeo DAM\r\nBundle-SymbolicName: org.nuxeo.dam;singleton=true\r\nNuxeo-Component: OSGI-INF/dam-core-types-contrib.xml,OSGI-INF/dam-page-p\r\n rovider-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 461,
      "minResolutionOrder": 172,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-audio-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.audio.core",
          "org.nuxeo.ecm.platform.audio.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio",
        "id": "grp:org.nuxeo.ecm.platform.audio",
        "name": "org.nuxeo.ecm.platform.audio",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.audio.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.ecm.platform.audio.ecm.types/Contributions/org.nuxeo.ecm.platform.audio.ecm.types--types",
              "id": "org.nuxeo.ecm.platform.audio.ecm.types--types",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n\n    <type id=\"Audio\">\n      <label>Audio</label>\n      <default-view>view_documents</default-view>\n      <icon>/icons/audio.png</icon>\n      <bigIcon>/icons/audio_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <description>Audio.description</description>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>audio_file</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>audio_file</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <layouts mode=\"drive\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n    </type>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.ecm.platform.audio.ecm.types",
          "name": "org.nuxeo.ecm.platform.audio.ecm.types",
          "requirements": [],
          "resolutionOrder": 278,
          "services": [],
          "startOrder": 261,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.audio.ecm.types\">\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n\n    <type id=\"Audio\">\n      <label>Audio</label>\n      <default-view>view_documents</default-view>\n      <icon>/icons/audio.png</icon>\n      <bigIcon>/icons/audio_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <description>Audio.description</description>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>audio_file</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>audio_file</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <layouts mode=\"drive\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n    </type>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/ecm-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.nuxeo.ecm.platform.audio.lifecycle/Contributions/org.nuxeo.nuxeo.ecm.platform.audio.lifecycle--types",
              "id": "org.nuxeo.nuxeo.ecm.platform.audio.lifecycle--types",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"Audio\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.nuxeo.ecm.platform.audio.lifecycle",
          "name": "org.nuxeo.nuxeo.ecm.platform.audio.lifecycle",
          "requirements": [
            "org.nuxeo.ecm.core.LifecycleCoreExtensions"
          ],
          "resolutionOrder": 279,
          "services": [],
          "startOrder": 683,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.nuxeo.ecm.platform.audio.lifecycle\">\n\n  <require>org.nuxeo.ecm.core.LifecycleCoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"types\">\n    <types>\n      <type name=\"Audio\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/lifecycle-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Simple plugin for the file manager. Creates a Audio Document type from\n      any of the matching mime types.\n    \n",
              "documentationHtml": "<p>\nSimple plugin for the file manager. Creates a Audio Document type from\nany of the matching mime types.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService--plugins",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.ecm.platform.audio.filemanager.contrib/Contributions/org.nuxeo.ecm.platform.audio.filemanager.contrib--plugins",
              "id": "org.nuxeo.ecm.platform.audio.filemanager.contrib--plugins",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"plugins\" target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\">\n    <documentation>\n      Simple plugin for the file manager. Creates a Audio Document type from\n      any of the matching mime types.\n    </documentation>\n    <plugin class=\"org.nuxeo.ecm.platform.audio.extension.AudioImporter\" name=\"AudioImporter\" order=\"10\">\n      <filter>audio/.*</filter>\n    </plugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.ecm.platform.audio.filemanager.contrib",
          "name": "org.nuxeo.ecm.platform.audio.filemanager.contrib",
          "requirements": [],
          "resolutionOrder": 280,
          "services": [],
          "startOrder": 262,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.audio.filemanager.contrib\">\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\"\n      point=\"plugins\">\n    <documentation>\n      Simple plugin for the file manager. Creates a Audio Document type from\n      any of the matching mime types.\n    </documentation>\n    <plugin name=\"AudioImporter\"\n            class=\"org.nuxeo.ecm.platform.audio.extension.AudioImporter\"\n            order=\"10\">\n      <filter>audio/.*</filter>\n    </plugin>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/filemanager-importer-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService--thumbnailFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.ecm.platform.audio.service.thumbnailfactory/Contributions/org.nuxeo.ecm.platform.audio.service.thumbnailfactory--thumbnailFactory",
              "id": "org.nuxeo.ecm.platform.audio.service.thumbnailfactory--thumbnailFactory",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "name": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"thumbnailFactory\" target=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailService\">\n    <thumbnailFactory facet=\"Audio\" factoryClass=\"org.nuxeo.ecm.platform.audio.extension.ThumbnailAudioFactory\" name=\"thumbnailAudioFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.ecm.platform.audio.service.thumbnailfactory",
          "name": "org.nuxeo.ecm.platform.audio.service.thumbnailfactory",
          "requirements": [],
          "resolutionOrder": 281,
          "services": [],
          "startOrder": 265,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.audio.service.thumbnailfactory\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailService\"\n    point=\"thumbnailFactory\">\n    <thumbnailFactory name=\"thumbnailAudioFactory\"\n      facet=\"Audio\"\n      factoryClass=\"org.nuxeo.ecm.platform.audio.extension.ThumbnailAudioFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/audio-thumbnailfactory-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.ecm.platform.audio.filters/Contributions/org.nuxeo.ecm.platform.audio.filters--filters",
              "id": "org.nuxeo.ecm.platform.audio.filters--filters",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n    <filter append=\"true\" id=\"allowPDFRendition\">\n      <rule grant=\"false\">\n        <facet>Audio</facet>\n      </rule>\n    </filter>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.ecm.platform.audio.filters",
          "name": "org.nuxeo.ecm.platform.audio.filters",
          "requirements": [
            "org.nuxeo.ecm.platform.rendition.contrib"
          ],
          "resolutionOrder": 481,
          "services": [],
          "startOrder": 263,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.audio.filters\">\n\n  <require>org.nuxeo.ecm.platform.rendition.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\" point=\"filters\">\n    <filter id=\"allowPDFRendition\" append=\"true\">\n      <rule grant=\"false\">\n        <facet>Audio</facet>\n      </rule>\n    </filter>\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/filters-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.nuxeo.ecm.platform.audio.doctype/Contributions/org.nuxeo.nuxeo.ecm.platform.audio.doctype--schema",
              "id": "org.nuxeo.nuxeo.ecm.platform.audio.doctype--schema",
              "registrationOrder": 36,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"audio\" prefix=\"aud\" src=\"schema/audio.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.nuxeo.ecm.platform.audio.doctype/Contributions/org.nuxeo.nuxeo.ecm.platform.audio.doctype--doctype",
              "id": "org.nuxeo.nuxeo.ecm.platform.audio.doctype--doctype",
              "registrationOrder": 32,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"Audio\">\n      <schema name=\"file\"/>\n      <schema name=\"audio\"/>\n    </facet>\n\n    <doctype extends=\"Document\" name=\"Audio\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <facet name=\"Audio\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"NXTag\"/>\n    </doctype>\n\n    <doctype append=\"true\" name=\"Workspace\">\n      <subtypes>\n        <type>Audio</type>\n      </subtypes>\n    </doctype>\n\n    <doctype append=\"true\" name=\"Folder\">\n      <subtypes>\n        <type>Audio</type>\n      </subtypes>\n    </doctype>\n\n    <doctype append=\"true\" name=\"OrderedFolder\">\n      <subtypes>\n        <type>Audio</type>\n      </subtypes>\n    </doctype>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core/org.nuxeo.nuxeo.ecm.platform.audio.doctype",
          "name": "org.nuxeo.nuxeo.ecm.platform.audio.doctype",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions",
            "org.nuxeo.ecm.tags.schemas"
          ],
          "resolutionOrder": 515,
          "services": [],
          "startOrder": 682,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.nuxeo.ecm.platform.audio.doctype\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <require>org.nuxeo.ecm.tags.schemas</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"audio\" src=\"schema/audio.xsd\" prefix=\"aud\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <facet name=\"Audio\">\n      <schema name=\"file\" />\n      <schema name=\"audio\" />\n    </facet>\n\n    <doctype name=\"Audio\" extends=\"Document\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"uid\" />\n      <facet name=\"Audio\" />\n      <facet name=\"Commentable\" />\n      <facet name=\"Versionable\" />\n      <facet name=\"Publishable\" />\n      <facet name=\"NXTag\" />\n    </doctype>\n\n    <doctype name=\"Workspace\" append=\"true\">\n      <subtypes>\n        <type>Audio</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Folder\" append=\"true\">\n      <subtypes>\n        <type>Audio</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"OrderedFolder\" append=\"true\">\n      <subtypes>\n        <type>Audio</type>\n      </subtypes>\n    </doctype>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-types-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-audio-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.core",
      "id": "org.nuxeo.ecm.platform.audio.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: 1\r\nBundle-Version: 2023.7.9-t20240130-105346\r\nBundle-Name: Nuxeo Audio Core\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.audio.core;singleton=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/core-types-contrib.xml,OSGI-INF/ecm-types-cont\r\n rib.xml,OSGI-INF/lifecycle-contrib.xml,OSGI-INF/filemanager-importer-co\r\n ntrib.xml,OSGI-INF/audio-thumbnailfactory-contrib.xml,OSGI-INF/filters-\r\n contrib.xml\r\nEclipse-LazyStart: true\r\nBundle-Category: core,stateful\r\nRequire-Bundle: org.nuxeo.ecm.platform.types.api,org.nuxeo.ecm.core.api\r\nExport-Package: org.nuxeo.ecm.platform.audio.core\r\nBundle-ClassPath: .\r\n\r\n",
      "maxResolutionOrder": 515,
      "minResolutionOrder": 278,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.types.api",
        "org.nuxeo.ecm.core.api"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-web-ui",
      "artifactVersion": "3.1.5-rc.5",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.web.ui"
        ],
        "hierarchyPath": "/grp:org.nuxeo.web.ui",
        "id": "grp:org.nuxeo.web.ui",
        "name": "org.nuxeo.web.ui",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.web.ui",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--startURL",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.web.ui.authentication.contrib/Contributions/org.nuxeo.web.ui.authentication.contrib--startURL",
              "id": "org.nuxeo.web.ui.authentication.contrib--startURL",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "3.1.5-rc.5",
              "xml": "<extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <startURLPattern>\n      <patterns>\n        <pattern>ui</pattern>\n        <pattern>repo</pattern>\n      </patterns>\n    </startURLPattern>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--openUrl",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.web.ui.authentication.contrib/Contributions/org.nuxeo.web.ui.authentication.contrib--openUrl",
              "id": "org.nuxeo.web.ui.authentication.contrib--openUrl",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "3.1.5-rc.5",
              "xml": "<extension point=\"openUrl\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <openUrl name=\"webuiImages\">\n      <grantPattern>/nuxeo/ui/images/.*</grantPattern>\n    </openUrl>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.web.ui.authentication.contrib",
          "name": "org.nuxeo.web.ui.authentication.contrib",
          "requirements": [],
          "resolutionOrder": 922,
          "services": [],
          "startOrder": 756,
          "version": "3.1.5-rc.5",
          "xmlFileContent": "<component name=\"org.nuxeo.web.ui.authentication.contrib\">\n  <extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <startURLPattern>\n      <patterns>\n        <pattern>ui</pattern>\n        <pattern>repo</pattern>\n      </patterns>\n    </startURLPattern>\n  </extension>\n\n  <extension point=\"openUrl\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <openUrl name=\"webuiImages\">\n      <grantPattern>${org.nuxeo.ecm.contextPath}/ui/images/.*</grantPattern>\n    </openUrl>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/auth-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.web.ui.actions/Contributions/org.nuxeo.web.ui.actions--actions",
              "id": "org.nuxeo.web.ui.actions--actions",
              "registrationOrder": 55,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "3.1.5-rc.5",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"webui\" label=\"WEBUI\" link=\"ui\" order=\"90\" type=\"bare_link\">\n      <category>MAIN_TABS</category>\n    </action>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.web.ui.actions",
          "name": "org.nuxeo.web.ui.actions",
          "requirements": [],
          "resolutionOrder": 923,
          "services": [],
          "startOrder": 755,
          "version": "3.1.5-rc.5",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.web.ui.actions\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"webui\" link=\"ui\" label=\"WEBUI\" order=\"90\" type=\"bare_link\">\n      <category>MAIN_TABS</category>\n    </action>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--loginScreen",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.login.startup.page.web.contrib/Contributions/org.nuxeo.login.startup.page.web.contrib--loginScreen",
              "id": "org.nuxeo.login.startup.page.web.contrib--loginScreen",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "3.1.5-rc.5",
              "xml": "<extension point=\"loginScreen\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <loginScreenConfig>\n      <startupPages>\n        <startupPage id=\"web\" priority=\"100\">\n          <path>ui/</path>\n        </startupPage>\n      </startupPages>\n    </loginScreenConfig>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.login.startup.page.web.contrib",
          "name": "org.nuxeo.login.startup.page.web.contrib",
          "requirements": [],
          "resolutionOrder": 924,
          "services": [],
          "startOrder": 679,
          "version": "3.1.5-rc.5",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.login.startup.page.web.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"loginScreen\">\n    <loginScreenConfig>\n      <startupPages>\n        <startupPage id=\"web\" priority=\"100\">\n          <path>ui/</path>\n        </startupPage>\n      </startupPages>\n    </loginScreenConfig>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/login-startup-page-web-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService--codecs",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.url.codec.web.contribs/Contributions/org.nuxeo.url.codec.web.contribs--codecs",
              "id": "org.nuxeo.url.codec.web.contribs--codecs",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "type": "service"
              },
              "version": "3.1.5-rc.5",
              "xml": "<extension point=\"codecs\" target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\">\n    <documentViewCodec class=\"org.nuxeo.web.ui.url.codec.WebNotificationDocumentIdCodec\" enabled=\"true\" name=\"notificationDocId\" prefix=\"doc\" priority=\"100\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.url.codec.web.contribs",
          "name": "org.nuxeo.url.codec.web.contribs",
          "requirements": [],
          "resolutionOrder": 925,
          "services": [],
          "startOrder": 753,
          "version": "3.1.5-rc.5",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.url.codec.web.contribs\">\n\n  <extension target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\" point=\"codecs\">\n    <documentViewCodec name=\"notificationDocId\" enabled=\"true\" prefix=\"doc\" priority=\"100\"\n      class=\"org.nuxeo.web.ui.url.codec.WebNotificationDocumentIdCodec\" />\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/url-codecs-web-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--filterConfig",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.web.ui.request.contrib/Contributions/org.nuxeo.web.ui.request.contrib--filterConfig",
              "id": "org.nuxeo.web.ui.request.contrib--filterConfig",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "3.1.5-rc.5",
              "xml": "<extension point=\"filterConfig\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n    <filterConfig cacheTime=\"31536000\" cached=\"true\" name=\"cached_ui_static\">\n      <!-- if url contains a timestamp param: approximately one year -->\n      <pattern>/nuxeo/ui/.*\\\\?.*ts=.+</pattern>\n    </filterConfig>\n    <filterConfig cacheTime=\"86400\" cached=\"true\" name=\"ui_static\">\n      <!-- For other web ui resources: trade off between agressive caching and HF applying within 24 hours -->\n      <!-- Exclude JS and HTML files due to: https://jira.nuxeo.com/browse/NXP-25595 -->\n      <pattern>/nuxeo/ui/.*\\.(?!(html|js|jsp)$).*</pattern>\n    </filterConfig>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.web.ui.request.contrib",
          "name": "org.nuxeo.web.ui.request.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib"
          ],
          "resolutionOrder": 926,
          "services": [],
          "startOrder": 758,
          "version": "3.1.5-rc.5",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.web.ui.request.contrib\">\n\n  <require>org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\"\n    point=\"filterConfig\">\n    <filterConfig name=\"cached_ui_static\" cached=\"true\" cacheTime=\"31536000\">\n      <!-- if url contains a timestamp param: approximately one year -->\n      <pattern>${org.nuxeo.ecm.contextPath}/ui/.*\\\\?.*ts=.+</pattern>\n    </filterConfig>\n    <filterConfig name=\"ui_static\" cached=\"true\" cacheTime=\"86400\">\n      <!-- For other web ui resources: trade off between agressive caching and HF applying within 24 hours -->\n      <!-- Exclude JS and HTML files due to: https://jira.nuxeo.com/browse/NXP-25595 -->\n      <pattern>${org.nuxeo.ecm.contextPath}/ui/.*\\.(?!(html|js|jsp)$).*</pattern>\n    </filterConfig>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/browser-cache-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.web.ui.properties.contrib/Contributions/org.nuxeo.web.ui.properties.contrib--configuration",
              "id": "org.nuxeo.web.ui.properties.contrib--configuration",
              "registrationOrder": 69,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "3.1.5-rc.5",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <!-- enrichers -->\n    <property list=\"true\" name=\"org.nuxeo.web.ui.enrichers.document\">hasContent</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">firstAccessibleAncestor</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">permissions</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">breadcrumb</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">preview</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">favorites</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">subscribedNotifications</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">thumbnail</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">renditions</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">pendingTasks</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">runnableWorkflows</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">runningWorkflows</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">collections</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">audit</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">subtypes</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">tags</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">publications</property>\n\n    <property list=\"true\" name=\"org.nuxeo.web.ui.enrichers.blob\">appLinks</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.blob\">preview</property>\n\n    <!-- Properties to be fetched when loading current document, default is 'properties' meaning all -->\n    <property list=\"true\" name=\"org.nuxeo.web.ui.fetch.document\">properties</property>\n\n    <!-- Date (time) format -->\n    <property name=\"org.nuxeo.web.ui.dateFormat\">LL</property>\n    <property name=\"org.nuxeo.web.ui.dateTimeFormat\">LLL</property>\n\n    <!-- First Day Of Week -->\n    <property name=\"org.nuxeo.web.ui.firstDayOfWeek\"/>\n\n    <!-- S3 Direct upload -->\n    <property name=\"org.nuxeo.web.ui.s3.useDirectUpload\">false</property>\n    \n    <!-- Redirect to final download url -->\n    <property name=\"org.nuxeo.web.ui.url.followRedirect\">false</property>\n\n    <!-- Max Results for Tables, Grids and Lists plugged on a Nuxeo Page Provider. Falls back on elasticsearch max result window by default. -->\n    <property name=\"org.nuxeo.web.ui.listingMaxItems\">10000</property>\n\n    <!-- Control the enablement of document distribution analytics -->\n    <property name=\"org.nuxeo.web.ui.analytics.documentDistribution.disableThreshold\">${nuxeo.analytics.documentDistribution.disableThreshold}</property>\n\n    <!-- Control the enablement of select all -->\n    <property name=\"org.nuxeo.web.ui.selection.selectAllEnabled\">false</property>\n\n    <!-- Properties to be fetched when loading the user object in user management, default is empty -->\n    <property list=\"true\" name=\"org.nuxeo.web.ui.user.management.fetch.document\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui/org.nuxeo.web.ui.properties.contrib",
          "name": "org.nuxeo.web.ui.properties.contrib",
          "requirements": [],
          "resolutionOrder": 927,
          "services": [],
          "startOrder": 757,
          "version": "3.1.5-rc.5",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.web.ui.properties.contrib\">\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <!-- enrichers -->\n    <property name=\"org.nuxeo.web.ui.enrichers.document\" list=\"true\">hasContent</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">firstAccessibleAncestor</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">permissions</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">breadcrumb</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">preview</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">favorites</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">subscribedNotifications</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">thumbnail</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">renditions</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">pendingTasks</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">runnableWorkflows</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">runningWorkflows</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">collections</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">audit</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">subtypes</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">tags</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">publications</property>\n\n    <property name=\"org.nuxeo.web.ui.enrichers.blob\" list=\"true\">appLinks</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.blob\">preview</property>\n\n    <!-- Properties to be fetched when loading current document, default is 'properties' meaning all -->\n    <property name=\"org.nuxeo.web.ui.fetch.document\" list=\"true\">properties</property>\n\n    <!-- Date (time) format -->\n    <property name=\"org.nuxeo.web.ui.dateFormat\">LL</property>\n    <property name=\"org.nuxeo.web.ui.dateTimeFormat\">LLL</property>\n\n    <!-- First Day Of Week -->\n    <property name=\"org.nuxeo.web.ui.firstDayOfWeek\"></property>\n\n    <!-- S3 Direct upload -->\n    <property name=\"org.nuxeo.web.ui.s3.useDirectUpload\">${nuxeo.s3storage.useDirectUpload:=false}</property>\n    \n    <!-- Redirect to final download url -->\n    <property name=\"org.nuxeo.web.ui.url.followRedirect\">${org.nuxeo.download.url.follow.redirect:=false}</property>\n\n    <!-- Max Results for Tables, Grids and Lists plugged on a Nuxeo Page Provider. Falls back on elasticsearch max result window by default. -->\n    <property name=\"org.nuxeo.web.ui.listingMaxItems\">${org.nuxeo.elasticsearch.provider.maxResultWindow:=10000}</property>\n\n    <!-- Control the enablement of document distribution analytics -->\n    <property name=\"org.nuxeo.web.ui.analytics.documentDistribution.disableThreshold\">${nuxeo.analytics.documentDistribution.disableThreshold}</property>\n\n    <!-- Control the enablement of select all -->\n    <property name=\"org.nuxeo.web.ui.selection.selectAllEnabled\">${nuxeo.selection.selectAllEnabled:=false}</property>\n\n    <!-- Properties to be fetched when loading the user object in user management, default is empty -->\n    <property name=\"org.nuxeo.web.ui.user.management.fetch.document\" list=\"true\"></property>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/web-ui-properties.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-web-ui-3.1.5.jar",
      "groupId": "org.nuxeo.web.ui",
      "hierarchyPath": "/grp:org.nuxeo.web.ui/org.nuxeo.web.ui",
      "id": "org.nuxeo.web.ui",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.10\r\nBundle-ManifestVersion: 1\r\nBundle-Version: 0.0.1\r\nBundle-Vendor: Nuxeo\r\nNuxeo-RequiredBy: org.nuxeo.ecm.war\r\nBundle-Name: Nuxeo Web UI\r\nBundle-SymbolicName: org.nuxeo.web.ui;singleton:=true\r\nNuxeo-Component: OSGI-INF/auth-config.xml, OSGI-INF/actions-contrib.xm\r\n l, OSGI-INF/login-startup-page-web-contrib.xml, OSGI-INF/url-codecs-w\r\n eb-contrib.xml, OSGI-INF/browser-cache-contrib.xml, OSGI-INF/web-ui-p\r\n roperties.xml\r\n\r\n",
      "maxResolutionOrder": 927,
      "minResolutionOrder": 922,
      "packages": [
        "nuxeo-web-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "3.1.5-rc.5"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-video",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.video",
          "org.nuxeo.ecm.platform.video.jsf",
          "org.nuxeo.ecm.platform.video.rest"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video",
        "id": "grp:org.nuxeo.ecm.platform.video",
        "name": "org.nuxeo.ecm.platform.video",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.video",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.platform.video.core.adapters/Contributions/org.nuxeo.platform.video.core.adapters--adapters",
              "id": "org.nuxeo.platform.video.core.adapters--adapters",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n     <adapter class=\"org.nuxeo.ecm.platform.video.VideoDocument\" factory=\"org.nuxeo.ecm.platform.video.adapter.VideoDocumentAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.platform.video.core.adapters",
          "name": "org.nuxeo.platform.video.core.adapters",
          "requirements": [],
          "resolutionOrder": 585,
          "services": [],
          "startOrder": 704,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.platform.video.core.adapters\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\" point=\"adapters\">\n     <adapter class=\"org.nuxeo.ecm.platform.video.VideoDocument\"\n       factory=\"org.nuxeo.ecm.platform.video.adapter.VideoDocumentAdapterFactory\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/adapters-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--command",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.convert.commandline/Contributions/org.nuxeo.ecm.platform.video.convert.commandline--command",
              "id": "org.nuxeo.ecm.platform.video.convert.commandline--command",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n\n    <command enabled=\"true\" name=\"ffmpeg-info\">\n      <commandLine>ffprobe</commandLine>\n      <parameterString> #{inFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"ffmpeg-screenshot\">\n      <commandLine>ffmpeg</commandLine>\n      <!-- It's important to put the -ss option before the -i option for\n        faster (though less accurate) seek / skip to position in the input file -->\n      <parameterString> -y -ss #{position} -i #{inFilePath} -frames:v 1 -f image2 #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"ffmpeg-screenshot-resize\">\n      <commandLine>ffmpeg</commandLine>\n      <!-- It's important to put the -ss option before the -i option for faster\n        (though less accurate) seek / skip to position in the input file.\n\n        The -frames:v 1 option tell to take only one screenshot. -->\n      <parameterString> -y -ss #{position} -i #{inFilePath} -frames:v 1 -f image2 -vf scale=#{width}:#{height} #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"ffmpeg-towebm\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString> -i #{inFilePath} -s #{width}x#{height} -acodec libvorbis -v 0 #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"ffmpeg-tomp4\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString> -i #{inFilePath} -s #{width}x#{height} -acodec aac -strict -2 -pix_fmt yuv420p -vcodec libx264 -v 0 #{outFilePath}</parameterString>\n      <winParameterString> -i #{inFilePath} -s #{width}x#{height} -pix_fmt yuv420p -vcodec libx264 -v 0 #{outFilePath}</winParameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"ffmpeg-toogg\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString> -i #{inFilePath} -s #{width}x#{height} -acodec libvorbis -v 0 #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"ffmpeg-toavi\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString> -i #{inFilePath} -s #{width}x#{height} -q:v 0 -c:v mpeg4 -c:a ac3 #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg.\n      </installationDirective>\n    </command>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.convert.commandline",
          "name": "org.nuxeo.ecm.platform.video.convert.commandline",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 586,
          "services": [],
          "startOrder": 561,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.video.convert.commandline\">\n\n  <require>org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib</require>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\"\n    point=\"command\">\n\n    <command name=\"ffmpeg-info\" enabled=\"true\">\n      <commandLine>ffprobe</commandLine>\n      <parameterString> #{inFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command name=\"ffmpeg-screenshot\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <!-- It's important to put the -ss option before the -i option for\n        faster (though less accurate) seek / skip to position in the input file -->\n      <parameterString> -y -ss #{position} -i #{inFilePath} -frames:v 1 -f image2 #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command name=\"ffmpeg-screenshot-resize\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <!-- It's important to put the -ss option before the -i option for faster\n        (though less accurate) seek / skip to position in the input file.\n\n        The -frames:v 1 option tell to take only one screenshot. -->\n      <parameterString> -y -ss #{position} -i #{inFilePath} -frames:v 1 -f image2 -vf scale=#{width}:#{height} #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command name=\"ffmpeg-towebm\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString> -i #{inFilePath} -s #{width}x#{height} -acodec libvorbis -v 0 #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command name=\"ffmpeg-tomp4\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString> -i #{inFilePath} -s #{width}x#{height} -acodec aac -strict -2 -pix_fmt yuv420p -vcodec libx264 -v 0 #{outFilePath}</parameterString>\n      <winParameterString> -i #{inFilePath} -s #{width}x#{height} -pix_fmt yuv420p -vcodec libx264 -v 0 #{outFilePath}</winParameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command name=\"ffmpeg-toogg\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString> -i #{inFilePath} -s #{width}x#{height} -acodec libvorbis -v 0 #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg from http://ffmpeg.org (apt-get install ffmpeg)\n      </installationDirective>\n    </command>\n\n    <command name=\"ffmpeg-toavi\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString> -i #{inFilePath} -s #{width}x#{height} -q:v 0 -c:v mpeg4 -c:a ac3 #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg.\n      </installationDirective>\n    </command>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/commandline-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.bulk/Contributions/org.nuxeo.ecm.platform.video.bulk--actions",
              "id": "org.nuxeo.ecm.platform.video.bulk--actions",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"1\" bucketSize=\"2\" inputStream=\"bulk/recomputeVideoConversion\" name=\"recomputeVideoConversion\" validationClass=\"org.nuxeo.ecm.platform.video.action.RecomputeVideoConversionsActionValidation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.bulk/Contributions/org.nuxeo.ecm.platform.video.bulk--streamProcessor",
              "id": "org.nuxeo.ecm.platform.video.bulk--streamProcessor",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.platform.video.action.RecomputeVideoConversionsAction\" defaultConcurrency=\"2\" defaultPartitions=\"6\" name=\"recomputeVideoConversions\">\n      <policy continueOnFailure=\"true\" delay=\"5s\" maxDelay=\"10s\" maxRetries=\"1\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.bulk",
          "name": "org.nuxeo.ecm.platform.video.bulk",
          "requirements": [],
          "resolutionOrder": 587,
          "services": [],
          "startOrder": 560,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.video.bulk\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"recomputeVideoConversion\" inputStream=\"bulk/recomputeVideoConversion\" bucketSize=\"2\" batchSize=\"1\"\n      validationClass=\"org.nuxeo.ecm.platform.video.action.RecomputeVideoConversionsActionValidation\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"recomputeVideoConversions\" class=\"org.nuxeo.ecm.platform.video.action.RecomputeVideoConversionsAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.recomputeVideoConversions.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.recomputeVideoConversions.defaultPartitions:=6}\">\n      <policy name=\"default\" maxRetries=\"${nuxeo.bulk.action.recomputeVideoConversions.maxRetries:=1}\" delay=\"5s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/video-bulk-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.convert.converters/Contributions/org.nuxeo.ecm.platform.video.convert.converters--converter",
              "id": "org.nuxeo.ecm.platform.video.convert.converters--converter",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <converter class=\"org.nuxeo.ecm.platform.video.convert.StoryboardConverter\" name=\"videoStoryboard\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.video.convert.ScreenshotConverter\" name=\"videoScreenshot\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.video.convert.VideoConversionConverter\" name=\"convertToWebM\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>video/webm</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ffmpeg-towebm</parameter>\n        <parameter name=\"videoMimeType\">video/webm</parameter>\n        <parameter name=\"videoExtension\">webm</parameter>\n        <parameter name=\"tmpDirectoryPrefix\">convertToWebM</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.video.convert.VideoConversionConverter\" name=\"convertToMP4\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>video/mp4</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ffmpeg-tomp4</parameter>\n        <parameter name=\"videoMimeType\">video/mp4</parameter>\n        <parameter name=\"videoExtension\">mp4</parameter>\n        <parameter name=\"tmpDirectoryPrefix\">convertToMP4</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.video.convert.VideoConversionConverter\" name=\"convertToOgg\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>video/ogg</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ffmpeg-toogg</parameter>\n        <parameter name=\"videoMimeType\">video/ogg</parameter>\n        <parameter name=\"videoExtension\">ogg</parameter>\n        <parameter name=\"tmpDirectoryPrefix\">convertToOgg</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.video.convert.VideoConversionConverter\" name=\"convertToAVI\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>video/x-msvideo</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ffmpeg-toavi</parameter>\n        <parameter name=\"videoMimeType\">video/x-msvideo</parameter>\n        <parameter name=\"videoExtension\">avi</parameter>\n        <parameter name=\"tmpDirectoryPrefix\">convertToAVI</parameter>\n      </parameters>\n    </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.convert.converters",
          "name": "org.nuxeo.ecm.platform.video.convert.converters",
          "requirements": [],
          "resolutionOrder": 588,
          "services": [],
          "startOrder": 562,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.video.convert.converters\">\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"\n    point=\"converter\">\n\n    <converter name=\"videoStoryboard\"\n      class=\"org.nuxeo.ecm.platform.video.convert.StoryboardConverter\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n    </converter>\n\n    <converter name=\"videoScreenshot\"\n      class=\"org.nuxeo.ecm.platform.video.convert.ScreenshotConverter\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n    </converter>\n\n    <converter name=\"convertToWebM\"\n      class=\"org.nuxeo.ecm.platform.video.convert.VideoConversionConverter\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>video/webm</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ffmpeg-towebm</parameter>\n        <parameter name=\"videoMimeType\">video/webm</parameter>\n        <parameter name=\"videoExtension\">webm</parameter>\n        <parameter name=\"tmpDirectoryPrefix\">convertToWebM</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"convertToMP4\"\n      class=\"org.nuxeo.ecm.platform.video.convert.VideoConversionConverter\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>video/mp4</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ffmpeg-tomp4</parameter>\n        <parameter name=\"videoMimeType\">video/mp4</parameter>\n        <parameter name=\"videoExtension\">mp4</parameter>\n        <parameter name=\"tmpDirectoryPrefix\">convertToMP4</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"convertToOgg\"\n      class=\"org.nuxeo.ecm.platform.video.convert.VideoConversionConverter\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>video/ogg</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ffmpeg-toogg</parameter>\n        <parameter name=\"videoMimeType\">video/ogg</parameter>\n        <parameter name=\"videoExtension\">ogg</parameter>\n        <parameter name=\"tmpDirectoryPrefix\">convertToOgg</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"convertToAVI\"\n      class=\"org.nuxeo.ecm.platform.video.convert.VideoConversionConverter\">\n      <sourceMimeType>video/*</sourceMimeType>\n      <sourceMimeType>application/gxf</sourceMimeType>\n      <sourceMimeType>application/mxf</sourceMimeType>\n      <destinationMimeType>video/x-msvideo</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ffmpeg-toavi</parameter>\n        <parameter name=\"videoMimeType\">video/x-msvideo</parameter>\n        <parameter name=\"videoExtension\">avi</parameter>\n        <parameter name=\"tmpDirectoryPrefix\">convertToAVI</parameter>\n      </parameters>\n    </converter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/convert-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.nuxeo.ecm.platform.video.doctype/Contributions/org.nuxeo.nuxeo.ecm.platform.video.doctype--schema",
              "id": "org.nuxeo.nuxeo.ecm.platform.video.doctype--schema",
              "registrationOrder": 41,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"video\" prefix=\"vid\" src=\"schemas/video.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.nuxeo.ecm.platform.video.doctype/Contributions/org.nuxeo.nuxeo.ecm.platform.video.doctype--doctype",
              "id": "org.nuxeo.nuxeo.ecm.platform.video.doctype--doctype",
              "registrationOrder": 39,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"Video\">\n      <schema name=\"file\"/>\n      <schema name=\"video\"/>\n      <schema name=\"picture\"/>\n    </facet>\n\n    <facet name=\"HasStoryboard\"/>\n    <facet name=\"HasVideoPreview\"/>\n\n    <doctype extends=\"Document\" name=\"Video\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"Video\"/>\n      <facet name=\"HasStoryboard\"/>\n      <facet name=\"HasVideoPreview\"/>\n      <facet name=\"NXTag\"/>\n    </doctype>\n\n    <doctype append=\"true\" name=\"Workspace\">\n      <subtypes>\n        <type>Video</type>\n      </subtypes>\n    </doctype>\n\n    <doctype append=\"true\" name=\"Folder\">\n      <subtypes>\n        <type>Video</type>\n      </subtypes>\n    </doctype>\n\n    <doctype append=\"true\" name=\"OrderedFolder\">\n      <subtypes>\n        <type>Video</type>\n      </subtypes>\n    </doctype>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.nuxeo.ecm.platform.video.doctype",
          "name": "org.nuxeo.nuxeo.ecm.platform.video.doctype",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions",
            "org.nuxeo.ecm.tags.schemas"
          ],
          "resolutionOrder": 589,
          "services": [],
          "startOrder": 685,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.nuxeo.ecm.platform.video.doctype\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <require>org.nuxeo.ecm.tags.schemas</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"video\" src=\"schemas/video.xsd\" prefix=\"vid\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <facet name=\"Video\">\n      <schema name=\"file\" />\n      <schema name=\"video\" />\n      <schema name=\"picture\" />\n    </facet>\n\n    <facet name=\"HasStoryboard\"/>\n    <facet name=\"HasVideoPreview\"/>\n\n    <doctype name=\"Video\" extends=\"Document\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"uid\" />\n      <schema name=\"files\" />\n      <facet name=\"Commentable\" />\n      <facet name=\"Versionable\" />\n      <facet name=\"Publishable\" />\n      <facet name=\"Video\" />\n      <facet name=\"HasStoryboard\" />\n      <facet name=\"HasVideoPreview\" />\n      <facet name=\"NXTag\" />\n    </doctype>\n\n    <doctype name=\"Workspace\" append=\"true\">\n      <subtypes>\n        <type>Video</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Folder\" append=\"true\">\n      <subtypes>\n        <type>Video</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"OrderedFolder\" append=\"true\">\n      <subtypes>\n        <type>Video</type>\n      </subtypes>\n    </doctype>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Simple plugin for the file manager. Creates a Video Document type from\n      any of the matching mime types.\n    \n",
              "documentationHtml": "<p>\nSimple plugin for the file manager. Creates a Video Document type from\nany of the matching mime types.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService--plugins",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.filemanager.contrib/Contributions/org.nuxeo.ecm.platform.video.filemanager.contrib--plugins",
              "id": "org.nuxeo.ecm.platform.video.filemanager.contrib--plugins",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"plugins\" target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\">\n    <documentation>\n      Simple plugin for the file manager. Creates a Video Document type from\n      any of the matching mime types.\n    </documentation>\n    <plugin class=\"org.nuxeo.ecm.platform.video.importer.VideoImporter\" name=\"VideoImporter\" order=\"10\">\n      <filter>video/.*</filter>\n      <filter>application/gxf</filter>\n      <filter>application/mxf</filter>\n    </plugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.filemanager.contrib",
          "name": "org.nuxeo.ecm.platform.video.filemanager.contrib",
          "requirements": [],
          "resolutionOrder": 590,
          "services": [],
          "startOrder": 564,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.video.filemanager.contrib\">\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\"\n      point=\"plugins\">\n    <documentation>\n      Simple plugin for the file manager. Creates a Video Document type from\n      any of the matching mime types.\n    </documentation>\n    <plugin name=\"VideoImporter\"\n            class=\"org.nuxeo.ecm.platform.video.importer.VideoImporter\"\n            order=\"10\">\n      <filter>video/.*</filter>\n      <filter>application/gxf</filter>\n      <filter>application/mxf</filter>\n    </plugin>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/filemanager-importer-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.nuxeo.ecm.platform.video.lifecycle/Contributions/org.nuxeo.nuxeo.ecm.platform.video.lifecycle--types",
              "id": "org.nuxeo.nuxeo.ecm.platform.video.lifecycle--types",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"Video\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.nuxeo.ecm.platform.video.lifecycle",
          "name": "org.nuxeo.nuxeo.ecm.platform.video.lifecycle",
          "requirements": [
            "org.nuxeo.ecm.core.LifecycleCoreExtensions"
          ],
          "resolutionOrder": 591,
          "services": [],
          "startOrder": 686,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.nuxeo.ecm.platform.video.lifecycle\">\n\n  <require>org.nuxeo.ecm.core.LifecycleCoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"types\">\n    <types>\n      <type name=\"Video\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/lifecycle-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf.types/Contributions/org.nuxeo.ecm.platform.video.jsf.types--types",
              "id": "org.nuxeo.ecm.platform.video.jsf.types--types",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n    <type id=\"Video\">\n      <label>Video</label>\n      <default-view>view_documents</default-view>\n      <icon>/icons/video.png</icon>\n      <bigIcon>/icons/video_big.png</bigIcon>\n      <category>SimpleDocument</category>\n      <description>Video.description</description>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>video_file</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>video_file</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <layouts mode=\"drive\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n    </type>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf.types",
          "name": "org.nuxeo.ecm.platform.video.jsf.types",
          "requirements": [],
          "resolutionOrder": 592,
          "services": [],
          "startOrder": 566,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.video.jsf.types\">\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n    <type id=\"Video\">\n      <label>Video</label>\n      <default-view>view_documents</default-view>\n      <icon>/icons/video.png</icon>\n      <bigIcon>/icons/video_big.png</bigIcon>\n      <category>SimpleDocument</category>\n      <description>Video.description</description>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>video_file</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>video_file</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <layouts mode=\"drive\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n    </type>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/ui-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.platform.video.core.listeners/Contributions/org.nuxeo.platform.video.core.listeners--listener",
              "id": "org.nuxeo.platform.video.core.listeners--listener",
              "registrationOrder": 42,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.video.listener.VideoChangedListener\" name=\"videoChangedListener\" postCommit=\"false\" priority=\"20\">\n      <event>documentCreated</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.platform.video.core.listeners",
          "name": "org.nuxeo.platform.video.core.listeners",
          "requirements": [
            "org.nuxeo.ecm.core.event.EventServiceComponent"
          ],
          "resolutionOrder": 593,
          "services": [],
          "startOrder": 705,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.platform.video.core.listeners\">\n\n  <require>org.nuxeo.ecm.core.event.EventServiceComponent</require>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n\n    <listener name=\"videoChangedListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.video.listener.VideoChangedListener\" priority=\"20\">\n      <event>documentCreated</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/video-listeners-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.rendition.service.RenditionService--renditionDefinitionProviders",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.platform.video.core.renditions/Contributions/org.nuxeo.platform.video.core.renditions--renditionDefinitionProviders",
              "id": "org.nuxeo.platform.video.core.renditions--renditionDefinitionProviders",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "name": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"renditionDefinitionProviders\" target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\">\n\n    <renditionDefinitionProvider class=\"org.nuxeo.ecm.platform.video.rendition.VideoRenditionDefinitionProvider\" name=\"videoRenditionDefinitionProvider\">\n      <filters>\n        <filter-id>hasVideo</filter-id>\n      </filters>\n    </renditionDefinitionProvider>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.platform.video.core.renditions/Contributions/org.nuxeo.platform.video.core.renditions--filters",
              "id": "org.nuxeo.platform.video.core.renditions--filters",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"hasVideo\">\n      <rule grant=\"true\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n    <filter append=\"true\" id=\"allowPDFRendition\">\n      <rule grant=\"false\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.platform.video.core.renditions",
          "name": "org.nuxeo.platform.video.core.renditions",
          "requirements": [
            "org.nuxeo.ecm.platform.rendition.contrib"
          ],
          "resolutionOrder": 594,
          "services": [],
          "startOrder": 707,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.platform.video.core.renditions\">\n\n  <require>org.nuxeo.ecm.platform.rendition.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\"\n    point=\"renditionDefinitionProviders\">\n\n    <renditionDefinitionProvider name=\"videoRenditionDefinitionProvider\"\n      class=\"org.nuxeo.ecm.platform.video.rendition.VideoRenditionDefinitionProvider\">\n      <filters>\n        <filter-id>hasVideo</filter-id>\n      </filters>\n    </renditionDefinitionProvider>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"hasVideo\">\n      <rule grant=\"true\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"allowPDFRendition\" append=\"true\">\n      <rule grant=\"false\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/video-renditions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.video.service.VideoService--videoConversions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.service.contrib/Contributions/org.nuxeo.ecm.platform.video.service.contrib--videoConversions",
              "id": "org.nuxeo.ecm.platform.video.service.contrib--videoConversions",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.video.service.VideoService",
                "name": "org.nuxeo.ecm.platform.video.service.VideoService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"videoConversions\" target=\"org.nuxeo.ecm.platform.video.service.VideoService\">\n\n    <videoConversion converter=\"convertToMP4\" height=\"480\" name=\"MP4 480p\" rendition=\"true\"/>\n    <videoConversion converter=\"convertToWebM\" height=\"480\" name=\"WebM 480p\" rendition=\"true\"/>\n    <videoConversion converter=\"convertToOgg\" height=\"480\" name=\"Ogg 480p\" rendition=\"true\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.video.service.VideoService--automaticVideoConversions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.service.contrib/Contributions/org.nuxeo.ecm.platform.video.service.contrib--automaticVideoConversions",
              "id": "org.nuxeo.ecm.platform.video.service.contrib--automaticVideoConversions",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.video.service.VideoService",
                "name": "org.nuxeo.ecm.platform.video.service.VideoService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"automaticVideoConversions\" target=\"org.nuxeo.ecm.platform.video.service.VideoService\">\n\n    <automaticVideoConversion name=\"MP4 480p\" order=\"0\"/>\n    <automaticVideoConversion name=\"WebM 480p\" order=\"10\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.video.service.VideoService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.service.contrib/Contributions/org.nuxeo.ecm.platform.video.service.contrib--configuration",
              "id": "org.nuxeo.ecm.platform.video.service.contrib--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.video.service.VideoService",
                "name": "org.nuxeo.ecm.platform.video.service.VideoService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.ecm.platform.video.service.VideoService\">\n\n    <configuration>\n      <previewScreenshotInDurationPercent>10.0</previewScreenshotInDurationPercent>\n      <storyboardMinDuration>10</storyboardMinDuration>\n      <storyboardThumbnailCount>9</storyboardThumbnailCount>\n    </configuration>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.service.contrib",
          "name": "org.nuxeo.ecm.platform.video.service.contrib",
          "requirements": [],
          "resolutionOrder": 595,
          "services": [],
          "startOrder": 568,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.video.service.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.video.service.VideoService\"\n    point=\"videoConversions\">\n\n    <videoConversion name=\"MP4 480p\" converter=\"convertToMP4\" height=\"480\"\n      rendition=\"true\" />\n    <videoConversion name=\"WebM 480p\" converter=\"convertToWebM\" height=\"480\"\n      rendition=\"true\" />\n    <videoConversion name=\"Ogg 480p\" converter=\"convertToOgg\" height=\"480\"\n      rendition=\"true\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.video.service.VideoService\"\n    point=\"automaticVideoConversions\">\n\n    <automaticVideoConversion name=\"MP4 480p\" order=\"0\" />\n    <automaticVideoConversion name=\"WebM 480p\" order=\"10\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.video.service.VideoService\"\n    point=\"configuration\">\n\n    <configuration>\n      <previewScreenshotInDurationPercent>10.0</previewScreenshotInDurationPercent>\n      <storyboardMinDuration>10</storyboardMinDuration>\n      <storyboardThumbnailCount>9</storyboardThumbnailCount>\n    </configuration>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/video-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.video.service.VideoServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The VideoService provides extension points to register\n    named video conversions and default conversions to run\n    when importing a video.\n  \n",
          "documentationHtml": "<p>\nThe VideoService provides extension points to register\nnamed video conversions and default conversions to run\nwhen importing a video.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.video.service.VideoService",
              "descriptors": [
                "org.nuxeo.ecm.platform.video.service.VideoConversion"
              ],
              "documentation": "\n      Extension point to contribute available video conversions\n      <p>\n        Since 7.2, 2 new attributes are available:\n        <ul>\n        <li>rendition: true if this video conversion should be exposed as a rendition, false otherwise.</li>\n        <li>renditionVisible: equivalent of the 'visible' attribute on a rendition definition,\n            true if this video conversion is a rendition and should be visible in the UI, false otherwise</li>\n    </ul>\n</p>\n",
              "documentationHtml": "<p>\nExtension point to contribute available video conversions\n</p><p>\nSince 7.2, 2 new attributes are available:\n</p><ul><li>rendition: true if this video conversion should be exposed as a rendition, false otherwise.</li><li>renditionVisible: equivalent of the &#39;visible&#39; attribute on a rendition definition,\ntrue if this video conversion is a rendition and should be visible in the UI, false otherwise</li></ul>\n",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.service.VideoService/ExtensionPoints/org.nuxeo.ecm.platform.video.service.VideoService--videoConversions",
              "id": "org.nuxeo.ecm.platform.video.service.VideoService--videoConversions",
              "label": "videoConversions (org.nuxeo.ecm.platform.video.service.VideoService)",
              "name": "videoConversions",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.video.service.VideoService",
              "descriptors": [
                "org.nuxeo.ecm.platform.video.service.AutomaticVideoConversion"
              ],
              "documentation": "\n      Extension point to contribute default video conversions\n      launched after the creation of a Video document.\n    \n",
              "documentationHtml": "<p>\nExtension point to contribute default video conversions\nlaunched after the creation of a Video document.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.service.VideoService/ExtensionPoints/org.nuxeo.ecm.platform.video.service.VideoService--automaticVideoConversions",
              "id": "org.nuxeo.ecm.platform.video.service.VideoService--automaticVideoConversions",
              "label": "automaticVideoConversions (org.nuxeo.ecm.platform.video.service.VideoService)",
              "name": "automaticVideoConversions",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.video.service.VideoService",
              "descriptors": [
                "org.nuxeo.ecm.platform.video.service.Configuration"
              ],
              "documentation": "<p>Since 7.4.</p>\n<p>\n      Extension point to configure the VideoService, such as:\n        <ul>\n        <li>When to take the preview screenshot (percentage of the video duration)</li>\n        <li>Storyboard thumbnails count</li>\n        <li>Minimum duration of the video to generate storyboard (0 means always, &lt; 0 means never)</li>\n    </ul>\n</p>\n",
              "documentationHtml": "<p>\n</p><p>Since 7.4.</p>\n<p>\nExtension point to configure the VideoService, such as:\n</p><ul><li>When to take the preview screenshot (percentage of the video duration)</li><li>Storyboard thumbnails count</li><li>Minimum duration of the video to generate storyboard (0 means always, &lt; 0 means never)</li></ul>\n",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.service.VideoService/ExtensionPoints/org.nuxeo.ecm.platform.video.service.VideoService--configuration",
              "id": "org.nuxeo.ecm.platform.video.service.VideoService--configuration",
              "label": "configuration (org.nuxeo.ecm.platform.video.service.VideoService)",
              "name": "configuration",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.service.VideoService",
          "name": "org.nuxeo.ecm.platform.video.service.VideoService",
          "requirements": [],
          "resolutionOrder": 596,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.video.service.VideoService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.service.VideoService/Services/org.nuxeo.ecm.platform.video.service.VideoService",
              "id": "org.nuxeo.ecm.platform.video.service.VideoService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 895,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.video.service.VideoService\">\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.video.service.VideoServiceImpl\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.video.service.VideoService\" />\n  </service>\n\n  <documentation>\n    The VideoService provides extension points to register\n    named video conversions and default conversions to run\n    when importing a video.\n  </documentation>\n\n  <extension-point name=\"videoConversions\">\n    <documentation>\n      Extension point to contribute available video conversions\n      <p>\n        Since 7.2, 2 new attributes are available:\n        <ul>\n          <li>rendition: true if this video conversion should be exposed as a rendition, false otherwise.</li>\n          <li>renditionVisible: equivalent of the 'visible' attribute on a rendition definition,\n            true if this video conversion is a rendition and should be visible in the UI, false otherwise</li>\n        </ul>\n      </p>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.video.service.VideoConversion\" />\n  </extension-point>\n\n  <extension-point name=\"automaticVideoConversions\">\n    <documentation>\n      Extension point to contribute default video conversions\n      launched after the creation of a Video document.\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.video.service.AutomaticVideoConversion\" />\n  </extension-point>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      <p>Since 7.4.</p>\n      <p>\n      Extension point to configure the VideoService, such as:\n        <ul>\n          <li>When to take the preview screenshot (percentage of the video duration)</li>\n          <li>Storyboard thumbnails count</li>\n          <li>Minimum duration of the video to generate storyboard (0 means always, &lt; 0 means never)</li>\n        </ul>\n      </p>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.video.service.Configuration\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/video-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService--thumbnailFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.core.thumbnailfactory/Contributions/org.nuxeo.ecm.platform.video.core.thumbnailfactory--thumbnailFactory",
              "id": "org.nuxeo.ecm.platform.video.core.thumbnailfactory--thumbnailFactory",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "name": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"thumbnailFactory\" target=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailService\">\n    <thumbnailFactory facet=\"Video\" factoryClass=\"org.nuxeo.ecm.platform.video.adapter.ThumbnailVideoFactory\" name=\"thumbnailVideoFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.core.thumbnailfactory",
          "name": "org.nuxeo.ecm.platform.video.core.thumbnailfactory",
          "requirements": [],
          "resolutionOrder": 597,
          "services": [],
          "startOrder": 563,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.video.core.thumbnailfactory\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailService\"\n    point=\"thumbnailFactory\">\n    <thumbnailFactory name=\"thumbnailVideoFactory\"\n      facet=\"Video\"\n      factoryClass=\"org.nuxeo.ecm.platform.video.adapter.ThumbnailVideoFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/video-thumbnailfactory-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--command",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.tools.commandlines/Contributions/org.nuxeo.ecm.platform.video.tools.commandlines--command",
              "id": "org.nuxeo.ecm.platform.video.tools.commandlines--command",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n\n    <command enabled=\"true\" name=\"videoClosedCaptionsExtractor\">\n      <commandLine>ccextractor</commandLine>\n      <parameterString>#{sourceFilePath} -out=#{outFormat} -trim -o #{outFilePath}\n      </parameterString>\n      <installationDirective>You need to install ccextractor.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"videoPartClosedCaptionsExtractor\">\n      <commandLine>ccextractor</commandLine>\n      <parameterString>#{sourceFilePath} -out=#{outFormat} -startat #{startAt} -endat #{endAt} -trim -o #{outFilePath}\n      </parameterString>\n      <installationDirective>You need to install ccextractor.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"videoConcat\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -f concat -safe 0 -i #{listFilePath} -c copy #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n    <!-- This one is very fast, but you may miss frames. Use it when you are sure you'll get the correct cut -->\n    <command enabled=\"true\" name=\"videoSlicerByCopy\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -i #{sourceFilePath} -ss #{startAt} -t #{duration} -c copy #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n    <!-- This on is the basic slicing. It re-encodes the video, so it it is slower than videoSlicerCopy -->\n    <command enabled=\"true\" name=\"videoSlicer\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -i #{sourceFilePath} -ss #{startAt} -t #{duration} #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n    <!-- This enables video slicing starting from the specific time -->\n    <command enabled=\"true\" name=\"videoSlicerStartAt\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -i #{sourceFilePath} -ss #{startAt} #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n    <!-- Slices in n segment of #duration each. outFilePath is an expression\n         (OUT%03d.mp4 for example) so ffmpeg creates one file/segment -->\n    <command enabled=\"true\" name=\"videoSlicerSegments\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -i #{sourceFilePath} -map 0 -c copy -f segment -segment_time #{duration} -reset_timestamps 1\n        #{outFilePath}\n      </parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n    <!-- filterComplex is the full filter. For example: \"overlay=10:10\" -->\n    <command enabled=\"true\" name=\"videoWatermarkWithPicture\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -i #{sourceFilePath} -i #{pictureFilePath} -filter_complex #{filterComplex} #{outFilePath}\n      </parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.tools.commandlines",
          "name": "org.nuxeo.ecm.platform.video.tools.commandlines",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 598,
          "services": [],
          "startOrder": 570,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.video.tools.commandlines\">\n\n  <require>org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib</require>\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\"\n      point=\"command\">\n\n    <command name=\"videoClosedCaptionsExtractor\" enabled=\"true\">\n      <commandLine>ccextractor</commandLine>\n      <parameterString>#{sourceFilePath} -out=#{outFormat} -trim -o #{outFilePath}\n      </parameterString>\n      <installationDirective>You need to install ccextractor.</installationDirective>\n    </command>\n\n    <command name=\"videoPartClosedCaptionsExtractor\" enabled=\"true\">\n      <commandLine>ccextractor</commandLine>\n      <parameterString>#{sourceFilePath} -out=#{outFormat} -startat #{startAt} -endat #{endAt} -trim -o #{outFilePath}\n      </parameterString>\n      <installationDirective>You need to install ccextractor.</installationDirective>\n    </command>\n\n    <command name=\"videoConcat\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -f concat -safe 0 -i #{listFilePath} -c copy #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n    <!-- This one is very fast, but you may miss frames. Use it when you are sure you'll get the correct cut -->\n    <command name=\"videoSlicerByCopy\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -i #{sourceFilePath} -ss #{startAt} -t #{duration} -c copy #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n    <!-- This on is the basic slicing. It re-encodes the video, so it it is slower than videoSlicerCopy -->\n    <command name=\"videoSlicer\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -i #{sourceFilePath} -ss #{startAt} -t #{duration} #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n    <!-- This enables video slicing starting from the specific time -->\n    <command name=\"videoSlicerStartAt\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -i #{sourceFilePath} -ss #{startAt} #{outFilePath}</parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n    <!-- Slices in n segment of #duration each. outFilePath is an expression\n         (OUT%03d.mp4 for example) so ffmpeg creates one file/segment -->\n    <command name=\"videoSlicerSegments\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -i #{sourceFilePath} -map 0 -c copy -f segment -segment_time #{duration} -reset_timestamps 1\n        #{outFilePath}\n      </parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n    <!-- filterComplex is the full filter. For example: \"overlay=10:10\" -->\n    <command name=\"videoWatermarkWithPicture\" enabled=\"true\">\n      <commandLine>ffmpeg</commandLine>\n      <parameterString>-y -i #{sourceFilePath} -i #{pictureFilePath} -filter_complex #{filterComplex} #{outFilePath}\n      </parameterString>\n      <installationDirective>You need to install ffmpeg.</installationDirective>\n    </command>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/video-tools-commandlines-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.video.tools.operations/Contributions/org.nuxeo.ecm.video.tools.operations--operations",
              "id": "org.nuxeo.ecm.video.tools.operations--operations",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.platform.video.tools.operations.AddWatermarkToVideo\"/>\n    <operation class=\"org.nuxeo.ecm.platform.video.tools.operations.ConcatVideos\"/>\n    <operation class=\"org.nuxeo.ecm.platform.video.tools.operations.ExtractClosedCaptionsFromVideo\"/>\n    <operation class=\"org.nuxeo.ecm.platform.video.tools.operations.SliceVideo\"/>\n    <operation class=\"org.nuxeo.ecm.platform.video.tools.operations.SliceVideoInParts\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.video.tools.operations",
          "name": "org.nuxeo.ecm.video.tools.operations",
          "requirements": [],
          "resolutionOrder": 599,
          "services": [],
          "startOrder": 636,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.video.tools.operations\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.ecm.platform.video.tools.operations.AddWatermarkToVideo\"/>\n    <operation class=\"org.nuxeo.ecm.platform.video.tools.operations.ConcatVideos\"/>\n    <operation class=\"org.nuxeo.ecm.platform.video.tools.operations.ExtractClosedCaptionsFromVideo\"/>\n    <operation class=\"org.nuxeo.ecm.platform.video.tools.operations.SliceVideo\"/>\n    <operation class=\"org.nuxeo.ecm.platform.video.tools.operations.SliceVideoInParts\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/video-tools-operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.video.tools.service.VideoToolsServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The VideoToolsService provides tools for performing different actions in videos, such\n    as slicing, watermarking, etc.\n  \n",
          "documentationHtml": "<p>\nThe VideoToolsService provides tools for performing different actions in videos, such\nas slicing, watermarking, etc.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.tools.VideoToolsService",
          "name": "org.nuxeo.ecm.platform.video.tools.VideoToolsService",
          "requirements": [],
          "resolutionOrder": 600,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.video.tools.VideoToolsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.tools.VideoToolsService/Services/org.nuxeo.ecm.platform.video.tools.VideoToolsService",
              "id": "org.nuxeo.ecm.platform.video.tools.VideoToolsService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 896,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.video.tools.VideoToolsService\">\n\n  <implementation class=\"org.nuxeo.ecm.platform.video.tools.service.VideoToolsServiceImpl\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.video.tools.VideoToolsService\"/>\n  </service>\n\n  <documentation>\n    The VideoToolsService provides tools for performing different actions in videos, such\n    as slicing, watermarking, etc.\n  </documentation>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/video-tools-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.workmanager/Contributions/org.nuxeo.ecm.platform.video.workmanager--queues",
              "id": "org.nuxeo.ecm.platform.video.workmanager--queues",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"videoConversion\">\n      <maxThreads>2</maxThreads>\n      <category>videoConversion</category>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.workmanager",
          "name": "org.nuxeo.ecm.platform.video.workmanager",
          "requirements": [],
          "resolutionOrder": 601,
          "services": [],
          "startOrder": 571,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.video.workmanager\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"videoConversion\">\n      <maxThreads>2</maxThreads>\n      <category>videoConversion</category>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/video-workmanager-config.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-video-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video",
      "id": "org.nuxeo.ecm.platform.video",
      "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: 2023.7.9-t20240130-105359\r\nBundle-Name: Nuxeo Video\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.video\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/adapters-contrib.xml,OSGI-INF/commandline-cont\r\n rib.xml,OSGI-INF/video-bulk-contrib.xml,OSGI-INF/convert-service-contri\r\n b.xml,OSGI-INF/core-types-contrib.xml,OSGI-INF/filemanager-importer-con\r\n trib.xml,OSGI-INF/lifecycle-contrib.xml,OSGI-INF/ui-types-contrib.xml,O\r\n SGI-INF/video-listeners-contrib.xml,OSGI-INF/video-renditions-contrib.x\r\n ml,OSGI-INF/video-service-contrib.xml,OSGI-INF/video-service.xml,OSGI-I\r\n NF/video-thumbnailfactory-contrib.xml,OSGI-INF/video-tools-commandlines\r\n -contrib.xml,OSGI-INF/video-tools-operations-contrib.xml,OSGI-INF/video\r\n -tools-service.xml,OSGI-INF/video-workmanager-config.xml\r\n\r\n",
      "maxResolutionOrder": 601,
      "minResolutionOrder": 585,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-template-rendering-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.template.manager",
          "org.nuxeo.template.manager.api",
          "org.nuxeo.template.manager.jaxrs",
          "org.nuxeo.template.manager.jxls",
          "org.nuxeo.template.manager.xdocreport"
        ],
        "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template",
        "id": "grp:org.nuxeo.template",
        "name": "org.nuxeo.template",
        "parentIds": [
          "grp:org.nuxeo.template.rendering"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "\n# Nuxeo Template Rendering\n\n## About Nuxeo Template Rendering\n The Nuxeo Template Rendering is a set of plugins that provides a way to associate a Nuxeo Document with a Template. The Templates are used to render the associated document. Depending on the Template type, a different Template Processor will be used and the resulting rendering can be :\n\n   * an HTML document\n   * an XML document\n   * an OpenOffice document\n   * an MS Office document\n\n\nEach template processor has his own logic for rendering a Document from a Template :\n\n   * raw processing (FreeMarker or XSLT)\n   * merge fields replacement (MS Office / OpenOffice)\n\nThis project is an on-going project, supported by Nuxeo.\n\n## Sub-modules organization\nThe project is splitted in several sub modules :\n\n**nuxeo-template-rendering-api**\n\nAPI module containing all interfaces.\n\n**nuxeo-template-rendering-core**\n\nComponent, extension points and service implementation. This modules only contains template processors for FreeMarker and XSLT.\n\n**nuxeo-template-rendering-jsf**\n\nContribute UI level extensions: Layouts, Widgets, Views, Url bindings ...\n\n**nuxeo-template-rendering-xdocreport**\n\nContribute the OpenOffice / DocX processor based on XDocReport. This is by far the most powerfull processor.\nSee: http://code.google.com/p/xdocreport/\n\n**nuxeo-template-rendering-jxls**\n\nContribute a template processor for XLS files based on JXLS project. See: http://jxls.sourceforge.net/\n\n**nuxeo-template-rendering-jod**\n\nContribute JOD Report based template processor for ODT files. This renderer is historical and replaced by xdocreport that is more powerful.\n\n**nuxeo-template-rendering-jaxrs**\n\nContribute a JAXRS simple API as well as a new WebTemplate doc type that is based on a Note rather than a file.\n\n**nuxeo-template-rendering-sandbox**\n\nMisc code and extensions that are currently experimental.\n\n**nuxeo-template-rendering-package**\n\nBuilder for marketplace package.\n\n## Building\n\n### How to build Nuxeo Template Rendering\nBuild the Nuxeo Template Rendering add-on with Maven:\n\n```mvn clean install```\n\n## Deploying\nNuxeo Template Rendering is available as a package add-on [from the Nuxeo Marketplace] (https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-template-rendering)\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Template Rendering is available in our Documentation Center: http://doc.nuxeo.com/x/9YSo\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Template Rendering component: https://jira.nuxeo.com/browse/NXP/component/11405\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "e9e176463318c286d8f00955de4c43a2",
            "encoding": "UTF-8",
            "length": 3344,
            "mimeType": "text/plain",
            "name": "ReadMe.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.template.manager",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.doctypes/Contributions/org.nuxeo.platform.TemplateSources.doctypes--schema",
              "id": "org.nuxeo.platform.TemplateSources.doctypes--schema",
              "registrationOrder": 54,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"documenttemplate\" prefix=\"tmpl\" src=\"schemas/documenttemplate.xsd\"/>\n    <schema name=\"templatesupport\" prefix=\"nxts\" src=\"schemas/templatesupport.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.doctypes/Contributions/org.nuxeo.platform.TemplateSources.doctypes--doctype",
              "id": "org.nuxeo.platform.TemplateSources.doctypes--doctype",
              "registrationOrder": 51,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"Template\"/>\n\n    <facet name=\"TemplateBased\">\n      <schema name=\"templatesupport\"/>\n    </facet>\n\n    <doctype extends=\"Document\" name=\"TemplateSource\">\n      <schema name=\"common\"/>\n      <schema name=\"file\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"documenttemplate\"/>\n      <facet name=\"Downloadable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n      <facet name=\"Template\"/>\n    </doctype>\n\n    <doctype extends=\"File\" name=\"TemplateBasedFile\">\n      <facet name=\"TemplateBased\"/>\n    </doctype>\n\n    <doctype append=\"true\" name=\"Folder\">\n      <subtypes>\n        <type>TemplateSource</type>\n      </subtypes>\n    </doctype>\n    <doctype append=\"true\" name=\"Workspace\">\n      <subtypes>\n        <type>TemplateSource</type>\n      </subtypes>\n    </doctype>\n    <doctype append=\"true\" name=\"TemplateRoot\">\n      <subtypes>\n        <type>TemplateSource</type>\n      </subtypes>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.doctypes",
          "name": "org.nuxeo.platform.TemplateSources.doctypes",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 860,
          "services": [],
          "startOrder": 688,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.platform.TemplateSources.doctypes\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"documenttemplate\" src=\"schemas/documenttemplate.xsd\"\n      prefix=\"tmpl\" />\n    <schema name=\"templatesupport\" src=\"schemas/templatesupport.xsd\"\n      prefix=\"nxts\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <facet name=\"Template\" />\n\n    <facet name=\"TemplateBased\">\n      <schema name=\"templatesupport\" />\n    </facet>\n\n    <doctype name=\"TemplateSource\" extends=\"Document\">\n      <schema name=\"common\"/>\n      <schema name=\"file\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"documenttemplate\" />\n      <facet name=\"Downloadable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n      <facet name=\"Template\" />\n    </doctype>\n\n    <doctype name=\"TemplateBasedFile\" extends=\"File\">\n      <facet name=\"TemplateBased\" />\n    </doctype>\n\n    <doctype name=\"Folder\" append=\"true\">\n      <subtypes>\n        <type>TemplateSource</type>\n      </subtypes>\n    </doctype>\n    <doctype name=\"Workspace\" append=\"true\">\n      <subtypes>\n        <type>TemplateSource</type>\n      </subtypes>\n    </doctype>\n    <doctype name=\"TemplateRoot\" append=\"true\">\n      <subtypes>\n        <type>TemplateSource</type>\n      </subtypes>\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.types.contrib/Contributions/org.nuxeo.platform.TemplateSources.types.contrib--types",
              "id": "org.nuxeo.platform.TemplateSources.types.contrib--types",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n\n    <type coretype=\"TemplateSource\" id=\"TemplateSource\">\n      <label>TemplateSource</label>\n      <icon>/icons/sourcetemplate.png</icon>\n      <bigIcon>/icons/sourcetemplate_100.png</bigIcon>\n      <default-view>view_documents</default-view>\n      <category>SimpleDocument</category>\n     <layouts mode=\"create\">\n       <layout>heading</layout>\n       <layout>templateOptionsWizard</layout>\n       <layout>templateOptions</layout>\n       <layout>fileWithoutTemplate</layout>\n      </layouts>\n      <layouts mode=\"view\">\n        <layout>heading</layout>\n        <layout>templateOptions</layout>\n        <layout>templateParams</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <!-- <layout>templateOptions</layout>  -->\n        <layout>fileWithoutTemplate</layout>\n      </layouts>\n    </type>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.types.contrib",
          "name": "org.nuxeo.platform.TemplateSources.types.contrib",
          "requirements": [],
          "resolutionOrder": 861,
          "services": [],
          "startOrder": 698,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.platform.TemplateSources.types.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\"\n    point=\"types\">\n\n    <type id=\"TemplateSource\" coretype=\"TemplateSource\">\n      <label>TemplateSource</label>\n      <icon>/icons/sourcetemplate.png</icon>\n      <bigIcon>/icons/sourcetemplate_100.png</bigIcon>\n      <default-view>view_documents</default-view>\n      <category>SimpleDocument</category>\n     <layouts mode=\"create\">\n       <layout>heading</layout>\n       <layout>templateOptionsWizard</layout>\n       <layout>templateOptions</layout>\n       <layout>fileWithoutTemplate</layout>\n      </layouts>\n      <layouts mode=\"view\">\n        <layout>heading</layout>\n        <layout>templateOptions</layout>\n        <layout>templateParams</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <!-- <layout>templateOptions</layout>  -->\n        <layout>fileWithoutTemplate</layout>\n      </layouts>\n    </type>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.lifecycle.contrib/Contributions/org.nuxeo.platform.TemplateSources.lifecycle.contrib--types",
              "id": "org.nuxeo.platform.TemplateSources.lifecycle.contrib--types",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"TemplateSource\">default</type>\n      <type name=\"TemplateBasedFile\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.lifecycle.contrib",
          "name": "org.nuxeo.platform.TemplateSources.lifecycle.contrib",
          "requirements": [],
          "resolutionOrder": 862,
          "services": [],
          "startOrder": 692,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.platform.TemplateSources.lifecycle.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"types\">\n    <types>\n      <type name=\"TemplateSource\">default</type>\n      <type name=\"TemplateBasedFile\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/life-cycle-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.template.service.TemplateProcessorComponent",
          "declaredStartOrder": null,
          "documentation": "\n    Template processor service that is used to configure DocumentModel\n    rendering via template (ex: merge DocumentModel with a MSWord or\n    OpenOffice template file).\n\n    <p>It support an ExtensionPoint to contribute template\n      processors.</p>\n\n\n    @version 1.0\n    @author\n    <a href=\"mailto:tdelprat@nuxeo.com\">Tiry</a>\n",
          "documentationHtml": "<p>\nTemplate processor service that is used to configure DocumentModel\nrendering via template (ex: merge DocumentModel with a MSWord or\nOpenOffice template file).\n</p><p>\n</p><p>It support an ExtensionPoint to contribute template\nprocessors.</p>\n<p>\n&#64;version 1.0\n</p><p>\n<a href=\"mailto:tdelprat&#64;nuxeo.com\">Tiry</a></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.template.service.TemplateProcessorComponent",
              "descriptors": [
                "org.nuxeo.template.api.descriptor.TemplateProcessorDescriptor"
              ],
              "documentation": "<p>\n      Extension allowing one to register a new TemplateProcessor.\n      </p>\n<p>\n\n      A TemplateProcessor is a class associated with a format (mime-type or\n      extension) and that can be used to render a DocumentModel via type\n      type of template.\n\n      For instance :\n      </p>\n<code>\n    <templateProcessor\n        class=\"org.nuxeo.template.processors.xdocreport.XDocReportProcessor\"\n        default=\"true\" label=\"XDocReport processor\" name=\"XDocReportProcessor\">\n        <supportedMimeType>application/vnd.oasis.opendocument.text</supportedMimeType>\n        <supportedMimeType>application/vnd.openxmlformats-officedocument.wordprocessingml.document</supportedMimeType>\n        <supportedExtension>odt</supportedExtension>\n        <supportedExtension>docx</supportedExtension>\n    </templateProcessor>\n</code>\n",
              "documentationHtml": "<p>\n</p><p>\nExtension allowing one to register a new TemplateProcessor.\n</p>\n<p>\n</p><p>\nA TemplateProcessor is a class associated with a format (mime-type or\nextension) and that can be used to render a DocumentModel via type\ntype of template.\n</p><p>\nFor instance :\n</p>\n<p></p><pre><code>    &lt;templateProcessor\n        class&#61;&#34;org.nuxeo.template.processors.xdocreport.XDocReportProcessor&#34;\n        default&#61;&#34;true&#34; label&#61;&#34;XDocReport processor&#34; name&#61;&#34;XDocReportProcessor&#34;&gt;\n        &lt;supportedMimeType&gt;application/vnd.oasis.opendocument.text&lt;/supportedMimeType&gt;\n        &lt;supportedMimeType&gt;application/vnd.openxmlformats-officedocument.wordprocessingml.document&lt;/supportedMimeType&gt;\n        &lt;supportedExtension&gt;odt&lt;/supportedExtension&gt;\n        &lt;supportedExtension&gt;docx&lt;/supportedExtension&gt;\n    &lt;/templateProcessor&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.TemplateProcessorComponent/ExtensionPoints/org.nuxeo.template.service.TemplateProcessorComponent--processor",
              "id": "org.nuxeo.template.service.TemplateProcessorComponent--processor",
              "label": "processor (org.nuxeo.template.service.TemplateProcessorComponent)",
              "name": "processor",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.template.service.TemplateProcessorComponent",
              "descriptors": [
                "org.nuxeo.template.api.descriptor.ContextExtensionFactoryDescriptor"
              ],
              "documentation": "<p>\n      Extension allowing to register a new ContentExtensionFactory that will be used to add custom objects inside the rendering context.\n      </p>\n<code/>\n",
              "documentationHtml": "<p>\n</p><p>\nExtension allowing to register a new ContentExtensionFactory that will be used to add custom objects inside the rendering context.\n</p>\n<code></code>",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.TemplateProcessorComponent/ExtensionPoints/org.nuxeo.template.service.TemplateProcessorComponent--contextExtension",
              "id": "org.nuxeo.template.service.TemplateProcessorComponent--contextExtension",
              "label": "contextExtension (org.nuxeo.template.service.TemplateProcessorComponent)",
              "name": "contextExtension",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.template.service.TemplateProcessorComponent",
              "descriptors": [
                "org.nuxeo.template.api.descriptor.OutputFormatDescriptor"
              ],
              "documentation": "<p>\n        Extension allowing to register a output formats for rendered template. If no\n        chainId is specified, the ConvertBlob operation will be called with\n        the mime-type as parameter.\n      </p>\n<code>\n    <outputFormat id=\"doc\" label=\"DOC\" mimetype=\"application/msword\"/>\n    <outputFormat chainId=\"deckJs2PDF\" id=\"deckJsToPDF\"\n        label=\"PDF (from DeckJS)\" mimetype=\"application/pdf\"/>\n</code>\n",
              "documentationHtml": "<p>\n</p><p>\nExtension allowing to register a output formats for rendered template. If no\nchainId is specified, the ConvertBlob operation will be called with\nthe mime-type as parameter.\n</p>\n<p></p><pre><code>    &lt;outputFormat id&#61;&#34;doc&#34; label&#61;&#34;DOC&#34; mimetype&#61;&#34;application/msword&#34;/&gt;\n    &lt;outputFormat chainId&#61;&#34;deckJs2PDF&#34; id&#61;&#34;deckJsToPDF&#34;\n        label&#61;&#34;PDF (from DeckJS)&#34; mimetype&#61;&#34;application/pdf&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.TemplateProcessorComponent/ExtensionPoints/org.nuxeo.template.service.TemplateProcessorComponent--outputFormat",
              "id": "org.nuxeo.template.service.TemplateProcessorComponent--outputFormat",
              "label": "outputFormat (org.nuxeo.template.service.TemplateProcessorComponent)",
              "name": "outputFormat",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.TemplateProcessorComponent",
          "name": "org.nuxeo.template.service.TemplateProcessorComponent",
          "requirements": [],
          "resolutionOrder": 863,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.template.service.TemplateProcessorComponent",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.TemplateProcessorComponent/Services/org.nuxeo.template.api.TemplateProcessorService",
              "id": "org.nuxeo.template.api.TemplateProcessorService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 932,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.template.service.TemplateProcessorComponent\">\n\n  <documentation>\n    Template processor service that is used to configure DocumentModel\n    rendering via template (ex: merge DocumentModel with a MSWord or\n    OpenOffice template file).\n\n    <p>It support an ExtensionPoint to contribute template\n      processors.</p>\n\n    @version 1.0\n    @author\n    <a href=\"mailto:tdelprat@nuxeo.com\">Tiry</a>\n  </documentation>\n\n  <implementation class=\"org.nuxeo.template.service.TemplateProcessorComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.template.api.TemplateProcessorService\" />\n  </service>\n\n  <extension-point name=\"processor\">\n\n    <documentation>\n\n      <p>\n      Extension allowing one to register a new TemplateProcessor.\n      </p>\n      <p>\n\n      A TemplateProcessor is a class associated with a format (mime-type or\n      extension) and that can be used to render a DocumentModel via type\n      type of template.\n\n      For instance :\n      </p>\n\n      <code>\n        <templateProcessor name=\"XDocReportProcessor\"\n          label=\"XDocReport processor\" default=\"true\"\n          class=\"org.nuxeo.template.processors.xdocreport.XDocReportProcessor\">\n          <supportedMimeType>application/vnd.oasis.opendocument.text</supportedMimeType>\n          <supportedMimeType>application/vnd.openxmlformats-officedocument.wordprocessingml.document</supportedMimeType>\n          <supportedExtension>odt</supportedExtension>\n          <supportedExtension>docx</supportedExtension>\n        </templateProcessor>\n\n      </code>\n\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.template.api.descriptor.TemplateProcessorDescriptor\" />\n\n  </extension-point>\n\n\n  <extension-point name=\"contextExtension\">\n\n    <documentation>\n\n      <p>\n      Extension allowing to register a new ContentExtensionFactory that will be used to add custom objects inside the rendering context.\n      </p>\n\n      <code>\n\n\n      </code>\n\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.template.api.descriptor.ContextExtensionFactoryDescriptor\" />\n\n  </extension-point>\n\n\n  <extension-point name=\"outputFormat\">\n\n    <documentation>\n      <p>\n        Extension allowing to register a output formats for rendered template. If no\n        chainId is specified, the ConvertBlob operation will be called with\n        the mime-type as parameter.\n      </p>\n      <code>\n        <outputFormat id=\"doc\" label=\"DOC\" mimetype=\"application/msword\"/>\n        <outputFormat id=\"deckJsToPDF\" label=\"PDF (from DeckJS)\" chainId=\"deckJs2PDF\" mimetype=\"application/pdf\"/>\n      </code>\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.template.api.descriptor.OutputFormatDescriptor\" />\n\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/templateprocessor-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "Freemarker based template processor\n",
              "documentationHtml": "<p>\nFreemarker based template processor</p>",
              "extensionPoint": "org.nuxeo.template.service.TemplateProcessorComponent--processor",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.defaultContrib/Contributions/org.nuxeo.template.service.defaultContrib--processor",
              "id": "org.nuxeo.template.service.defaultContrib--processor",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.template.service.TemplateProcessorComponent",
                "name": "org.nuxeo.template.service.TemplateProcessorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"processor\" target=\"org.nuxeo.template.service.TemplateProcessorComponent\">\n\n    <documentation>Freemarker based template processor</documentation>\n\n    <templateProcessor class=\"org.nuxeo.template.processors.fm.FreeMarkerProcessor\" default=\"false\" label=\"Raw Freemarker\" name=\"Freemarker\">\n      <supportedMimeType>text/x-freemarker</supportedMimeType>\n      <supportedExtension>ftl</supportedExtension>\n    </templateProcessor>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "XSLT template processor\n",
              "documentationHtml": "<p>\nXSLT template processor</p>",
              "extensionPoint": "org.nuxeo.template.service.TemplateProcessorComponent--processor",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.defaultContrib/Contributions/org.nuxeo.template.service.defaultContrib--processor1",
              "id": "org.nuxeo.template.service.defaultContrib--processor1",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.template.service.TemplateProcessorComponent",
                "name": "org.nuxeo.template.service.TemplateProcessorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"processor\" target=\"org.nuxeo.template.service.TemplateProcessorComponent\">\n\n    <documentation>XSLT template processor</documentation>\n\n    <templateProcessor class=\"org.nuxeo.template.processors.xslt.XSLTProcessor\" default=\"false\" label=\"Raw XSLT Processor\" name=\"XSLTProcessor\">\n      <supportedMimeType>text/xml</supportedMimeType>\n      <supportedExtension>xml</supportedExtension>\n      <supportedExtension>xsl</supportedExtension>\n      <supportedExtension>xslt</supportedExtension>\n    </templateProcessor>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "Identity processor\n",
              "documentationHtml": "<p>\nIdentity processor</p>",
              "extensionPoint": "org.nuxeo.template.service.TemplateProcessorComponent--processor",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.defaultContrib/Contributions/org.nuxeo.template.service.defaultContrib--processor2",
              "id": "org.nuxeo.template.service.defaultContrib--processor2",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.template.service.TemplateProcessorComponent",
                "name": "org.nuxeo.template.service.TemplateProcessorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"processor\" target=\"org.nuxeo.template.service.TemplateProcessorComponent\">\n\n    <documentation>Identity processor</documentation>\n\n    <templateProcessor class=\"org.nuxeo.template.processors.IdentityProcessor\" default=\"false\" label=\"Identity\" name=\"Identity\">\n    </templateProcessor>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Adds utility functions in the context\n      <ul>\n    <li>functions.getVocabularyTranslatedLabel(vocname, key, lang)</li>\n    <li>functions.getVocabularyLabel(vocname, key)</li>\n    <li>functions.getVocabularyLabel(vocname, key)</li>\n    <li>functions.formatDate(calendar)</li>\n    <li>functions.formatDateTime(calendar)</li>\n    <li>functions.formatTime(calendar)</li>\n    <li>functions.getNuxeoPrincipal(username)</li>\n</ul>\n",
              "documentationHtml": "<p>\nAdds utility functions in the context\n</p><ul><li>functions.getVocabularyTranslatedLabel(vocname, key, lang)</li><li>functions.getVocabularyLabel(vocname, key)</li><li>functions.getVocabularyLabel(vocname, key)</li><li>functions.formatDate(calendar)</li><li>functions.formatDateTime(calendar)</li><li>functions.formatTime(calendar)</li><li>functions.getNuxeoPrincipal(username)</li></ul>",
              "extensionPoint": "org.nuxeo.template.service.TemplateProcessorComponent--contextExtension",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.defaultContrib/Contributions/org.nuxeo.template.service.defaultContrib--contextExtension",
              "id": "org.nuxeo.template.service.defaultContrib--contextExtension",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.template.service.TemplateProcessorComponent",
                "name": "org.nuxeo.template.service.TemplateProcessorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"contextExtension\" target=\"org.nuxeo.template.service.TemplateProcessorComponent\">\n\n    <documentation>\n      Adds utility functions in the context\n      <ul>\n        <li>functions.getVocabularyTranslatedLabel(vocname, key, lang)</li>\n        <li>functions.getVocabularyLabel(vocname, key)</li>\n        <li>functions.getVocabularyLabel(vocname, key)</li>\n        <li>functions.formatDate(calendar)</li>\n        <li>functions.formatDateTime(calendar)</li>\n        <li>functions.formatTime(calendar)</li>\n        <li>functions.getNuxeoPrincipal(username)</li>\n      </ul>\n    </documentation>\n\n    <contextFactory class=\"org.nuxeo.template.context.extensions.FunctionsExtensionFactory\" name=\"functions\">\n     <aliasName>fn</aliasName>\n     <aliasName>Fn</aliasName>\n    </contextFactory>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "Adds audit infos in the context\n      <ul>\n    <li>auditEntries</li>\n</ul>\n",
              "documentationHtml": "<p>\nAdds audit infos in the context\n</p><ul><li>auditEntries</li></ul>",
              "extensionPoint": "org.nuxeo.template.service.TemplateProcessorComponent--contextExtension",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.defaultContrib/Contributions/org.nuxeo.template.service.defaultContrib--contextExtension1",
              "id": "org.nuxeo.template.service.defaultContrib--contextExtension1",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.template.service.TemplateProcessorComponent",
                "name": "org.nuxeo.template.service.TemplateProcessorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"contextExtension\" target=\"org.nuxeo.template.service.TemplateProcessorComponent\">\n\n    <documentation>Adds audit infos in the context\n      <ul>\n        <li>auditEntries</li>\n      </ul>\n    </documentation>\n\n    <contextFactory class=\"org.nuxeo.template.context.extensions.AuditExtensionFactory\" name=\"auditEntries\">\n    </contextFactory>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "Adds Repository features in the context\n      <ul>\n    <li>core.getParent()</li>\n    <li>core.getChildren()</li>\n</ul>\n",
              "documentationHtml": "<p>\nAdds Repository features in the context\n</p><ul><li>core.getParent()</li><li>core.getChildren()</li></ul>",
              "extensionPoint": "org.nuxeo.template.service.TemplateProcessorComponent--contextExtension",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.defaultContrib/Contributions/org.nuxeo.template.service.defaultContrib--contextExtension2",
              "id": "org.nuxeo.template.service.defaultContrib--contextExtension2",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.template.service.TemplateProcessorComponent",
                "name": "org.nuxeo.template.service.TemplateProcessorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"contextExtension\" target=\"org.nuxeo.template.service.TemplateProcessorComponent\">\n\n    <documentation>Adds Repository features in the context\n      <ul>\n        <li>core.getParent()</li>\n        <li>core.getChildren()</li>\n      </ul>\n    </documentation>\n\n    <contextFactory class=\"org.nuxeo.template.context.extensions.CoreExtensionFactory\" name=\"core\">\n    </contextFactory>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "Adds outputFormat for the following mime type\n      <ul>\n    <li>pdf</li>\n    <li>odt</li>\n    <li>doc</li>\n    <li>docx</li>\n</ul>\n",
              "documentationHtml": "<p>\nAdds outputFormat for the following mime type\n</p><ul><li>pdf</li><li>odt</li><li>doc</li><li>docx</li></ul>",
              "extensionPoint": "org.nuxeo.template.service.TemplateProcessorComponent--outputFormat",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.defaultContrib/Contributions/org.nuxeo.template.service.defaultContrib--outputFormat",
              "id": "org.nuxeo.template.service.defaultContrib--outputFormat",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.template.service.TemplateProcessorComponent",
                "name": "org.nuxeo.template.service.TemplateProcessorComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"outputFormat\" target=\"org.nuxeo.template.service.TemplateProcessorComponent\">\n\n    <documentation>Adds outputFormat for the following mime type\n      <ul>\n        <li>pdf</li>\n        <li>odt</li>\n        <li>doc</li>\n        <li>docx</li>\n      </ul>\n    </documentation>\n\n    <outputFormat id=\"pdf\" label=\"PDF\" mimetype=\"application/pdf\"/>\n    <outputFormat id=\"odt\" label=\"ODT\" mimetype=\"application/vnd.oasis.opendocument.text\"/>\n    <outputFormat id=\"doc\" label=\"DOC\" mimetype=\"application/msword\"/>\n    <outputFormat id=\"docx\" label=\"DOCX\" mimetype=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.service.defaultContrib",
          "name": "org.nuxeo.template.service.defaultContrib",
          "requirements": [],
          "resolutionOrder": 864,
          "services": [],
          "startOrder": 746,
          "version": "2023.7.9",
          "xmlFileContent": "<component\n  name=\"org.nuxeo.template.service.defaultContrib\">\n\n  <extension target=\"org.nuxeo.template.service.TemplateProcessorComponent\" point=\"processor\">\n\n    <documentation>Freemarker based template processor</documentation>\n\n    <templateProcessor name=\"Freemarker\" label=\"Raw Freemarker\" default=\"false\" class=\"org.nuxeo.template.processors.fm.FreeMarkerProcessor\">\n      <supportedMimeType>text/x-freemarker</supportedMimeType>\n      <supportedExtension>ftl</supportedExtension>\n    </templateProcessor>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.template.service.TemplateProcessorComponent\" point=\"processor\">\n\n    <documentation>XSLT template processor</documentation>\n\n    <templateProcessor name=\"XSLTProcessor\" label=\"Raw XSLT Processor\" default=\"false\" class=\"org.nuxeo.template.processors.xslt.XSLTProcessor\">\n      <supportedMimeType>text/xml</supportedMimeType>\n      <supportedExtension>xml</supportedExtension>\n      <supportedExtension>xsl</supportedExtension>\n      <supportedExtension>xslt</supportedExtension>\n    </templateProcessor>\n\n  </extension>\n\n <extension target=\"org.nuxeo.template.service.TemplateProcessorComponent\" point=\"processor\">\n\n    <documentation>Identity processor</documentation>\n\n    <templateProcessor name=\"Identity\" label=\"Identity\" default=\"false\" class=\"org.nuxeo.template.processors.IdentityProcessor\">\n    </templateProcessor>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.template.service.TemplateProcessorComponent\" point=\"contextExtension\">\n\n    <documentation>\n      Adds utility functions in the context\n      <ul>\n        <li>functions.getVocabularyTranslatedLabel(vocname, key, lang)</li>\n        <li>functions.getVocabularyLabel(vocname, key)</li>\n        <li>functions.getVocabularyLabel(vocname, key)</li>\n        <li>functions.formatDate(calendar)</li>\n        <li>functions.formatDateTime(calendar)</li>\n        <li>functions.formatTime(calendar)</li>\n        <li>functions.getNuxeoPrincipal(username)</li>\n      </ul>\n    </documentation>\n\n    <contextFactory name=\"functions\" class=\"org.nuxeo.template.context.extensions.FunctionsExtensionFactory\">\n     <aliasName>fn</aliasName>\n     <aliasName>Fn</aliasName>\n    </contextFactory>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.template.service.TemplateProcessorComponent\" point=\"contextExtension\">\n\n    <documentation>Adds audit infos in the context\n      <ul>\n        <li>auditEntries</li>\n      </ul>\n    </documentation>\n\n    <contextFactory name=\"auditEntries\" class=\"org.nuxeo.template.context.extensions.AuditExtensionFactory\">\n    </contextFactory>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.template.service.TemplateProcessorComponent\" point=\"contextExtension\">\n\n    <documentation>Adds Repository features in the context\n      <ul>\n        <li>core.getParent()</li>\n        <li>core.getChildren()</li>\n      </ul>\n    </documentation>\n\n    <contextFactory name=\"core\" class=\"org.nuxeo.template.context.extensions.CoreExtensionFactory\">\n    </contextFactory>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.template.service.TemplateProcessorComponent\" point=\"outputFormat\">\n\n    <documentation>Adds outputFormat for the following mime type\n      <ul>\n        <li>pdf</li>\n        <li>odt</li>\n        <li>doc</li>\n        <li>docx</li>\n      </ul>\n    </documentation>\n\n    <outputFormat id=\"pdf\" label=\"PDF\" mimetype=\"application/pdf\"/>\n    <outputFormat id=\"odt\" label=\"ODT\" mimetype=\"application/vnd.oasis.opendocument.text\"/>\n    <outputFormat id=\"doc\" label=\"DOC\" mimetype=\"application/msword\"/>\n    <outputFormat id=\"docx\" label=\"DOCX\" mimetype=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"/>\n  </extension>\n\n </component>",
          "xmlFileName": "/OSGI-INF/templateprocessor-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.adapterContrib/Contributions/org.nuxeo.platform.TemplateSources.adapterContrib--adapters",
              "id": "org.nuxeo.platform.TemplateSources.adapterContrib--adapters",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n\n    <adapter class=\"org.nuxeo.template.api.adapters.TemplateBasedDocument\" factory=\"org.nuxeo.template.adapters.TemplateAdapterFactory\"/>\n\n    <adapter class=\"org.nuxeo.template.api.adapters.TemplateSourceDocument\" factory=\"org.nuxeo.template.adapters.TemplateAdapterFactory\"/>\n\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.adapterContrib",
          "name": "org.nuxeo.platform.TemplateSources.adapterContrib",
          "requirements": [],
          "resolutionOrder": 865,
          "services": [],
          "startOrder": 687,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.platform.TemplateSources.adapterContrib\">\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n\n    <adapter\n      class=\"org.nuxeo.template.api.adapters.TemplateBasedDocument\" factory=\"org.nuxeo.template.adapters.TemplateAdapterFactory\" />\n\n    <adapter\n      class=\"org.nuxeo.template.api.adapters.TemplateSourceDocument\" factory=\"org.nuxeo.template.adapters.TemplateAdapterFactory\" />\n\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.listener/Contributions/org.nuxeo.platform.TemplateSources.listener--listener",
              "id": "org.nuxeo.platform.TemplateSources.listener--listener",
              "registrationOrder": 49,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"false\" class=\"org.nuxeo.template.listeners.TemplateInitListener\" name=\"documenttemplate-init\" postCommit=\"false\" priority=\"500\">\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n\n    <listener async=\"false\" class=\"org.nuxeo.template.listeners.TemplateDeletionGuard\" name=\"documenttemplate-deletionguard\" postCommit=\"false\" priority=\"500\">\n      <event>aboutToRemove</event>\n    </listener>\n\n    <listener async=\"true\" class=\"org.nuxeo.template.listeners.TemplateTypeBindingListener\" name=\"documenttemplate-type-binding\" postCommit=\"true\" priority=\"500\">\n      <event>documentCreated</event>\n      <event>documentModified</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.listener",
          "name": "org.nuxeo.platform.TemplateSources.listener",
          "requirements": [],
          "resolutionOrder": 866,
          "services": [],
          "startOrder": 693,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.platform.TemplateSources.listener\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"documenttemplate-init\" async=\"false\"\n      postCommit=\"false\" priority=\"500\"\n      class=\"org.nuxeo.template.listeners.TemplateInitListener\">\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n\n    <listener name=\"documenttemplate-deletionguard\" async=\"false\"\n      postCommit=\"false\" priority=\"500\"\n      class=\"org.nuxeo.template.listeners.TemplateDeletionGuard\">\n      <event>aboutToRemove</event>\n    </listener>\n\n    <listener name=\"documenttemplate-type-binding\" async=\"true\" postCommit=\"true\" priority=\"500\"\n      class=\"org.nuxeo.template.listeners.TemplateTypeBindingListener\">\n      <event>documentCreated</event>\n      <event>documentModified</event>\n    </listener>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.ecm.platform.templates.convert.plugins/Contributions/org.nuxeo.ecm.platform.templates.convert.plugins--converter",
              "id": "org.nuxeo.ecm.platform.templates.convert.plugins--converter",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n   <converter class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\" name=\"any2odt\">\n      <destinationMimeType>application/vnd.oasis.opendocument.text</destinationMimeType>\n\n      <sourceMimeType>text/x-web-markdown</sourceMimeType>\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/msword</sourceMimeType>\n\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.wordprocessingml.document\n      </sourceMimeType>\n\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n\n      <!-- OpenOffice.org 2.x documents -->\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n\n      <!-- WordPerfect -->\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">odt</parameter>\n      </parameters>\n   </converter>\n\n   <converter class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\" name=\"any2docx\">\n\n      <destinationMimeType>application/vnd.openxmlformats-officedocument.wordprocessingml.document</destinationMimeType>\n\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/msword</sourceMimeType>\n\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.wordprocessingml.document\n      </sourceMimeType>\n\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n\n      <!-- OpenOffice.org 2.x documents -->\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n\n      <!-- WordPerfect -->\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">docx</parameter>\n      </parameters>\n   </converter>\n\n   <converter class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\" name=\"any2doc\">\n\n      <destinationMimeType>application/msword</destinationMimeType>\n\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/msword</sourceMimeType>\n\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.wordprocessingml.document\n      </sourceMimeType>\n\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n\n      <!-- OpenOffice.org 2.x documents -->\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n\n      <!-- WordPerfect -->\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">doc</parameter>\n      </parameters>\n   </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.ecm.platform.templates.convert.plugins",
          "name": "org.nuxeo.ecm.platform.templates.convert.plugins",
          "requirements": [
            "org.nuxeo.ecm.platform.convert.plugins"
          ],
          "resolutionOrder": 867,
          "services": [],
          "startOrder": 497,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.templates.convert.plugins\">\n\n  <require>org.nuxeo.ecm.platform.convert.plugins</require>\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"\n    point=\"converter\">\n\n   <converter name=\"any2odt\" class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\">\n      <destinationMimeType>application/vnd.oasis.opendocument.text</destinationMimeType>\n\n      <sourceMimeType>text/x-web-markdown</sourceMimeType>\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/msword</sourceMimeType>\n\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.wordprocessingml.document\n      </sourceMimeType>\n\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n\n      <!-- OpenOffice.org 2.x documents -->\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n\n      <!-- WordPerfect -->\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">odt</parameter>\n      </parameters>\n   </converter>\n\n   <converter name=\"any2docx\" class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\">\n\n      <destinationMimeType>application/vnd.openxmlformats-officedocument.wordprocessingml.document</destinationMimeType>\n\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/msword</sourceMimeType>\n\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.wordprocessingml.document\n      </sourceMimeType>\n\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n\n      <!-- OpenOffice.org 2.x documents -->\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n\n      <!-- WordPerfect -->\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">docx</parameter>\n      </parameters>\n   </converter>\n\n   <converter name=\"any2doc\" class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\">\n\n      <destinationMimeType>application/msword</destinationMimeType>\n\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/msword</sourceMimeType>\n\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.wordprocessingml.document\n      </sourceMimeType>\n\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n\n      <!-- OpenOffice.org 2.x documents -->\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n\n      <!-- WordPerfect -->\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">doc</parameter>\n      </parameters>\n   </converter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/convert-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--mimetype",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.mimetype/Contributions/org.nuxeo.platform.TemplateSources.mimetype--mimetype",
              "id": "org.nuxeo.platform.TemplateSources.mimetype--mimetype",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
                "name": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"mimetype\" target=\"org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService\">\n\n\t\t<mimetype binary=\"false\" iconPath=\"text.png\" normalized=\"text/x-freemarker\">\n\t\t\t<mimetypes>\n\t\t\t\t<mimetype>text/x-freemarker</mimetype>\n\t\t\t</mimetypes>\n\t\t\t<extensions>\n\t\t\t\t<extension>ftl</extension>\n\t\t\t</extensions>\n\t\t</mimetype>\n\t</extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.mimetype",
          "name": "org.nuxeo.platform.TemplateSources.mimetype",
          "requirements": [],
          "resolutionOrder": 868,
          "services": [],
          "startOrder": 694,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component\n\tname=\"org.nuxeo.platform.TemplateSources.mimetype\">\n\n\t<extension\n\t\ttarget=\"org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService\"\n\t\tpoint=\"mimetype\">\n\n\t\t<mimetype normalized=\"text/x-freemarker\" binary=\"false\" iconPath=\"text.png\">\n\t\t\t<mimetypes>\n\t\t\t\t<mimetype>text/x-freemarker</mimetype>\n\t\t\t</mimetypes>\n\t\t\t<extensions>\n\t\t\t\t<extension>ftl</extension>\n\t\t\t</extensions>\n\t\t</mimetype>\n\t</extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/mimetype-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.rendition.service.RenditionService--renditionDefinitions",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.rendition.contrib/Contributions/org.nuxeo.platform.TemplateSources.rendition.contrib--renditionDefinitions",
              "id": "org.nuxeo.platform.TemplateSources.rendition.contrib--renditionDefinitions",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "name": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"renditionDefinitions\" target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\">\n    <renditionDefinition class=\"org.nuxeo.template.rendition.TemplateBasedRenditionProvider\" enabled=\"true\" name=\"delivery\">\n      <icon>/icons/delivery.png</icon>\n      <label>label.rendition.delivery</label>\n    </renditionDefinition>\n    <renditionDefinition class=\"org.nuxeo.template.rendition.TemplateBasedRenditionProvider\" enabled=\"true\" name=\"webView\">\n      <icon>/icons/htmlView.png</icon>\n      <label>label.rendition.webView</label>\n    </renditionDefinition>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.rendition.contrib",
          "name": "org.nuxeo.platform.TemplateSources.rendition.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.rendition.contrib"
          ],
          "resolutionOrder": 869,
          "services": [],
          "startOrder": 697,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.platform.TemplateSources.rendition.contrib\">\n\n  <require>org.nuxeo.ecm.platform.rendition.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\"\n    point=\"renditionDefinitions\">\n    <renditionDefinition name=\"delivery\" enabled=\"true\" class=\"org.nuxeo.template.rendition.TemplateBasedRenditionProvider\">\n      <icon>/icons/delivery.png</icon>\n      <label>label.rendition.delivery</label>\n    </renditionDefinition>\n    <renditionDefinition name=\"webView\" enabled=\"true\" class=\"org.nuxeo.template.rendition.TemplateBasedRenditionProvider\">\n      <icon>/icons/htmlView.png</icon>\n      <label>label.rendition.webView</label>\n    </renditionDefinition>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendition-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n  Contribute Operation to encapsulate TemplateProcessor rendering features\n  @author Tiry (tdelprat@nuxeo.com)\n",
          "documentationHtml": "<p>\nContribute Operation to encapsulate TemplateProcessor rendering features\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.operations/Contributions/org.nuxeo.platform.TemplateSources.operations--operations",
              "id": "org.nuxeo.platform.TemplateSources.operations--operations",
              "registrationOrder": 36,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <operation class=\"org.nuxeo.template.automation.RenderWithTemplateOperation\"/>\n    <operation class=\"org.nuxeo.template.automation.DetachTemplateOperation\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--operation",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.operations/Contributions/org.nuxeo.platform.TemplateSources.operations--operation",
              "id": "org.nuxeo.platform.TemplateSources.operations--operation",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "name": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operation\" target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\">\n\n    <scriptedOperation id=\"javascript.FilterTemplatesByType\">\n      <inputType>document</inputType>\n      <outputType>documents</outputType>\n      <category>javascript</category>\n      <description>Filter templates according to the type of a given input document.</description>\n      <script><![CDATA[\n        function run(input, params) {\n          return Repository.Query(null, {\n            'query': 'select * from Document where ecm:mixinType = \"Template\" AND ecm:isTrashed = 0 AND tmpl:applicableTypes IN ( \"all\", \"' + input['type'] + '\") AND ecm:isVersion = 0'\n          });\n        }\n      ]]></script>\n    </scriptedOperation>\n\n    <scriptedOperation id=\"javascript.RenderPdf\">\n      <inputType>document</inputType>\n      <outputType>blob</outputType>\n      <category>javascript</category>\n      <param name=\"templateName\" type=\"string\"/>\n      <param name=\"attach\" type=\"boolean\"/>\n      <param name=\"templateData\" type=\"string\"/>\n      <description>Render a document with a given template and converts it to PDF.</description>\n      <script><![CDATA[\n        function run(input, params) {\n          var blob = TemplateProcessor.Render(input, {\n            'templateName': params.templateName,\n            'attach': params.attach || false,\n            'templateData': params.templateData || null\n          });\n          return Blob.RunConverter(blob, {'converter': 'any2pdf'});\n        }\n      ]]></script>\n    </scriptedOperation>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.operations",
          "name": "org.nuxeo.platform.TemplateSources.operations",
          "requirements": [],
          "resolutionOrder": 870,
          "services": [],
          "startOrder": 695,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.platform.TemplateSources.operations\" version=\"1.0\">\n\n  <documentation>\n  Contribute Operation to encapsulate TemplateProcessor rendering features\n  @author Tiry (tdelprat@nuxeo.com)</documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n\n    <operation\n      class=\"org.nuxeo.template.automation.RenderWithTemplateOperation\" />\n    <operation\n      class=\"org.nuxeo.template.automation.DetachTemplateOperation\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\" point=\"operation\">\n\n    <scriptedOperation id=\"javascript.FilterTemplatesByType\">\n      <inputType>document</inputType>\n      <outputType>documents</outputType>\n      <category>javascript</category>\n      <description>Filter templates according to the type of a given input document.</description>\n      <script><![CDATA[\n        function run(input, params) {\n          return Repository.Query(null, {\n            'query': 'select * from Document where ecm:mixinType = \"Template\" AND ecm:isTrashed = 0 AND tmpl:applicableTypes IN ( \"all\", \"' + input['type'] + '\") AND ecm:isVersion = 0'\n          });\n        }\n      ]]></script>\n    </scriptedOperation>\n\n    <scriptedOperation id=\"javascript.RenderPdf\">\n      <inputType>document</inputType>\n      <outputType>blob</outputType>\n      <category>javascript</category>\n      <param name=\"templateName\" type=\"string\"/>\n      <param name=\"attach\" type=\"boolean\"/>\n      <param name=\"templateData\" type=\"string\"/>\n      <description>Render a document with a given template and converts it to PDF.</description>\n      <script><![CDATA[\n        function run(input, params) {\n          var blob = TemplateProcessor.Render(input, {\n            'templateName': params.templateName,\n            'attach': params.attach || false,\n            'templateData': params.templateData || null\n          });\n          return Blob.RunConverter(blob, {'converter': 'any2pdf'});\n        }\n      ]]></script>\n    </scriptedOperation>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.pageproviders/Contributions/org.nuxeo.platform.TemplateSources.pageproviders--providers",
              "id": "org.nuxeo.platform.TemplateSources.pageproviders--providers",
              "registrationOrder": 33,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"template_based\">\n      <pattern escapeParameters=\"true\" quoteParameters=\"false\">\n        SELECT * FROM Document WHERE ecm:mixinType = 'TemplateBased' AND\n        ecm:isTrashed = 0 AND\n        nxts:bindings/*/templateId IN (?) AND ecm:isVersion = ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.platform.TemplateSources.pageproviders",
          "name": "org.nuxeo.platform.TemplateSources.pageproviders",
          "requirements": [],
          "resolutionOrder": 871,
          "services": [],
          "startOrder": 696,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.platform.TemplateSources.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n             point=\"providers\">\n\n    <coreQueryPageProvider name=\"template_based\">\n      <pattern escapeParameters=\"true\" quoteParameters=\"false\">\n        SELECT * FROM Document WHERE ecm:mixinType = 'TemplateBased' AND\n        ecm:isTrashed = 0 AND\n        nxts:bindings/*/templateId IN (?) AND ecm:isVersion = ?\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.template.serializer.service.TemplateSerializerServiceImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.template.serializer.service.TemplateSerializerService",
              "descriptors": [
                "org.nuxeo.template.serializer.service.SerializerDescriptor"
              ],
              "documentation": "Contribute a new Serializer that can be use by the TemplateProcessor.Render operation\n",
              "documentationHtml": "<p>\nContribute a new Serializer that can be use by the TemplateProcessor.Render operation</p>",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.serializer.service.TemplateSerializerService/ExtensionPoints/org.nuxeo.template.serializer.service.TemplateSerializerService--serializers",
              "id": "org.nuxeo.template.serializer.service.TemplateSerializerService--serializers",
              "label": "serializers (org.nuxeo.template.serializer.service.TemplateSerializerService)",
              "name": "serializers",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.serializer.service.TemplateSerializerService",
          "name": "org.nuxeo.template.serializer.service.TemplateSerializerService",
          "requirements": [],
          "resolutionOrder": 872,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.template.serializer.service.TemplateSerializerService",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.serializer.service.TemplateSerializerService/Services/org.nuxeo.template.serializer.service.TemplateSerializerService",
              "id": "org.nuxeo.template.serializer.service.TemplateSerializerService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 931,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.template.serializer.service.TemplateSerializerService\">\n\n  <implementation class=\"org.nuxeo.template.serializer.service.TemplateSerializerServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.template.serializer.service.TemplateSerializerService\" />\n  </service>\n\n  <extension-point name=\"serializers\">\n    <documentation>Contribute a new Serializer that can be use by the TemplateProcessor.Render operation</documentation>\n    <object class=\"org.nuxeo.template.serializer.service.SerializerDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/serializer-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.template.serializer.service.TemplateSerializerService--serializers",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.serializer.SerializerService.default.contribution/Contributions/org.nuxeo.template.serializer.SerializerService.default.contribution--serializers",
              "id": "org.nuxeo.template.serializer.SerializerService.default.contribution--serializers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.template.serializer.service.TemplateSerializerService",
                "name": "org.nuxeo.template.serializer.service.TemplateSerializerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"serializers\" target=\"org.nuxeo.template.serializer.service.TemplateSerializerService\">\n    <serializer class=\"org.nuxeo.template.serializer.executors.XMLTemplateSerializer\" name=\"default\"/>\n    <serializer class=\"org.nuxeo.template.serializer.executors.XMLTemplateSerializer\" name=\"xml\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager/org.nuxeo.template.serializer.SerializerService.default.contribution",
          "name": "org.nuxeo.template.serializer.SerializerService.default.contribution",
          "requirements": [],
          "resolutionOrder": 873,
          "services": [],
          "startOrder": 745,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.template.serializer.SerializerService.default.contribution\">\n\n  <extension target=\"org.nuxeo.template.serializer.service.TemplateSerializerService\" point=\"serializers\">\n    <serializer name=\"default\" class=\"org.nuxeo.template.serializer.executors.XMLTemplateSerializer\" />\n    <serializer name=\"xml\" class=\"org.nuxeo.template.serializer.executors.XMLTemplateSerializer\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/serializer-service-contribution.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-template-rendering-core-2023.7.9.jar",
      "groupId": "org.nuxeo.template.rendering",
      "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager",
      "id": "org.nuxeo.template.manager",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM Document template Manager\r\nBundle-SymbolicName: org.nuxeo.template.manager;singleton:=true\r\nNuxeo-Component: OSGI-INF/core-types-contrib.xml,OSGI-INF/types-contrib.\r\n xml,OSGI-INF/life-cycle-contrib.xml,OSGI-INF/templateprocessor-service.\r\n xml,OSGI-INF/templateprocessor-contrib.xml,OSGI-INF/adapter-contrib.xml\r\n ,OSGI-INF/listener-contrib.xml,OSGI-INF/convert-service-contrib.xml,OSG\r\n I-INF/mimetype-contrib.xml,OSGI-INF/rendition-contrib.xml,OSGI-INF/oper\r\n ations-contrib.xml,OSGI-INF/pageprovider-contrib.xml,OSGI-INF/serialize\r\n r-service.xml,OSGI-INF/serializer-service-contribution.xml\r\n\r\n",
      "maxResolutionOrder": 873,
      "minResolutionOrder": 860,
      "packages": [
        "nuxeo-template-rendering"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "\n# Nuxeo Template Rendering\n\n## About Nuxeo Template Rendering\n The Nuxeo Template Rendering is a set of plugins that provides a way to associate a Nuxeo Document with a Template. The Templates are used to render the associated document. Depending on the Template type, a different Template Processor will be used and the resulting rendering can be :\n\n   * an HTML document\n   * an XML document\n   * an OpenOffice document\n   * an MS Office document\n\n\nEach template processor has his own logic for rendering a Document from a Template :\n\n   * raw processing (FreeMarker or XSLT)\n   * merge fields replacement (MS Office / OpenOffice)\n\nThis project is an on-going project, supported by Nuxeo.\n\n## Sub-modules organization\nThe project is splitted in several sub modules :\n\n**nuxeo-template-rendering-api**\n\nAPI module containing all interfaces.\n\n**nuxeo-template-rendering-core**\n\nComponent, extension points and service implementation. This modules only contains template processors for FreeMarker and XSLT.\n\n**nuxeo-template-rendering-jsf**\n\nContribute UI level extensions: Layouts, Widgets, Views, Url bindings ...\n\n**nuxeo-template-rendering-xdocreport**\n\nContribute the OpenOffice / DocX processor based on XDocReport. This is by far the most powerfull processor.\nSee: http://code.google.com/p/xdocreport/\n\n**nuxeo-template-rendering-jxls**\n\nContribute a template processor for XLS files based on JXLS project. See: http://jxls.sourceforge.net/\n\n**nuxeo-template-rendering-jod**\n\nContribute JOD Report based template processor for ODT files. This renderer is historical and replaced by xdocreport that is more powerful.\n\n**nuxeo-template-rendering-jaxrs**\n\nContribute a JAXRS simple API as well as a new WebTemplate doc type that is based on a Note rather than a file.\n\n**nuxeo-template-rendering-sandbox**\n\nMisc code and extensions that are currently experimental.\n\n**nuxeo-template-rendering-package**\n\nBuilder for marketplace package.\n\n## Building\n\n### How to build Nuxeo Template Rendering\nBuild the Nuxeo Template Rendering add-on with Maven:\n\n```mvn clean install```\n\n## Deploying\nNuxeo Template Rendering is available as a package add-on [from the Nuxeo Marketplace] (https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-template-rendering)\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Template Rendering is available in our Documentation Center: http://doc.nuxeo.com/x/9YSo\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Template Rendering component: https://jira.nuxeo.com/browse/NXP/component/11405\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "e9e176463318c286d8f00955de4c43a2",
        "encoding": "UTF-8",
        "length": 3344,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "readme": {
        "blobProviderId": "default",
        "content": "This modules contains the implementation of nuxexo-template-rendering module.\n\nMain objects are\n\n## TemplateProcessorComponent\n\nRuntime Component used to handle Extension Points and expose the TemplateProcessorService interface\n(interface that is used to manipulate TemplateProcessors and associated documents).\n\n## Default TemplateProcessor implementation\n\n - FreeMarker TemplateProcessor : FreeMarkerProcessor\n - XSLT based TemplateProcessor : XSLTProcessor\n\n## TemplateBasedDocumentAdapterImpl\n\nDefault implementation of the DocumentModel adapter for interface TemplateBasedDocument\n(a DocumentModel that is bound to one or more templates)\n\n## TemplateSourceDocumentAdapterImpl\n\nDefault implementation of the DocumentModel adapter for interface TemplateSourceDocument\n(a DocumentModel that can provide a template)\n\n## TemplateBasedRenditionProvider\n\nProvides Rendition based on the template system.\n\n## Automation Operation\n\nAutomation Operations to wrapp TemplateProcessorService.\n",
        "digest": "80854b4d9e7e00496aa7934037da0b8b",
        "encoding": "UTF-8",
        "length": 985,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-directory-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.directory",
          "org.nuxeo.ecm.directory.api",
          "org.nuxeo.ecm.directory.ldap",
          "org.nuxeo.ecm.directory.multi",
          "org.nuxeo.ecm.directory.sql",
          "org.nuxeo.ecm.directory.types.contrib",
          "org.nuxeo.ecm.directory.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory",
        "id": "grp:org.nuxeo.ecm.directory",
        "name": "org.nuxeo.ecm.directory",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.directory",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.local.configuration/Contributions/org.nuxeo.ecm.directory.local.configuration--schema",
              "id": "org.nuxeo.ecm.directory.local.configuration--schema",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"directory_configuration\" prefix=\"dirconf\" src=\"schemas/directory_configuration.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.local.configuration/Contributions/org.nuxeo.ecm.directory.local.configuration--doctype",
              "id": "org.nuxeo.ecm.directory.local.configuration--doctype",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"DirectoryLocalConfiguration\">\n      <schema name=\"directory_configuration\"/>\n    </facet>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.local.configuration/Contributions/org.nuxeo.ecm.directory.local.configuration--adapters",
              "id": "org.nuxeo.ecm.directory.local.configuration--adapters",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.directory.localconfiguration.DirectoryConfiguration\" factory=\"org.nuxeo.ecm.directory.localconfiguration.DirectoryConfigurationFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.local.configuration",
          "name": "org.nuxeo.ecm.directory.local.configuration",
          "requirements": [],
          "resolutionOrder": 354,
          "services": [],
          "startOrder": 201,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.directory.local.configuration\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"directory_configuration\" prefix=\"dirconf\"\n      src=\"schemas/directory_configuration.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n\n    <facet name=\"DirectoryLocalConfiguration\">\n      <schema name=\"directory_configuration\" />\n    </facet>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter\n      class=\"org.nuxeo.ecm.directory.localconfiguration.DirectoryConfiguration\"\n      factory=\"org.nuxeo.ecm.directory.localconfiguration.DirectoryConfigurationFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/directory-local-configuration.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Resolver for document properties containing Directory entries id. This resolver reference a proper\n    directory.\n  \n",
          "documentationHtml": "<p>\nResolver for document properties containing Directory entries id. This resolver reference a proper\ndirectory.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.ObjectResolverService--resolvers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.resolver/Contributions/org.nuxeo.ecm.directory.resolver--resolvers",
              "id": "org.nuxeo.ecm.directory.resolver--resolvers",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.ObjectResolverService",
                "name": "org.nuxeo.ecm.core.schema.ObjectResolverService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resolvers\" target=\"org.nuxeo.ecm.core.schema.ObjectResolverService\">\n    <resolver class=\"org.nuxeo.ecm.directory.DirectoryEntryResolver\" type=\"directoryResolver\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.resolver",
          "name": "org.nuxeo.ecm.directory.resolver",
          "requirements": [],
          "resolutionOrder": 355,
          "services": [],
          "startOrder": 203,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.directory.resolver\">\n  <documentation>\n    Resolver for document properties containing Directory entries id. This resolver reference a proper\n    directory.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.ObjectResolverService\" point=\"resolvers\">\n    <resolver type=\"directoryResolver\" class=\"org.nuxeo.ecm.directory.DirectoryEntryResolver\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/directory-resolver-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Core IO registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO registered marshallers set.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.marshallers/Contributions/org.nuxeo.ecm.directory.marshallers--marshallers",
              "id": "org.nuxeo.ecm.directory.marshallers--marshallers",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.directory.io.DirectoryEntryJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.directory.io.DirectoryEntryJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.directory.io.DirectoryEntryListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.directory.io.DirectoryEntryListJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.directory.io.DirectoryJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.directory.io.DirectoryListJsonWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.marshallers",
          "name": "org.nuxeo.ecm.directory.marshallers",
          "requirements": [],
          "resolutionOrder": 356,
          "services": [],
          "startOrder": 202,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.directory.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    <register class=\"org.nuxeo.ecm.directory.io.DirectoryEntryJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.directory.io.DirectoryEntryJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.directory.io.DirectoryEntryListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.directory.io.DirectoryEntryListJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.directory.io.DirectoryJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.directory.io.DirectoryListJsonWriter\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.directory.DirectoryServiceImpl",
          "declaredStartOrder": 97,
          "documentation": "\n    The directory service holds registered directories.\n  \n",
          "documentationHtml": "<p>\nThe directory service holds registered directories.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.directory.DirectoryServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.directory.DirectoryFactoryDescriptor"
              ],
              "documentation": "\n      This extension point is obsolete.\n    \n",
              "documentationHtml": "<p>\nThis extension point is obsolete.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.DirectoryServiceImpl/ExtensionPoints/org.nuxeo.ecm.directory.DirectoryServiceImpl--factoryDescriptor",
              "id": "org.nuxeo.ecm.directory.DirectoryServiceImpl--factoryDescriptor",
              "label": "factoryDescriptor (org.nuxeo.ecm.directory.DirectoryServiceImpl)",
              "name": "factoryDescriptor",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.EventService--listeners",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.DirectoryServiceImpl/Contributions/org.nuxeo.ecm.directory.DirectoryServiceImpl--listeners",
              "id": "org.nuxeo.ecm.directory.DirectoryServiceImpl--listeners",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.EventService",
                "name": "org.nuxeo.runtime.EventService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listeners\" target=\"org.nuxeo.runtime.EventService\">\n    <listener class=\"org.nuxeo.ecm.directory.DirectoryCacheFlusher\">\n      <topic>org.nuxeo.runtime.reload</topic>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.DirectoryServiceImpl",
          "name": "org.nuxeo.ecm.directory.DirectoryServiceImpl",
          "requirements": [
            "org.nuxeo.runtime.cluster.ClusterService",
            "org.nuxeo.ecm.core.cache.CacheService"
          ],
          "resolutionOrder": 795,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.directory.DirectoryServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.DirectoryServiceImpl/Services/org.nuxeo.ecm.directory.api.DirectoryService",
              "id": "org.nuxeo.ecm.directory.api.DirectoryService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 769,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.directory.DirectoryServiceImpl\">\n\n  <!-- The cache service must be started before me: TODO use a start level dependency? -->\n  <require>org.nuxeo.ecm.core.cache.CacheService</require>\n  <require>org.nuxeo.runtime.cluster.ClusterService</require>\n\n  <implementation class=\"org.nuxeo.ecm.directory.DirectoryServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.directory.api.DirectoryService\" />\n  </service>\n\n  <documentation>\n    The directory service holds registered directories.\n  </documentation>\n\n  <extension-point name=\"factoryDescriptor\">\n    <documentation>\n      This extension point is obsolete.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.directory.DirectoryFactoryDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.runtime.EventService\" point=\"listeners\">\n    <listener class=\"org.nuxeo.ecm.directory.DirectoryCacheFlusher\">\n      <topic>org.nuxeo.runtime.reload</topic>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/DirectoryService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.directory.core.CoreDirectoryFactory",
          "declaredStartOrder": null,
          "documentation": "Core directory implementation.\n",
          "documentationHtml": "<p>\nCore directory implementation.</p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.directory.core.CoreDirectoryFactory",
              "descriptors": [
                "org.nuxeo.ecm.directory.core.CoreDirectoryDescriptor",
                "org.nuxeo.ecm.directory.core.CoreDirectoryDescriptor.ACLDescriptor"
              ],
              "documentation": "\n\n      This extension point can be used to register new\n      core directories.\n      <code>\n        ...\n        <directory name=\"myCoreDirectory\">\n        <schema>user</schema>\n        <idField>username</idField>\n        <passwordField>password</passwordField>\n        <readOnly>false</readOnly>\n        <references/>\n    </directory>\n</code>\n",
              "documentationHtml": "<p>\nThis extension point can be used to register new\ncore directories.\n</p><p></p><pre><code>        ...\n        &lt;directory name&#61;&#34;myCoreDirectory&#34;&gt;\n        &lt;schema&gt;user&lt;/schema&gt;\n        &lt;idField&gt;username&lt;/idField&gt;\n        &lt;passwordField&gt;password&lt;/passwordField&gt;\n        &lt;readOnly&gt;false&lt;/readOnly&gt;\n        &lt;references/&gt;\n    &lt;/directory&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.core.CoreDirectoryFactory/ExtensionPoints/org.nuxeo.ecm.directory.core.CoreDirectoryFactory--directories",
              "id": "org.nuxeo.ecm.directory.core.CoreDirectoryFactory--directories",
              "label": "directories (org.nuxeo.ecm.directory.core.CoreDirectoryFactory)",
              "name": "directories",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.core.CoreDirectoryFactory",
          "name": "org.nuxeo.ecm.directory.core.CoreDirectoryFactory",
          "requirements": [
            "org.nuxeo.ecm.directory.DirectoryServiceImpl"
          ],
          "resolutionOrder": 799,
          "services": [],
          "startOrder": 830,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.directory.core.CoreDirectoryFactory\">\n\n  <implementation class=\"org.nuxeo.ecm.directory.core.CoreDirectoryFactory\"/>\n\n  <require>org.nuxeo.ecm.directory.DirectoryServiceImpl</require>\n\n  <documentation>Core directory implementation.</documentation>\n\n  <extension-point name=\"directories\">\n    <object class=\"org.nuxeo.ecm.directory.core.CoreDirectoryDescriptor\"/>\n    <object class=\"org.nuxeo.ecm.directory.core.CoreDirectoryDescriptor$ACLDescriptor\"/>\n\n    <documentation>\n      This extension point can be used to register new\n      core directories.\n      <code>\n        ...\n        <directory name=\"myCoreDirectory\">\n          <schema>user</schema>\n          <idField>username</idField>\n          <passwordField>password</passwordField>\n          <readOnly>false</readOnly>\n          <references>\n          </references>\n        </directory>\n\n      </code>\n\n    </documentation>\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/CoreDirectory.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.directory.GenericDirectoryComponent",
          "declaredStartOrder": null,
          "documentation": "\n    Registration of generic directories.\n  \n",
          "documentationHtml": "<p>\nRegistration of generic directories.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.directory.GenericDirectory",
              "descriptors": [
                "org.nuxeo.ecm.directory.BaseDirectoryDescriptor"
              ],
              "documentation": "\n      Registration of generic directories. Generic directories are usable only as extensions to\n      other directories which have been defined as templates.\n\n      First, register a template directory:\n      <code>\n    <extension point=\"directories\" target=\"org.nuxeo.ecm.directory.sql.SQLDirectoryFactory\">\n        <directory name=\"template-dir\" template=\"true\">\n            <dataSource>java:/nxsqldirectory</dataSource>\n            <createTablePolicy>always</createTablePolicy>\n            <querySizeLimit>100</querySizeLimit>\n        </directory>\n    </extension>\n</code>\n\n      Then use a generic directory to provide specific customizations:\n      <code>\n    <extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n        <directory extends=\"template-dir\" name=\"my-directory\">\n            <schema>myschema</schema>\n            <table>mytable</table>\n            <idField>id</idField>\n            <passwordField>password</passwordField>\n            <passwordHashAlgorithm>SSHA</passwordHashAlgorithm>\n            <substringMatchType>subany</substringMatchType>\n            <cacheTimeout>3600</cacheTimeout>\n            <cacheMaxSize>1000</cacheMaxSize>\n            <!-- <dataFile>my-directory.csv</dataFile> -->\n        </directory>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\nRegistration of generic directories. Generic directories are usable only as extensions to\nother directories which have been defined as templates.\n</p><p>\nFirst, register a template directory:\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;directories&#34; target&#61;&#34;org.nuxeo.ecm.directory.sql.SQLDirectoryFactory&#34;&gt;\n        &lt;directory name&#61;&#34;template-dir&#34; template&#61;&#34;true&#34;&gt;\n            &lt;dataSource&gt;java:/nxsqldirectory&lt;/dataSource&gt;\n            &lt;createTablePolicy&gt;always&lt;/createTablePolicy&gt;\n            &lt;querySizeLimit&gt;100&lt;/querySizeLimit&gt;\n        &lt;/directory&gt;\n    &lt;/extension&gt;\n</code></pre><p>\nThen use a generic directory to provide specific customizations:\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;directories&#34; target&#61;&#34;org.nuxeo.ecm.directory.GenericDirectory&#34;&gt;\n        &lt;directory extends&#61;&#34;template-dir&#34; name&#61;&#34;my-directory&#34;&gt;\n            &lt;schema&gt;myschema&lt;/schema&gt;\n            &lt;table&gt;mytable&lt;/table&gt;\n            &lt;idField&gt;id&lt;/idField&gt;\n            &lt;passwordField&gt;password&lt;/passwordField&gt;\n            &lt;passwordHashAlgorithm&gt;SSHA&lt;/passwordHashAlgorithm&gt;\n            &lt;substringMatchType&gt;subany&lt;/substringMatchType&gt;\n            &lt;cacheTimeout&gt;3600&lt;/cacheTimeout&gt;\n            &lt;cacheMaxSize&gt;1000&lt;/cacheMaxSize&gt;\n            &lt;!-- &lt;dataFile&gt;my-directory.csv&lt;/dataFile&gt; --&gt;\n        &lt;/directory&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.GenericDirectory/ExtensionPoints/org.nuxeo.ecm.directory.GenericDirectory--directories",
              "id": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "label": "directories (org.nuxeo.ecm.directory.GenericDirectory)",
              "name": "directories",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.GenericDirectory",
          "name": "org.nuxeo.ecm.directory.GenericDirectory",
          "requirements": [
            "org.nuxeo.ecm.directory.DirectoryServiceImpl"
          ],
          "resolutionOrder": 800,
          "services": [],
          "startOrder": 829,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n  <require>org.nuxeo.ecm.directory.DirectoryServiceImpl</require>\n\n  <implementation class=\"org.nuxeo.ecm.directory.GenericDirectoryComponent\"/>\n\n  <documentation>\n    Registration of generic directories.\n  </documentation>\n\n  <extension-point name=\"directories\">\n\n    <documentation>\n      Registration of generic directories. Generic directories are usable only as extensions to\n      other directories which have been defined as templates.\n\n      First, register a template directory:\n      <code>\n        <extension target=\"org.nuxeo.ecm.directory.sql.SQLDirectoryFactory\" point=\"directories\">\n          <directory name=\"template-dir\" template=\"true\">\n            <dataSource>java:/nxsqldirectory</dataSource>\n            <createTablePolicy>always</createTablePolicy>\n            <querySizeLimit>100</querySizeLimit>\n          </directory>\n        </extension>\n      </code>\n      Then use a generic directory to provide specific customizations:\n      <code>\n        <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n          <directory name=\"my-directory\" extends=\"template-dir\">\n            <schema>myschema</schema>\n            <table>mytable</table>\n            <idField>id</idField>\n            <passwordField>password</passwordField>\n            <passwordHashAlgorithm>SSHA</passwordHashAlgorithm>\n            <substringMatchType>subany</substringMatchType>\n            <cacheTimeout>3600</cacheTimeout>\n            <cacheMaxSize>1000</cacheMaxSize>\n            <!-- <dataFile>my-directory.csv</dataFile> -->\n          </directory>\n        </extension>\n      </code>\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.directory.BaseDirectoryDescriptor\"/>\n\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/GenericDirectory.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-directory-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory",
      "id": "org.nuxeo.ecm.directory",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.directory;core=api,org.nuxeo.ecm.directory\r\n .memory,org.nuxeo.ecm.directory.constants\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: web,stateful\r\nBundle-Name: Nuxeo Directory\r\nBundle-Localization: bundle\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nRequire-Bundle: org.nuxeo.ecm.directory.api;visibility:=reexport,org.nux\r\n eo.ecm.core.schema\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: true\r\nNuxeo-Component: OSGI-INF/DirectoryService.xml,OSGI-INF/GenericDirectory\r\n .xml,OSGI-INF/CoreDirectory.xml,OSGI-INF/directory-local-configuration.\r\n xml,OSGI-INF/directory-resolver-contrib.xml,OSGI-INF/marshallers-contri\r\n b.xml\r\nImport-Package: org.apache.commons.logging,org.nuxeo.common.xmap.annotat\r\n ion,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,org.n\r\n uxeo.ecm.core.api.impl,org.nuxeo.ecm.core.api.model,org.nuxeo.ecm.core.\r\n schema,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm.directory.api,org.\r\n nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.directory;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 800,
      "minResolutionOrder": 354,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.directory.api",
        "org.nuxeo.ecm.core.schema"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-actions-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.actions",
          "org.nuxeo.ecm.actions.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions",
        "id": "grp:org.nuxeo.ecm.actions",
        "name": "org.nuxeo.ecm.actions",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.actions",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.actions.ActionService.properties/Contributions/org.nuxeo.ecm.platform.actions.ActionService.properties--configuration",
              "id": "org.nuxeo.ecm.platform.actions.ActionService.properties--configuration",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <property name=\"nuxeo.actions.debug.log_min_duration_ms\">-1</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.actions.ActionService.properties",
          "name": "org.nuxeo.ecm.platform.actions.ActionService.properties",
          "requirements": [],
          "resolutionOrder": 271,
          "services": [],
          "startOrder": 253,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.actions.ActionService.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\"\n    point=\"configuration\">\n    <property name=\"nuxeo.actions.debug.log_min_duration_ms\">-1</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.actions.ActionService",
          "declaredStartOrder": null,
          "documentation": "\n    The action service provides extension points for pluggable actions and\n    filters and manage UI type action compatibility (since 5.6)\n\n    Actions are commands that can be accessed and triggered from the site pages.\n    Their visibility is adapted to the current user and site possibilities using\n    filters.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe action service provides extension points for pluggable actions and\nfilters and manage UI type action compatibility (since 5.6)\n</p><p>\nActions are commands that can be accessed and triggered from the site pages.\nTheir visibility is adapted to the current user and site possibilities using\nfilters.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.actions.ActionService",
              "descriptors": [
                "org.nuxeo.ecm.platform.actions.DefaultActionFilter",
                "org.nuxeo.ecm.platform.actions.FilterFactory"
              ],
              "documentation": "\n      An action filter is a set of rules that will apply - or not - given an\n      action and a context.\n\n      Filter properties :\n\n      - id: will be used ot identify the filter from actions definitions.\n\n      - rules: set of rules composing the filter\n\n\n      The default filter implementation uses filter rules with the following\n      properties:\n\n      - grant: boolean indicating whether this is a granting rule or a denying\n      rule.\n\n      - permission: permission like \"Write\" that will be checked on the context\n      for the given user. A rule can hold several permissions: it applies if\n      user holds at least one of them.\n\n      - facet: facet like \"Folderish\" that can be set on the document type\n      ({@see org.nuxeo.ecm.core.schema.types.Type}) to desribe the document type\n      genral behaviour. A rule can hold several facets: it applies if current\n      document in context has at least one of them.\n\n      - group: group like \"members\" to check against current user in context. A rule\n       can hold several groups: it applies if current user is in one of them.\n\n      - condition: expression that can be evaluated against the current context.\n      A rule can hold several conditions; it applies if at least one of the conditions\n      is verified. The condition can be of the form #{somevar} or #{somevar.somemethod},\n      or #{somevar.somemethod(arg)}, in which case it will be interpreted a Seam expression,\n      otherwise it will be interpreted as a Jexl expression. A reference for Jexl can be found at\n      http://commons.apache.org/jexl/reference/syntax.html\n      The Jexl context for the expression contains the variables \"document\", \"principal\",\n      and \"SeamContext\".\n\n      - type: document type to check against current document in context. A rule\n      can hold several types: it applies if current document is one of them. The\n      fake 'Server' type is used to check the server context.\n\n      - schema: document schema to check against current document in context. A\n      rule can hold several schemas: it applies if current document has one of\n      them.\n\n      A filter is granting access to an action if, among its rules, no denying\n      rule is found and at least one granting rule is found. If no rule is set,\n      it is granted.\n\n      Custom filters can be defined on the extension point, provided they follow\n      the {@see org.nuxeo.ecm.platform.actions.ActionFilter} interface, using\n      the following syntax:\n\n      <code>\n    <object class=\"my.package.MyFilter\"/>\n</code>\n\n\n      Example of action filter using default filter implementation:\n\n      <code>\n    <filter id=\"theFilter\">\n        <rule grant=\"\">\n            <permission>Write</permission>\n            <facet>Folderish</facet>\n            <condition>condition</condition>\n            <type>Workspace</type>\n            <type>Section</type>\n        </rule>\n        <rule grant=\"false\">\n            <condition>condition 1</condition>\n            <condition>condition 2</condition>\n        </rule>\n    </filter>\n</code>\n",
              "documentationHtml": "<p>\nAn action filter is a set of rules that will apply - or not - given an\naction and a context.\n</p><p>\nFilter properties :\n</p><p>\n- id: will be used ot identify the filter from actions definitions.\n</p><p>\n- rules: set of rules composing the filter\n</p><p>\nThe default filter implementation uses filter rules with the following\nproperties:\n</p><p>\n- grant: boolean indicating whether this is a granting rule or a denying\nrule.\n</p><p>\n- permission: permission like &#34;Write&#34; that will be checked on the context\nfor the given user. A rule can hold several permissions: it applies if\nuser holds at least one of them.\n</p><p>\n- facet: facet like &#34;Folderish&#34; that can be set on the document type\n({&#64;see org.nuxeo.ecm.core.schema.types.Type}) to desribe the document type\ngenral behaviour. A rule can hold several facets: it applies if current\ndocument in context has at least one of them.\n</p><p>\n- group: group like &#34;members&#34; to check against current user in context. A rule\ncan hold several groups: it applies if current user is in one of them.\n</p><p>\n- condition: expression that can be evaluated against the current context.\nA rule can hold several conditions; it applies if at least one of the conditions\nis verified. The condition can be of the form #{somevar} or #{somevar.somemethod},\nor #{somevar.somemethod(arg)}, in which case it will be interpreted a Seam expression,\notherwise it will be interpreted as a Jexl expression. A reference for Jexl can be found at\nhttp://commons.apache.org/jexl/reference/syntax.html\nThe Jexl context for the expression contains the variables &#34;document&#34;, &#34;principal&#34;,\nand &#34;SeamContext&#34;.\n</p><p>\n- type: document type to check against current document in context. A rule\ncan hold several types: it applies if current document is one of them. The\nfake &#39;Server&#39; type is used to check the server context.\n</p><p>\n- schema: document schema to check against current document in context. A\nrule can hold several schemas: it applies if current document has one of\nthem.\n</p><p>\nA filter is granting access to an action if, among its rules, no denying\nrule is found and at least one granting rule is found. If no rule is set,\nit is granted.\n</p><p>\nCustom filters can be defined on the extension point, provided they follow\nthe {&#64;see org.nuxeo.ecm.platform.actions.ActionFilter} interface, using\nthe following syntax:\n</p><p>\n</p><pre><code>    &lt;object class&#61;&#34;my.package.MyFilter&#34;/&gt;\n</code></pre><p>\nExample of action filter using default filter implementation:\n</p><p>\n</p><pre><code>    &lt;filter id&#61;&#34;theFilter&#34;&gt;\n        &lt;rule grant&#61;&#34;&#34;&gt;\n            &lt;permission&gt;Write&lt;/permission&gt;\n            &lt;facet&gt;Folderish&lt;/facet&gt;\n            &lt;condition&gt;condition&lt;/condition&gt;\n            &lt;type&gt;Workspace&lt;/type&gt;\n            &lt;type&gt;Section&lt;/type&gt;\n        &lt;/rule&gt;\n        &lt;rule grant&#61;&#34;false&#34;&gt;\n            &lt;condition&gt;condition 1&lt;/condition&gt;\n            &lt;condition&gt;condition 2&lt;/condition&gt;\n        &lt;/rule&gt;\n    &lt;/filter&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.actions.ActionService/ExtensionPoints/org.nuxeo.ecm.platform.actions.ActionService--filters",
              "id": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "label": "filters (org.nuxeo.ecm.platform.actions.ActionService)",
              "name": "filters",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.actions.ActionService",
              "descriptors": [
                "org.nuxeo.ecm.platform.actions.Action"
              ],
              "documentation": "\n      An action is defined by the following properties:\n\n      - id: string identifying the action\n\n      - label: the action name\n\n      - help: the action help message\n\n      - link: string representing the command the action will trigger\n\n      - category: a string useful to group actions that will be rendered in the\n      same area of a page. An action can define several categories.\n\n      - filter-ids: id of a filter that will be used to control the action\n      visibility. An action can have several filters: it is visible if all its\n      filters grant the access.\n\n      - filter: a filter definition can be done directly within the action\n      definition. It is a filter like others and can be referred by other\n      actions.\n\n      - icon: the optional icon path for this action\n\n      - confirm: an optional javascript confirmation string that can be\n      triggered when executing the command.\n\n      - enabled: boolean indicating whether the action is currently active. This\n      can be used to hide existing actions when customizing the site behaviour.\n\n      - order: an optional integer used to sort actions within the same\n      category. This attribute may be depracated in the future.\n\n      - immediate: an optional boolean (available since 5.4.2) that makes it\n      possible to call command actions without validating the enclosing form.\n\n      - type: the UI type action (available since 5.6)\n\n      UI Type properties, defined within a \"properties\" tag:\n      - property: the property value\n      - name: the property name\n\n      Properties also accept list or map-like values.\n\n      Before 5.6, it is important to understand that an action does *not*\n      define the way it will be rendered: this is left to pages, templates\n      and other components displaying it. Most of the time, actions will be\n      rendered as command link or command buttons.\n\n      Since 5.6, the template /incl/action/generic_action_template.xhtml handles\n      rendering of an action depending on its type.\n\n      Examples:\n\n      <code>\n    <action enabled=\"true\" icon=\"/icons/file.gif\" id=\"TAB_RIGHTS\"\n        label=\"action.view.rights\"\n        link=\"/incl/tabs/document_rights.xhtml\" type=\"fancybox\">\n        <category>VIEW_ACTION_LIST</category>\n        <filter-id>rights</filter-id>\n        <properties>\n            <property name=\"url\">/incl/fancybox.xhtml</property>\n            <propertyList name=\"myListProp\">\n                <value>item1</value>\n                <value>item2</value>\n            </propertyList>\n            <propertyMap name=\"myMapProp\">\n                <property name=\"mySubProp\">mySubPropValue</property>\n            </propertyMap>\n        </properties>\n    </action>\n    <action enabled=\"true\" icon=\"/icons/action_add_file.gif\"\n        id=\"newFile\" label=\"action.new.file\" link=\"create_file\" type=\"button\">\n        <category>SUBVIEW_UPPER_LIST</category>\n        <filter-id>create</filter-id>\n    </action>\n    <action enabled=\"true\" icon=\"/icons/action_add.gif\" id=\"newSection\"\n        label=\"command.create.section\"\n        link=\"#{documentActions.createDocument('Section')}\" type=\"icon\">\n        <category>SUBVIEW_UPPER_LIST</category>\n        <filter id=\"newSection\">\n            <rule grant=\"true\">\n                <permission>AddChildren</permission>\n                <type>SectionRoot</type>\n            </rule>\n        </filter>\n    </action>\n</code>\n\n\n      Actions extension point provides mergeing features: you can change an\n      existing action definition in your custom extension point provided you use\n      the same identifier.\n\n    \n",
              "documentationHtml": "<p>\nAn action is defined by the following properties:\n</p><p>\n- id: string identifying the action\n</p><p>\n- label: the action name\n</p><p>\n- help: the action help message\n</p><p>\n- link: string representing the command the action will trigger\n</p><p>\n- category: a string useful to group actions that will be rendered in the\nsame area of a page. An action can define several categories.\n</p><p>\n- filter-ids: id of a filter that will be used to control the action\nvisibility. An action can have several filters: it is visible if all its\nfilters grant the access.\n</p><p>\n- filter: a filter definition can be done directly within the action\ndefinition. It is a filter like others and can be referred by other\nactions.\n</p><p>\n- icon: the optional icon path for this action\n</p><p>\n- confirm: an optional javascript confirmation string that can be\ntriggered when executing the command.\n</p><p>\n- enabled: boolean indicating whether the action is currently active. This\ncan be used to hide existing actions when customizing the site behaviour.\n</p><p>\n- order: an optional integer used to sort actions within the same\ncategory. This attribute may be depracated in the future.\n</p><p>\n- immediate: an optional boolean (available since 5.4.2) that makes it\npossible to call command actions without validating the enclosing form.\n</p><p>\n- type: the UI type action (available since 5.6)\n</p><p>\nUI Type properties, defined within a &#34;properties&#34; tag:\n- property: the property value\n- name: the property name\n</p><p>\nProperties also accept list or map-like values.\n</p><p>\nBefore 5.6, it is important to understand that an action does *not*\ndefine the way it will be rendered: this is left to pages, templates\nand other components displaying it. Most of the time, actions will be\nrendered as command link or command buttons.\n</p><p>\nSince 5.6, the template /incl/action/generic_action_template.xhtml handles\nrendering of an action depending on its type.\n</p><p>\nExamples:\n</p><p>\n</p><pre><code>    &lt;action enabled&#61;&#34;true&#34; icon&#61;&#34;/icons/file.gif&#34; id&#61;&#34;TAB_RIGHTS&#34;\n        label&#61;&#34;action.view.rights&#34;\n        link&#61;&#34;/incl/tabs/document_rights.xhtml&#34; type&#61;&#34;fancybox&#34;&gt;\n        &lt;category&gt;VIEW_ACTION_LIST&lt;/category&gt;\n        &lt;filter-id&gt;rights&lt;/filter-id&gt;\n        &lt;properties&gt;\n            &lt;property name&#61;&#34;url&#34;&gt;/incl/fancybox.xhtml&lt;/property&gt;\n            &lt;propertyList name&#61;&#34;myListProp&#34;&gt;\n                &lt;value&gt;item1&lt;/value&gt;\n                &lt;value&gt;item2&lt;/value&gt;\n            &lt;/propertyList&gt;\n            &lt;propertyMap name&#61;&#34;myMapProp&#34;&gt;\n                &lt;property name&#61;&#34;mySubProp&#34;&gt;mySubPropValue&lt;/property&gt;\n            &lt;/propertyMap&gt;\n        &lt;/properties&gt;\n    &lt;/action&gt;\n    &lt;action enabled&#61;&#34;true&#34; icon&#61;&#34;/icons/action_add_file.gif&#34;\n        id&#61;&#34;newFile&#34; label&#61;&#34;action.new.file&#34; link&#61;&#34;create_file&#34; type&#61;&#34;button&#34;&gt;\n        &lt;category&gt;SUBVIEW_UPPER_LIST&lt;/category&gt;\n        &lt;filter-id&gt;create&lt;/filter-id&gt;\n    &lt;/action&gt;\n    &lt;action enabled&#61;&#34;true&#34; icon&#61;&#34;/icons/action_add.gif&#34; id&#61;&#34;newSection&#34;\n        label&#61;&#34;command.create.section&#34;\n        link&#61;&#34;#{documentActions.createDocument(&#39;Section&#39;)}&#34; type&#61;&#34;icon&#34;&gt;\n        &lt;category&gt;SUBVIEW_UPPER_LIST&lt;/category&gt;\n        &lt;filter id&#61;&#34;newSection&#34;&gt;\n            &lt;rule grant&#61;&#34;true&#34;&gt;\n                &lt;permission&gt;AddChildren&lt;/permission&gt;\n                &lt;type&gt;SectionRoot&lt;/type&gt;\n            &lt;/rule&gt;\n        &lt;/filter&gt;\n    &lt;/action&gt;\n</code></pre><p>\nActions extension point provides mergeing features: you can change an\nexisting action definition in your custom extension point provided you use\nthe same identifier.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.actions.ActionService/ExtensionPoints/org.nuxeo.ecm.platform.actions.ActionService--actions",
              "id": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "label": "actions (org.nuxeo.ecm.platform.actions.ActionService)",
              "name": "actions",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.actions.ActionService",
              "descriptors": [
                "org.nuxeo.ecm.platform.actions.TypeCompatibility"
              ],
              "documentation": "\n      Action compatibility type (since 5.6) defining the UI type action\n      from deprecated action category:\n\n      - category: category action\n\n      - type:\n      UI action type\n\n      Examples:\n\n      <code>\n    <typeCompatibility type=\"link_icon\">\n        <category>DOCUMENT_UPPER_ACTION</category>\n        <category>DOCUMENT_HEADER_ACTIONS_LIST</category>\n    </typeCompatibility>\n    <typeCompatibility type=\"link_icon_text\">\n        <category>DEFAULT_LIST</category>\n        <category>CLIPBOARD_LIST</category>\n    </typeCompatibility>\n    <typeCompatibility type=\"button\">\n        <category>CURRENT_SELECTION_COPY</category>\n        <category>CLIPBOARD_PASTE</category>\n        <category>CURRENT_SELECTION_ADDTOLIST</category>\n        <category>CURRENT_SELECTION_TRASH</category>\n        <category>CREATE_DOCUMENT_FORM</category>\n        <category>EDIT_DOCUMENT_FORM</category>\n    </typeCompatibility>\n    <typeCompatibility type=\"link\">\n        <category>USER_SERVICES</category>\n        <category>USER_MENU_ACTIONS</category>\n    </typeCompatibility>\n    <typeCompatibility type=\"bare_link\">\n        <category>DOCUMENT_HEADER_ACTIONS_LIST_HREF</category>\n    </typeCompatibility>\n</code>\n",
              "documentationHtml": "<p>\nAction compatibility type (since 5.6) defining the UI type action\nfrom deprecated action category:\n</p><p>\n- category: category action\n</p><p>\n- type:\nUI action type\n</p><p>\nExamples:\n</p><p>\n</p><pre><code>    &lt;typeCompatibility type&#61;&#34;link_icon&#34;&gt;\n        &lt;category&gt;DOCUMENT_UPPER_ACTION&lt;/category&gt;\n        &lt;category&gt;DOCUMENT_HEADER_ACTIONS_LIST&lt;/category&gt;\n    &lt;/typeCompatibility&gt;\n    &lt;typeCompatibility type&#61;&#34;link_icon_text&#34;&gt;\n        &lt;category&gt;DEFAULT_LIST&lt;/category&gt;\n        &lt;category&gt;CLIPBOARD_LIST&lt;/category&gt;\n    &lt;/typeCompatibility&gt;\n    &lt;typeCompatibility type&#61;&#34;button&#34;&gt;\n        &lt;category&gt;CURRENT_SELECTION_COPY&lt;/category&gt;\n        &lt;category&gt;CLIPBOARD_PASTE&lt;/category&gt;\n        &lt;category&gt;CURRENT_SELECTION_ADDTOLIST&lt;/category&gt;\n        &lt;category&gt;CURRENT_SELECTION_TRASH&lt;/category&gt;\n        &lt;category&gt;CREATE_DOCUMENT_FORM&lt;/category&gt;\n        &lt;category&gt;EDIT_DOCUMENT_FORM&lt;/category&gt;\n    &lt;/typeCompatibility&gt;\n    &lt;typeCompatibility type&#61;&#34;link&#34;&gt;\n        &lt;category&gt;USER_SERVICES&lt;/category&gt;\n        &lt;category&gt;USER_MENU_ACTIONS&lt;/category&gt;\n    &lt;/typeCompatibility&gt;\n    &lt;typeCompatibility type&#61;&#34;bare_link&#34;&gt;\n        &lt;category&gt;DOCUMENT_HEADER_ACTIONS_LIST_HREF&lt;/category&gt;\n    &lt;/typeCompatibility&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.actions.ActionService/ExtensionPoints/org.nuxeo.ecm.platform.actions.ActionService--typeCompatibility",
              "id": "org.nuxeo.ecm.platform.actions.ActionService--typeCompatibility",
              "label": "typeCompatibility (org.nuxeo.ecm.platform.actions.ActionService)",
              "name": "typeCompatibility",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.actions.ActionService",
          "name": "org.nuxeo.ecm.platform.actions.ActionService",
          "requirements": [],
          "resolutionOrder": 272,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.actions.ActionService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.actions.ActionService/Services/org.nuxeo.ecm.platform.actions.ejb.ActionManager",
              "id": "org.nuxeo.ecm.platform.actions.ejb.ActionManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 839,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.actions.ActionService\">\n  <documentation>\n    The action service provides extension points for pluggable actions and\n    filters and manage UI type action compatibility (since 5.6)\n\n    Actions are commands that can be accessed and triggered from the site pages.\n    Their visibility is adapted to the current user and site possibilities using\n    filters.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.actions.ActionService\" />\n\n  <service>\n          <provide interface=\"org.nuxeo.ecm.platform.actions.ejb.ActionManager\" />\n  </service>\n\n  <extension-point name=\"filters\">\n    <documentation>\n      An action filter is a set of rules that will apply - or not - given an\n      action and a context.\n\n      Filter properties :\n\n      - id: will be used ot identify the filter from actions definitions.\n\n      - rules: set of rules composing the filter\n\n\n      The default filter implementation uses filter rules with the following\n      properties:\n\n      - grant: boolean indicating whether this is a granting rule or a denying\n      rule.\n\n      - permission: permission like \"Write\" that will be checked on the context\n      for the given user. A rule can hold several permissions: it applies if\n      user holds at least one of them.\n\n      - facet: facet like \"Folderish\" that can be set on the document type\n      ({@see org.nuxeo.ecm.core.schema.types.Type}) to desribe the document type\n      genral behaviour. A rule can hold several facets: it applies if current\n      document in context has at least one of them.\n\n      - group: group like \"members\" to check against current user in context. A rule\n       can hold several groups: it applies if current user is in one of them.\n\n      - condition: expression that can be evaluated against the current context.\n      A rule can hold several conditions; it applies if at least one of the conditions\n      is verified. The condition can be of the form #{somevar} or #{somevar.somemethod},\n      or #{somevar.somemethod(arg)}, in which case it will be interpreted a Seam expression,\n      otherwise it will be interpreted as a Jexl expression. A reference for Jexl can be found at\n      http://commons.apache.org/jexl/reference/syntax.html\n      The Jexl context for the expression contains the variables \"document\", \"principal\",\n      and \"SeamContext\".\n\n      - type: document type to check against current document in context. A rule\n      can hold several types: it applies if current document is one of them. The\n      fake 'Server' type is used to check the server context.\n\n      - schema: document schema to check against current document in context. A\n      rule can hold several schemas: it applies if current document has one of\n      them.\n\n      A filter is granting access to an action if, among its rules, no denying\n      rule is found and at least one granting rule is found. If no rule is set,\n      it is granted.\n\n      Custom filters can be defined on the extension point, provided they follow\n      the {@see org.nuxeo.ecm.platform.actions.ActionFilter} interface, using\n      the following syntax:\n\n      <code>\n        <object class=\"my.package.MyFilter\" />\n      </code>\n\n      Example of action filter using default filter implementation:\n\n      <code>\n        <filter id=\"theFilter\">\n          <rule grant=\"\">\n            <permission>Write</permission>\n            <facet>Folderish</facet>\n            <condition>condition</condition>\n            <type>Workspace</type>\n            <type>Section</type>\n          </rule>\n          <rule grant=\"false\">\n            <condition>condition 1</condition>\n            <condition>condition 2</condition>\n          </rule>\n        </filter>\n      </code>\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.actions.DefaultActionFilter\" />\n    <object class=\"org.nuxeo.ecm.platform.actions.FilterFactory\" />\n  </extension-point>\n\n  <extension-point name=\"actions\">\n    <documentation>\n      An action is defined by the following properties:\n\n      - id: string identifying the action\n\n      - label: the action name\n\n      - help: the action help message\n\n      - link: string representing the command the action will trigger\n\n      - category: a string useful to group actions that will be rendered in the\n      same area of a page. An action can define several categories.\n\n      - filter-ids: id of a filter that will be used to control the action\n      visibility. An action can have several filters: it is visible if all its\n      filters grant the access.\n\n      - filter: a filter definition can be done directly within the action\n      definition. It is a filter like others and can be referred by other\n      actions.\n\n      - icon: the optional icon path for this action\n\n      - confirm: an optional javascript confirmation string that can be\n      triggered when executing the command.\n\n      - enabled: boolean indicating whether the action is currently active. This\n      can be used to hide existing actions when customizing the site behaviour.\n\n      - order: an optional integer used to sort actions within the same\n      category. This attribute may be depracated in the future.\n\n      - immediate: an optional boolean (available since 5.4.2) that makes it\n      possible to call command actions without validating the enclosing form.\n\n      - type: the UI type action (available since 5.6)\n\n      UI Type properties, defined within a \"properties\" tag:\n      - property: the property value\n      - name: the property name\n\n      Properties also accept list or map-like values.\n\n      Before 5.6, it is important to understand that an action does *not*\n      define the way it will be rendered: this is left to pages, templates\n      and other components displaying it. Most of the time, actions will be\n      rendered as command link or command buttons.\n\n      Since 5.6, the template /incl/action/generic_action_template.xhtml handles\n      rendering of an action depending on its type.\n\n      Examples:\n\n      <code>\n        <action id=\"TAB_RIGHTS\" link=\"/incl/tabs/document_rights.xhtml\"\n          enabled=\"true\" label=\"action.view.rights\" icon=\"/icons/file.gif\"\n          type=\"fancybox\">\n          <category>VIEW_ACTION_LIST</category>\n          <filter-id>rights</filter-id>\n          <properties>\n            <property name=\"url\">/incl/fancybox.xhtml</property>\n            <propertyList name=\"myListProp\">\n              <value>item1</value>\n              <value>item2</value>\n            </propertyList>\n            <propertyMap name=\"myMapProp\">\n              <property name=\"mySubProp\">mySubPropValue</property>\n            </propertyMap>\n          </properties>\n        </action>\n\n        <action id=\"newFile\" link=\"create_file\" enabled=\"true\"\n          label=\"action.new.file\" icon=\"/icons/action_add_file.gif\" type=\"button\">\n          <category>SUBVIEW_UPPER_LIST</category>\n          <filter-id>create</filter-id>\n        </action>\n\n        <action id=\"newSection\"\n          link=\"#{documentActions.createDocument('Section')}\" enabled=\"true\"\n          label=\"command.create.section\" icon=\"/icons/action_add.gif\" type=\"icon\">\n          <category>SUBVIEW_UPPER_LIST</category>\n          <filter id=\"newSection\">\n            <rule grant=\"true\">\n              <permission>AddChildren</permission>\n              <type>SectionRoot</type>\n            </rule>\n          </filter>\n        </action>\n      </code>\n\n      Actions extension point provides mergeing features: you can change an\n      existing action definition in your custom extension point provided you use\n      the same identifier.\n\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.actions.Action\" />\n  </extension-point>\n\n  <extension-point name=\"typeCompatibility\">\n    <documentation>\n      Action compatibility type (since 5.6) defining the UI type action\n      from deprecated action category:\n\n      - category: category action\n\n      - type:\n      UI action type\n\n      Examples:\n\n      <code>\n        <typeCompatibility type=\"link_icon\">\n          <category>DOCUMENT_UPPER_ACTION</category>\n          <category>DOCUMENT_HEADER_ACTIONS_LIST</category>\n        </typeCompatibility>\n        <typeCompatibility type=\"link_icon_text\">\n          <category>DEFAULT_LIST</category>\n          <category>CLIPBOARD_LIST</category>\n        </typeCompatibility>\n        <typeCompatibility type=\"button\">\n          <category>CURRENT_SELECTION_COPY</category>\n          <category>CLIPBOARD_PASTE</category>\n          <category>CURRENT_SELECTION_ADDTOLIST</category>\n          <category>CURRENT_SELECTION_TRASH</category>\n          <category>CREATE_DOCUMENT_FORM</category>\n          <category>EDIT_DOCUMENT_FORM</category>\n        </typeCompatibility>\n        <typeCompatibility type=\"link\">\n          <category>USER_SERVICES</category>\n          <category>USER_MENU_ACTIONS</category>\n        </typeCompatibility>\n        <typeCompatibility type=\"bare_link\">\n          <category>DOCUMENT_HEADER_ACTIONS_LIST_HREF</category>\n        </typeCompatibility>\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.actions.TypeCompatibility\" />\n  </extension-point>\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.filters/Contributions/org.nuxeo.ecm.platform.filters--filters",
              "id": "org.nuxeo.ecm.platform.filters--filters",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"not_folder\">\n      <rule grant=\"false\">\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"folder\">\n      <rule grant=\"true\">\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"not_collection\">\n      <rule grant=\"false\">\n        <facet>Collection</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"collection\">\n      <rule grant=\"true\">\n        <facet>Collection</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"not_container\">\n      <rule grant=\"false\">\n        <facet>Collection</facet>\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"container\">\n      <rule grant=\"true\">\n        <facet>Collection</facet>\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.filters",
          "name": "org.nuxeo.ecm.platform.filters",
          "requirements": [],
          "resolutionOrder": 273,
          "services": [],
          "startOrder": 324,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.filters\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"not_folder\">\n      <rule grant=\"false\">\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"folder\">\n      <rule grant=\"true\">\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"not_collection\">\n      <rule grant=\"false\">\n        <facet>Collection</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"collection\">\n      <rule grant=\"true\">\n        <facet>Collection</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"not_container\">\n      <rule grant=\"false\">\n        <facet>Collection</facet>\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"container\">\n      <rule grant=\"true\">\n        <facet>Collection</facet>\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/filters-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-actions-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions",
      "id": "org.nuxeo.ecm.actions",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.actions,org.nuxeo.ecm.platform.ac\r\n tions.ejb,org.nuxeo.ecm.platform.actions.elcache\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Localization: bundle\r\nBundle-Name: Nuxeo ECM Actions Manager\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: true\r\nNuxeo-Component: OSGI-INF/actions-properties.xml, OSGI-INF/actions-frame\r\n work.xml, OSGI-INF/filters-contrib.xml\r\nImport-Package: javax.annotation;version=\"1.0\",javax.ejb,org.apache.comm\r\n ons.logging,org.jboss.seam.pageflow,org.jbpm.graph.def,org.nuxeo.common\r\n .xmap.annotation,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;ap\r\n i=split,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.directory;api=split,o\r\n rg.nuxeo.ecm.platform.actions,org.nuxeo.runtime,org.nuxeo.runtime.api,o\r\n rg.nuxeo.runtime.expression,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.actions;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 273,
      "minResolutionOrder": 271,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-userworkspace",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.platform.userworkspace.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace",
        "id": "grp:org.nuxeo.ecm.platform.userworkspace",
        "name": "org.nuxeo.ecm.platform.userworkspace",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.userworkspace",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.userworkspace.core.service.UserWorkspaceServiceImplComponent",
          "declaredStartOrder": null,
          "documentation": "\n    This component is used to provide the a personal workspace for each Nuxeo user.\n    The actual implementation logic for creating and storing this personal workspace can be contributed.\n  \n",
          "documentationHtml": "<p>\nThis component is used to provide the a personal workspace for each Nuxeo user.\nThe actual implementation logic for creating and storing this personal workspace can be contributed.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
              "descriptors": [
                "org.nuxeo.ecm.platform.userworkspace.core.service.UserWorkspaceDescriptor"
              ],
              "documentation": "\n      Defines the class used create / resolve the personal workspace.\n\n      The default implementation allows to configure doc types for Workspace and WorkspaceRoot, but if you need a more\n      custom logic, you can simply provide a brand new class.\n\n      Your implementation can inherit from org.nuxeo.ecm.platform.userworkspace.core.service.AbstractUserWorkspaceImpl.\n\n    \n",
              "documentationHtml": "<p>\nDefines the class used create / resolve the personal workspace.\n</p><p>\nThe default implementation allows to configure doc types for Workspace and WorkspaceRoot, but if you need a more\ncustom logic, you can simply provide a brand new class.\n</p><p>\nYour implementation can inherit from org.nuxeo.ecm.platform.userworkspace.core.service.AbstractUserWorkspaceImpl.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService/ExtensionPoints/org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService--userWorkspace",
              "id": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService--userWorkspace",
              "label": "userWorkspace (org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService)",
              "name": "userWorkspace",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
          "name": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
          "requirements": [],
          "resolutionOrder": 575,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService/Services/org.nuxeo.ecm.platform.userworkspace.api.UserWorkspaceService",
              "id": "org.nuxeo.ecm.platform.userworkspace.api.UserWorkspaceService",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService/Services/org.nuxeo.ecm.collections.api.CollectionLocationService",
              "id": "org.nuxeo.ecm.collections.api.CollectionLocationService",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService/Services/org.nuxeo.ecm.platform.userworkspace.core.service.UserWorkspaceServiceImplComponent",
              "id": "org.nuxeo.ecm.platform.userworkspace.core.service.UserWorkspaceServiceImplComponent",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 892,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n        name=\"org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService\">\n  <implementation\n          class=\"org.nuxeo.ecm.platform.userworkspace.core.service.UserWorkspaceServiceImplComponent\" />\n\n  <service>\n    <provide\n            interface=\"org.nuxeo.ecm.platform.userworkspace.api.UserWorkspaceService\" />\n    <provide\n            interface=\"org.nuxeo.ecm.collections.api.CollectionLocationService\" />\n    <provide\n            interface=\"org.nuxeo.ecm.platform.userworkspace.core.service.UserWorkspaceServiceImplComponent\" />\n  </service>\n\n  <documentation>\n    This component is used to provide the a personal workspace for each Nuxeo user.\n    The actual implementation logic for creating and storing this personal workspace can be contributed.\n  </documentation>\n\n  <extension-point name=\"userWorkspace\">\n    <documentation>\n      Defines the class used create / resolve the personal workspace.\n\n      The default implementation allows to configure doc types for Workspace and WorkspaceRoot, but if you need a more\n      custom logic, you can simply provide a brand new class.\n\n      Your implementation can inherit from org.nuxeo.ecm.platform.userworkspace.core.service.AbstractUserWorkspaceImpl.\n\n    </documentation>\n    <object\n            class=\"org.nuxeo.ecm.platform.userworkspace.core.service.UserWorkspaceDescriptor\" />\n  </extension-point>\n</component>\n",
          "xmlFileName": "/OSGI-INF/userworkspace-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.listener/Contributions/org.nuxeo.ecm.platform.userworkspace.listener--listener",
              "id": "org.nuxeo.ecm.platform.userworkspace.listener--listener",
              "registrationOrder": 41,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.userworkspace.core.listener.InvalidateUserWorkspacesListener\" name=\"invalidateUserWorkspacesListener\" postCommit=\"false\" priority=\"20\">\n      <event>documentRemoved</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.listener",
          "name": "org.nuxeo.ecm.platform.userworkspace.listener",
          "requirements": [],
          "resolutionOrder": 576,
          "services": [],
          "startOrder": 558,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.userworkspace.listener\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <listener name=\"invalidateUserWorkspacesListener\" async=\"false\"\n      postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.userworkspace.core.listener.InvalidateUserWorkspacesListener\"\n      priority=\"20\">\n      <event>documentRemoved</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/userworkspace-listeners-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n   This default implementation allows to configure doc types for Workspace and WorkspaceRoot using the userWorkspaceType and userWorkspaceRootType tags.\n  \n",
          "documentationHtml": "<p>\nThis default implementation allows to configure doc types for Workspace and WorkspaceRoot using the userWorkspaceType and userWorkspaceRootType tags.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService--userWorkspace",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.UserWorkspaceServiceImpl/Contributions/org.nuxeo.ecm.platform.userworkspace.UserWorkspaceServiceImpl--userWorkspace",
              "id": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceServiceImpl--userWorkspace",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
                "name": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"userWorkspace\" target=\"org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService\">\n    <userWorkspace class=\"org.nuxeo.ecm.platform.userworkspace.core.service.DefaultUserWorkspaceServiceImpl\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.UserWorkspaceServiceImpl",
          "name": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceServiceImpl",
          "requirements": [],
          "resolutionOrder": 577,
          "services": [],
          "startOrder": 554,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.platform.userworkspace.UserWorkspaceServiceImpl\">\n\n  <documentation>\n   This default implementation allows to configure doc types for Workspace and WorkspaceRoot using the userWorkspaceType and userWorkspaceRootType tags.\n  </documentation>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService\"\n    point=\"userWorkspace\">\n    <userWorkspace\n      class=\"org.nuxeo.ecm.platform.userworkspace.core.service.DefaultUserWorkspaceServiceImpl\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/userWorkspaceImpl.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.operationsContrib/Contributions/org.nuxeo.ecm.platform.userworkspace.operationsContrib--operations",
              "id": "org.nuxeo.ecm.platform.userworkspace.operationsContrib--operations",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <operation class=\"org.nuxeo.ecm.platform.userworkspace.operations.UserWorkspaceCreateFromBlob\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.operationsContrib",
          "name": "org.nuxeo.ecm.platform.userworkspace.operationsContrib",
          "requirements": [],
          "resolutionOrder": 579,
          "services": [],
          "startOrder": 559,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.userworkspace.operationsContrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n\n    <operation\n      class=\"org.nuxeo.ecm.platform.userworkspace.operations.UserWorkspaceCreateFromBlob\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.coreTypes/Contributions/org.nuxeo.ecm.platform.userworkspace.coreTypes--doctype",
              "id": "org.nuxeo.ecm.platform.userworkspace.coreTypes--doctype",
              "registrationOrder": 38,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"Folder\" name=\"UserWorkspacesRoot\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInNavigation\"/>\n      <subtypes>\n        <type>Workspace</type>\n      </subtypes>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.coreTypes",
          "name": "org.nuxeo.ecm.platform.userworkspace.coreTypes",
          "requirements": [
            "org.nuxeo.ecm.core.schema.TypeService"
          ],
          "resolutionOrder": 580,
          "services": [],
          "startOrder": 557,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.userworkspace.coreTypes\">\n\n  <require>org.nuxeo.ecm.core.schema.TypeService</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <doctype name=\"UserWorkspacesRoot\" extends=\"Folder\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInNavigation\"/>\n      <subtypes>\n        <type>Workspace</type>\n      </subtypes>\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/userworkspace-schemas-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.types.web/Contributions/org.nuxeo.ecm.platform.types.web--types",
              "id": "org.nuxeo.ecm.platform.types.web--types",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n\n    <type id=\"UserWorkspacesRoot\">\n      <label>UserWorkspacesRoot</label>\n      <icon>/icons/workspace.gif</icon>\n      <bigIcon>/icons/workspace_100.png</bigIcon>\n      <category>SuperDocument</category>\n      <description>UserWorkspacesRoot.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.types.web",
          "name": "org.nuxeo.ecm.platform.types.web",
          "requirements": [],
          "resolutionOrder": 581,
          "services": [],
          "startOrder": 524,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<component name=\"org.nuxeo.ecm.platform.types.web\">\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n\n    <type id=\"UserWorkspacesRoot\">\n      <label>UserWorkspacesRoot</label>\n      <icon>/icons/workspace.gif</icon>\n      <bigIcon>/icons/workspace_100.png</bigIcon>\n      <category>SuperDocument</category>\n      <description>UserWorkspacesRoot.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/userworkspace-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.core.LifeCycleManagerExtensions/Contributions/org.nuxeo.ecm.platform.userworkspace.core.LifeCycleManagerExtensions--types",
              "id": "org.nuxeo.ecm.platform.userworkspace.core.LifeCycleManagerExtensions--types",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"UserWorkspacesRoot\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.core.LifeCycleManagerExtensions",
          "name": "org.nuxeo.ecm.platform.userworkspace.core.LifeCycleManagerExtensions",
          "requirements": [],
          "resolutionOrder": 582,
          "services": [],
          "startOrder": 556,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.userworkspace.core.LifeCycleManagerExtensions\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"types\">\n    <types>\n      <type name=\"UserWorkspacesRoot\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/userworkspace-life-cycle-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-userworkspace-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace",
      "id": "org.nuxeo.ecm.platform.userworkspace",
      "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 User Workspace\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.userworkspace\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\nExport-Package: org.nuxeo.ecm.platform.userworkspace.service\r\nBundle-Category: stateless\r\nNuxeo-Component: OSGI-INF/userworkspace-framework.xml,OSGI-INF/userworks\r\n pace-listeners-contrib.xml,OSGI-INF/userWorkspaceImpl.xml,OSGI-INF/oper\r\n ations-contrib.xml,OSGI-INF/userworkspace-schemas-contrib.xml,OSGI-INF/\r\n userworkspace-types-contrib.xml,OSGI-INF/userworkspace-life-cycle-contr\r\n ib.xml\r\n\r\n",
      "maxResolutionOrder": 582,
      "minResolutionOrder": 575,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-task-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.task.api",
          "org.nuxeo.ecm.platform.task.automation",
          "org.nuxeo.ecm.platform.task.core",
          "org.nuxeo.ecm.platform.task.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task",
        "id": "grp:org.nuxeo.ecm.platform.task",
        "name": "org.nuxeo.ecm.platform.task",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.task.api",
      "components": [],
      "fileName": "nuxeo-platform-task-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.api",
      "id": "org.nuxeo.ecm.platform.task.api",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240130-104947\r\nBundle-Name: Nuxeo ECM task API\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.task.api;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nRequire-Bundle: org.nuxeo.ecm.core.api\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.api"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-search-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.search.api",
          "org.nuxeo.ecm.platform.search.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search",
        "id": "grp:org.nuxeo.ecm.platform.search",
        "name": "org.nuxeo.ecm.platform.search",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.search.api",
      "components": [],
      "fileName": "nuxeo-platform-search-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.api",
      "id": "org.nuxeo.ecm.platform.search.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package:  org.nuxeo.ecm.core.search.api.client,org.nuxeo.ecm.core\r\n .search.api.client.querymodel,org.nuxeo.ecm.core.search.api.client.quer\r\n ymodel.descriptor,org.nuxeo.ecm.core.search.api.client.search.results,o\r\n rg.nuxeo.ecm.core.search.api.client.search.results.document,org.nuxeo.e\r\n cm.core.search.api.client.search.results.impl\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo ECM Search API\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: false\r\nImport-Package: javax.annotation;version=\"1.0\",javax.security.auth.login\r\n ,org.apache.commons.logging,org.nuxeo.common.utils,org.nuxeo.common.xma\r\n p.annotation,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=sp\r\n lit,org.nuxeo.ecm.core.api.adapter,org.nuxeo.ecm.core.api.blobholder,or\r\n g.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.core.api.impl.blob,org.nuxeo.ec\r\n m.core.api.model,org.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.core.a\r\n pi.security,org.nuxeo.ecm.core.api.security.impl,org.nuxeo.ecm.core.que\r\n ry.sql,org.nuxeo.ecm.core.query.sql.model,org.nuxeo.ecm.core.schema,org\r\n .nuxeo.ecm.core.schema.types,org.nuxeo.ecm.core.schema.types.primitives\r\n ,org.nuxeo.ecm.directory;api=split,org.nuxeo.runtime,org.nuxeo.runtime.\r\n api,org.nuxeo.runtime.model,org.nuxeo.runtime.services.streaming\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.search.api;singleton:=true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-binarymanager-common",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.storage.binarymanager.common",
          "org.nuxeo.ecm.core.storage.binarymanager.s3"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager",
        "id": "grp:org.nuxeo.ecm.core.storage.binarymanager",
        "name": "org.nuxeo.ecm.core.storage.binarymanager",
        "parentIds": [
          "grp:org.nuxeo.ecm.core.storage",
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.storage.binarymanager.common",
      "components": [],
      "fileName": "nuxeo-core-binarymanager-common-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.common",
      "id": "org.nuxeo.ecm.core.storage.binarymanager.common",
      "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: 2023.7.9-t20240130-152811\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage.binarymanager.common;sin\r\n gleton:=true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [
        "amazon-s3-online-storage"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-diff-content",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.diff.content",
          "org.nuxeo.diff.core",
          "org.nuxeo.diff.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff",
        "id": "grp:org.nuxeo.diff",
        "name": "org.nuxeo.diff",
        "parentIds": [
          "grp:org.nuxeo.ecm"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Diff\n\nThis repo hosts the source code of a plugin for Nuxeo Platform that allows to render a diff between two documents or two versions of a document.\nThe comparison takes into account all the properties shared by the documents, which means that if a comparison is done between two documents of a different type, only the schemas in common will be \"diffed\".\nThe comparison also takes into account blob-type properties.\n\n\n## Building and deploying\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Diff Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-diff).\n\n## Configuring\n\n### Diff display\n\nThe `DiffDisplayService` offers several extension points to configure the document diff display.\nMost of the code samples exposed here can be found in the [diff-display-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-display-contrib.xml) and [diff-widgets-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-widgets-contrib.xml) files.\n\n#### Configuring groups of properties to display with the diffDisplay extension point.\n\nA `diffDisplay` contribution represents a number of `diffBlocks` that you want to display when asking for a document comparison.\nIt is bound to a document type.\nA `diffBlock` contribution represents a number of properties (fields) that you want to display (see next section).\n\nWhen asking for the comparison between 2 versions of a document, the `diffDisplay` bound to the document type or a super type is used.\nIf no `diffDisplay` is found for this type or a super type a fall back is done on the default diff display mode: one block per document schema and for each block all the fields of the schema that are different.\n\n*Beware that in this case the order of the schemas and of the fields is undefined.*\n\nWhen asking for the comparison between 2 documents:\n- If they are of the same type: if  a `diffDisplay` is found for this type or a super type then it is used, else a fall back is done on the default diff display mode.\n- If they are of different types: if  a `diffDisplay` is found for a common super type then it is used, else a fall back is done on the default diff display mode.\n\nFor example, this is the `diffDisplay` contribution bound to the _File_ type:\n```xml\n<diffDisplay type=\"File\">\n  <diffBlocks>\n    <diffBlock name=\"heading\" />\n    <diffBlock name=\"dublincore\" />\n    <diffBlock name=\"files\" />\n  </diffDisplay>\n</diffBlocks>\n```\n\n_Note that the order of the diffBlocks is taken into account when rendering the diff display._\n\n#### Configuring a group of properties to display with the diffBlock extension point\n\nA `diffBlock` contribution represents a number of `fields` that you want to display. It is rendered as a foldable box.\nThe `label` attribute of a `diffBlock` contribution is used as the title of the foldable box.\nA `field` is defined by its `schema` and its `name`.\n\nFor example, this is the \"heading\" `diffBlock` contribution:\n```xml\n<diffBlock name=\"heading\" label=\"label.diffBlock.heading\">\n  <fields>\n    <field schema=\"dublincore\" name=\"title\" />\n    <field schema=\"dublincore\" name=\"description\" />\n  </fields>\n</diffBlock>\n```\n_Note that the order of the fields is taken into account when rendering the diff block._\n\nFor complex properties, you can contribute inside the `field` element the property `items` that you want to display:\n```xml\n<field schema=\"complextypes\" name=\"complex\">\n  <items>\n    <item name=\"stringItem\" />\n    <item name=\"thirdItem\" />\n    <item name=\"fourthItem\" />\n  </items>\n</field>\n```\n\n_Note that the order of the items is taken into account when rendering the field._\n\nThis is used for the `files` field of the `files` diff block:\n```xml\n<field schema=\"files\" name=\"files\">\n  <items>\n    <!-- Display the file only, not the filename which is managed\n         by the file widget type -->\n    <item name=\"file\" displayContentDiffLinks=\"true\" />\n  </items>\n</field>\n```\n\nIf no `items` are specified, all the property items are displayed.\n\nFor content properties (that hold a blob) or string ones you can set the `displayContentDiffLinks` attribute to `true` on a `field` or an `item` to display the content diff links.\nThese links will open a fancybox showing the detailed content diff using the usual green and red colors to distinguish the added/removed parts of the content.\nFor now, 2 links are displayed: _Textual diff_ based on a text conversion and _Html diff_ based on an html conversion (keeps the content layout).\n\n#### Configuring property widgets with the widgets extension point\n\n##### Principle\n\nWhen rendering a `diffBlock`, the `DiffDisplayService` builds a layout definition on the fly, including a layout row for each `field` of the `diffBlock`.\nEach row contains a widget definition for the `field`, and the layout template renders 2 instances of this widget definition: one for the left document and one for the right document.\nThe content diff links, if displayed, are also rendered by a widget inside the layout row.\n\nHow is the widget definition built for a given `field`?\nA lookup is done in the `LayoutStore` service to find a specific widget definition named with the xpath of the property.\nIf such a definition is not found, a lookup is done to find a generic widget definition named with the type of the property.\n\nThis allows you to only contribute a specific widget definition if the generic one doesn't match your needs for a given field, typically if you need a custom template, label or custom properties.\n\n##### Example\n\nLets say we have contributed the following `diffBlock`:\n```xml\n<diffBlock name=\"myCustomBlock\" label=\"label.diffBlock.custom\">\n  <fields>\n    <field schema=\"file\" name=\"content\" />\n    <field schema=\"dublincore\" name=\"title\" />\n  </fields>\n</diffBlock>\n```\n\nand the following widgets to the `widgets` extension point of the `org.nuxeo.ecm.platform.forms.layout.LayoutStore` component:\n```xml\n<extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n  point=\"widgets\">\n\n  <widget name=\"file:content\" type=\"file\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <labels>\n      <label mode=\"any\">label.summary.download.file</label>\n    </labels>\n    <translated>true</translated>\n    <properties mode=\"any\">\n    </properties>\n  </widget>\n\n  <widget name=\"string\" type=\"template\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <properties mode=\"any\">\n      <property name=\"widgetType\">text</property>\n      <property name=\"template\">\n        /widgets/generic_diff_widget_template.xhtml\n      </property>\n    </properties>\n  </widget>\n\n</extension>\n```\n\nWhen rendering the \"myCustomBlock\" `diffBlock`, the `DiffDisplayService` will:\n\n- Look for a specific widget definition named \"file:content\" in the `LayoutStore`, find it and use it for the \"file:content\" field.\n\n- Look for a specific widget definition named \"dublincore:title\" in the `LayoutStore`, won't find it and therefore will look for a generic widget definition named with the field type, ie. \"string\", find it and use it for the dublincore:title field.\n\nIn this use case, the \"string\" generic widget definition is sufficient to display the \"dublincore:title\" field.\nIt uses a widget of type \"text\" with \"label.dublincore.title\" as a label and \"dublincore:title\" as a field definition.\nWe can easily understand here the interest of generic widgets: once you have the type and xpath of a property, the matching widget definition can be computed on the fly using the property type to guess the widget type (\"string\" => \"text\", \"date\" => \"datetime\", etc.) and the property xpath for the field definition and label.\n\nThe \"file:content\" specific widget definition is contributed here to use a custom label \"label.summary.download.file\" instead of the one that would have been generated for the \"content\" generic widget definition: \"label.file.content\".\n\n_Note that in both cases (generic and specific) you don't need to define the widget field definitions since they are automatically computed from the property xpath, except in particular cases like \"note:note\" where the \"mime-type\" field is needed._\n\n##### List and complex properties\n\nYou might already know that the widgets used to display list and complex properties have subwidgets.\nIn the case of a list property, a subwidget is needed for the list items; in the case of a complex property, a subwidget is needed for each item of the complex property.\nThe lookup done by the `DiffDisplayService_` for the first-level widgets is also done recursively for the subwidgets!\n\n###### List property\n\nFor a list property, lets take the example of \"dublincore:contributors\", which is a string list.\n\n- To display the list, nothing special is needed so the \"scalarList\" generic widget definition can be used.\n\n- To display a list item (a contributor, which is of type \"string\"), the \"string\" generic widget definition doesn't match our needs: it would display the contributor's username whereas we want to display its fullname (firstname lastname).\nSo we need a specific widget definition for the list items subwidget to use a custom template able to display the contributor's fullname.\nThe name of this widget definition must match the xpath of the list item property, ie. \"dublincore:contributors/item\".\n\nTherefore, two widget definitions are involved:\n\n- The \"scalarList\" generic widget definition:\n\n```xml\n<widget name=\"scalarList\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"displayAllItems\">false</property>\n    <property name=\"displayItemIndexes\">true</property>\n    <property name=\"template\">\n      /widgets/list_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"dublincore:contributors/item\" specific widget definition:\n\n```xml\n<widget name=\"dublincore:contributors/item\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.dublincore.contributors.item</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"template\">/widgets/contributors_item_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n###### Complex property\n\nFor a complex property, lets take the example of a \"complextypes:complex\" property with two items \"stringItem\" and \"directoryItem\".\n\"stringItem\" is a simple string, but \"directoryItem\" is a string that needs to be bound to the \"myDirectory\" directory.\n\n- To display the complex property, nothing special is needed so the \"complex\" generic widget definition can be used.\n\n- To display the \"directoryItem\" item, the \"string\" generic widget definition doesn't match our needs: it would display the directory entry code stored in the backend whereas we want to display its label.\nSo we need a specific widget definition for the \"directoryItem\" subwidget to use the \"selectOneDirectory\" widget type bound to the \"myDirectory\" directory.\nAs for a list item, the name of this widget definition must match the xpath of the complex property item, ie. \"complextypes:complex/directoryItem\".\n\nTherefore, two widget definitions are involved:\n\n- The \"complex\" generic widget definition:\n\n```xml\n<widget name=\"complex\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"template\">\n      /widgets/complex_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"complextypes:complex/directoryItem\" specific widget definition:\n\n```xml\n<widget name=\"complextypes:complex/directoryItem\" type=\"selectOneDirectory\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.complextypes.complex.directoryItem</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"directoryName\">myDirectory</property>\n    <property name=\"localize\">true</property>\n    <property name=\"ordering\">ordering,label</property>\n  </properties>\n</widget>\n```\n\n###### Useful widget properties\n\nYou can use the following properties on a list widget definition (typically \"scalarList\", \"complexList\" or \"files:files\"):\n\n`<property name=\"displayAllItems\">[true|false]</property>`\nIf set to `true`, all the list items will be displayed, otherwise only the different ones will be.\n\n`<property name=\"displayItemIndexes\">[true|false]</property>`\nIf set to `true`, a subwidget will be added to the widget definition to display the list item indexes.\n\nYou can use the following property on a complex widget definition (typically \"complex\"):\n\n`<property name=\"display\">[inline|*]</property>`\nIf set to `inline` the complex items will be displayed as a table with one line and one column per item, otherwise as a table with one column and one line per item.\n\n##### About the value bound to the diff widgets\n\nIf you take a look at [layout_diff_template.xhtml](nuxeo-diff-jsf/src/main/resources/web/nuxeo.war/layouts/layout_diff_template.xhtml), you will see that the `value` passed to the `<nxl:widget>` tag is `#{value.leftValue}` or `#{value.rightValue}`, `value` being the object passed to the `<nxl:layout>` tag `value` attribute: `diffDisplayBlock`, of type `DiffDisplayBlockImpl`.\nThe `leftValue` and `rightValue` members of `DiffDisplayBlockImpl` are of type `Map<String, Map<String, PropertyDiffDisplay>>`. The first level Map keys are schema names, the second level ones are field keys.\nFinally, the `PropertyDiffDisplay` object has two members: `value` and `styleClass`, `value` holding the value to display and `styleClass` the css style class to apply to the &lt;span&gt; wrapping the value.\n\nFor example if we compare two documents where only the \"dublincore:title\" property is different (\"My first doc\" and \"My second doc\") we could have the following `diffDisplayBlock` object:\n\n```java\ndiffDisplayBlock.getLeftValue() = {dublincore={title={value=\"My first doc\", styleClass=\"redBackgroundColor\"}}}\ndiffDisplayBlock.getRightValue() = {dublincore={title={value=\"My second doc\", styleClass=\"greenBackgroundColor\"}}}\n```\n\nOn the widget side, the field definitions must match the `diffDisplayBlock` object structure, that's why the generated field definitions of the widget used for \"dublincore:title\" would be:\n\n```xml\n<fields>\n  <field>dublincore:title/value</field>\n  <field>dublincore:title/styleClass</field>\n</fields>\n```\n\nThis is important to know when designing a custom template for a diff widget (ie. where field definitions are automatically generated): you can use `#{field_0}` for the value itself and `#{field_1`} for the css style class associated to the value.\nBy default, only the items of a complex property or of a list property where the `displayAllItems` widget property is `true` can have a styleClass equal to `redBackgroundColor` or `greenBackgroundColor` in order to highlight the different items among all.\n\n#### To summarize: what you need to contribute to have a nice diff result for your custom document types\n\n- A `diffDisplay` contribution for each document type.\n\n- The associated `diffBlock` contributions. Don't forget that you can specify the items you want to display for a complex property and the fields/items for which you want to display the content diff links.\n\n- The specific widgets needed when the generic ones don't match your needs. Typically for a date property if you need to change the date format, or for a property bound to a directory to specifiy the directory name. Also don't forget that you can contribute a specific widget for a complex property item or a list item, using the item xpath.\n\n- The labels for each `diffBlock`, each widget and each subwidget in your `messages*.properties` files.\nFor example:\n\n```\nlabel.diffBlock.custom=My custom diff block title\nlabel.customSchema.customField=Custom field\nlabel.customSchema.customField.firstComplexItem=First item of the complex custom field\n```\n\n### Content diff\n\nWork in progress!\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "56f1f6c0b7c5c1f67502f8718bf655e4",
            "encoding": "UTF-8",
            "length": 16731,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.diff.content",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Adapters for content diff\n  \n",
          "documentationHtml": "<p>\nAdapters for content diff\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapters/Contributions/org.nuxeo.ecm.diff.content.adapters--adapters",
              "id": "org.nuxeo.ecm.diff.content.adapters--adapters",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.diff.content.ContentDiffAdapter\" factory=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffDocumentModelAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapters",
          "name": "org.nuxeo.ecm.diff.content.adapters",
          "requirements": [],
          "resolutionOrder": 173,
          "services": [],
          "startOrder": 187,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.content.adapters\">\n  <documentation>\n    Adapters for content diff\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.diff.content.ContentDiffAdapter\"\n      factory=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffDocumentModelAdapterFactory\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-diff-document-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
          "declaredStartOrder": null,
          "documentation": "\n    @author Antoine Taillefer (ataillefer@nuxeo.com)\n  \n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
              "descriptors": [
                "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterFactoryDescriptor"
              ],
              "documentation": "\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n    \n",
              "documentationHtml": "<p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent/ExtensionPoints/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--adapterFactory",
              "id": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--adapterFactory",
              "label": "adapterFactory (org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent)",
              "name": "adapterFactory",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
              "descriptors": [
                "org.nuxeo.ecm.diff.content.adapter.MimeTypeContentDifferDescriptor"
              ],
              "documentation": "\n      Allows to contribute default implementation of\n      content diff according to the mime type.\n    \n",
              "documentationHtml": "<p>\nAllows to contribute default implementation of\ncontent diff according to the mime type.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent/ExtensionPoints/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--mimeTypeContentDiffer",
              "id": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--mimeTypeContentDiffer",
              "label": "mimeTypeContentDiffer (org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent)",
              "name": "mimeTypeContentDiffer",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
              "descriptors": [
                "org.nuxeo.ecm.diff.content.MimeTypesDescriptor"
              ],
              "documentation": "\n      @since 10.10\n\n      Allows to contribute the list of blacklisted mime types for HTML\n      conversion.\n\n      By default, contributing a list merges its mime types\n      with the existing ones.\n      To remove a mime type, use enabled=false.\n      <code>\n    <extension point=\"htmlConversionBlacklistedMimeTypes\" target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n        <mimeTypes>\n            <mimeType>application/msword</mimeType>\n            <mimeType>application/rtf</mimeType>\n            <mimeType enabled=\"false\">application/pdf</mimeType>\n        </mimeTypes>\n    </extension>\n</code>\n\n\n      To override the whole list, use override=\"true\".\n      <code>\n    <extension point=\"htmlConversionBlacklistedMimeTypes\" target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n        <mimeTypes override=\"true\">\n            <mimeType>application/msword</mimeType>\n        </mimeTypes>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\n&#64;since 10.10\n</p><p>\nAllows to contribute the list of blacklisted mime types for HTML\nconversion.\n</p><p>\nBy default, contributing a list merges its mime types\nwith the existing ones.\nTo remove a mime type, use enabled&#61;false.\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;htmlConversionBlacklistedMimeTypes&#34; target&#61;&#34;org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent&#34;&gt;\n        &lt;mimeTypes&gt;\n            &lt;mimeType&gt;application/msword&lt;/mimeType&gt;\n            &lt;mimeType&gt;application/rtf&lt;/mimeType&gt;\n            &lt;mimeType enabled&#61;&#34;false&#34;&gt;application/pdf&lt;/mimeType&gt;\n        &lt;/mimeTypes&gt;\n    &lt;/extension&gt;\n</code></pre><p>\nTo override the whole list, use override&#61;&#34;true&#34;.\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;htmlConversionBlacklistedMimeTypes&#34; target&#61;&#34;org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent&#34;&gt;\n        &lt;mimeTypes override&#61;&#34;true&#34;&gt;\n            &lt;mimeType&gt;application/msword&lt;/mimeType&gt;\n        &lt;/mimeTypes&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent/ExtensionPoints/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--htmlConversionBlacklistedMimeTypes",
              "id": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--htmlConversionBlacklistedMimeTypes",
              "label": "htmlConversionBlacklistedMimeTypes (org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent)",
              "name": "htmlConversionBlacklistedMimeTypes",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
          "name": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
          "requirements": [],
          "resolutionOrder": 174,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent/Services/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManager",
              "id": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 827,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n  <implementation\n    class=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\" />\n\n  <documentation>\n    @author Antoine Taillefer (ataillefer@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManager\" />\n  </service>\n\n  <extension-point name=\"adapterFactory\">\n    <documentation>\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterFactoryDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"mimeTypeContentDiffer\">\n    <documentation>\n      Allows to contribute default implementation of\n      content diff according to the mime type.\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.diff.content.adapter.MimeTypeContentDifferDescriptor\" />\n  </extension-point>\n\n  <extension-point\n    name=\"htmlConversionBlacklistedMimeTypes\">\n    <documentation>\n      @since 10.10\n\n      Allows to contribute the list of blacklisted mime types for HTML\n      conversion.\n\n      By default, contributing a list merges its mime types\n      with the existing ones.\n      To remove a mime type, use enabled=false.\n      <code>\n        <extension\n          target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\"\n          point=\"htmlConversionBlacklistedMimeTypes\">\n          <mimeTypes>\n            <mimeType>application/msword</mimeType>\n            <mimeType>application/rtf</mimeType>\n            <mimeType enabled=\"false\">application/pdf</mimeType>\n          </mimeTypes>\n        </extension>\n      </code>\n\n      To override the whole list, use override=\"true\".\n      <code>\n        <extension\n          target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\"\n          point=\"htmlConversionBlacklistedMimeTypes\">\n          <mimeTypes override=\"true\">\n            <mimeType>application/msword</mimeType>\n          </mimeTypes>\n        </extension>\n      </code>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.diff.content.MimeTypesDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-diff-adapter-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Default builtin content diff adapters\n    \n",
              "documentationHtml": "<p>\nDefault builtin content diff adapters\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--adapterFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.contrib/Contributions/org.nuxeo.ecm.diff.content.adapter.contrib--adapterFactory",
              "id": "org.nuxeo.ecm.diff.content.adapter.contrib--adapterFactory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "name": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapterFactory\" target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n\n    <documentation>\n      Default builtin content diff adapters\n    </documentation>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--mimeTypeContentDiffer",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.contrib/Contributions/org.nuxeo.ecm.diff.content.adapter.contrib--mimeTypeContentDiffer",
              "id": "org.nuxeo.ecm.diff.content.adapter.contrib--mimeTypeContentDiffer",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "name": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"mimeTypeContentDiffer\" target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n    <contentDiffer class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/html</pattern>\n    </contentDiffer>\n    <contentDiffer class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/plain</pattern>\n    </contentDiffer>\n    <contentDiffer class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/xml</pattern>\n    </contentDiffer>\n    <contentDiffer class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>application/json</pattern>\n    </contentDiffer>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--htmlConversionBlacklistedMimeTypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.contrib/Contributions/org.nuxeo.ecm.diff.content.adapter.contrib--htmlConversionBlacklistedMimeTypes",
              "id": "org.nuxeo.ecm.diff.content.adapter.contrib--htmlConversionBlacklistedMimeTypes",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "name": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"htmlConversionBlacklistedMimeTypes\" target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n    <mimeTypes>\n      <!-- PDF -->\n      <mimeType>application/pdf</mimeType>\n\n      <!-- Office spreadsheet -->\n      <mimeType>application/vnd.ms-excel</mimeType>\n      <mimeType>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n      </mimeType>\n      <mimeType>application/vnd.sun.xml.calc</mimeType>\n      <mimeType>application/vnd.sun.xml.calc.template</mimeType>\n      <mimeType>application/vnd.oasis.opendocument.spreadsheet\n      </mimeType>\n      <mimeType>application/vnd.oasis.opendocument.spreadsheet-template\n      </mimeType>\n\n      <!-- Office presentation -->\n      <mimeType>application/vnd.ms-powerpoint</mimeType>\n      <mimeType>application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </mimeType>\n      <mimeType>application/vnd.sun.xml.impress</mimeType>\n      <mimeType>application/vnd.sun.xml.impress.template</mimeType>\n      <mimeType>application/vnd.oasis.opendocument.presentation\n      </mimeType>\n      <mimeType>application/vnd.oasis.opendocument.presentation-template\n      </mimeType>\n    </mimeTypes>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.contrib",
          "name": "org.nuxeo.ecm.diff.content.adapter.contrib",
          "requirements": [],
          "resolutionOrder": 175,
          "services": [],
          "startOrder": 186,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.content.adapter.contrib\">\n  <extension\n    target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\"\n    point=\"adapterFactory\">\n\n    <documentation>\n      Default builtin content diff adapters\n    </documentation>\n\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\"\n    point=\"mimeTypeContentDiffer\">\n    <contentDiffer\n      class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/html</pattern>\n    </contentDiffer>\n    <contentDiffer\n      class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/plain</pattern>\n    </contentDiffer>\n    <contentDiffer\n      class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/xml</pattern>\n    </contentDiffer>\n    <contentDiffer\n      class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>application/json</pattern>\n    </contentDiffer>\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\"\n    point=\"htmlConversionBlacklistedMimeTypes\">\n    <mimeTypes>\n      <!-- PDF -->\n      <mimeType>application/pdf</mimeType>\n\n      <!-- Office spreadsheet -->\n      <mimeType>application/vnd.ms-excel</mimeType>\n      <mimeType>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n      </mimeType>\n      <mimeType>application/vnd.sun.xml.calc</mimeType>\n      <mimeType>application/vnd.sun.xml.calc.template</mimeType>\n      <mimeType>application/vnd.oasis.opendocument.spreadsheet\n      </mimeType>\n      <mimeType>application/vnd.oasis.opendocument.spreadsheet-template\n      </mimeType>\n\n      <!-- Office presentation -->\n      <mimeType>application/vnd.ms-powerpoint</mimeType>\n      <mimeType>application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </mimeType>\n      <mimeType>application/vnd.sun.xml.impress</mimeType>\n      <mimeType>application/vnd.sun.xml.impress.template</mimeType>\n      <mimeType>application/vnd.oasis.opendocument.presentation\n      </mimeType>\n      <mimeType>application/vnd.oasis.opendocument.presentation-template\n      </mimeType>\n    </mimeTypes>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-diff-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Allows to limit the diff count between two files.\n      @since 2021.24\n    \n",
              "documentationHtml": "<p>\nAllows to limit the diff count between two files.\n&#64;since 2021.24\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.settings/Contributions/org.nuxeo.ecm.diff.settings--configuration",
              "id": "org.nuxeo.ecm.diff.settings--configuration",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Allows to limit the diff count between two files.\n      @since 2021.24\n    </documentation>\n    <property name=\"nuxeo.diff.limit\">100000</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.settings",
          "name": "org.nuxeo.ecm.diff.settings",
          "requirements": [],
          "resolutionOrder": 176,
          "services": [],
          "startOrder": 192,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.settings\">\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Allows to limit the diff count between two files.\n      @since 2021.24\n    </documentation>\n    <property name=\"nuxeo.diff.limit\">${nuxeo.diff.limit:=100000}</property>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-diff-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.converter.contrib/Contributions/org.nuxeo.ecm.diff.content.converter.contrib--converter",
              "id": "org.nuxeo.ecm.diff.content.converter.contrib--converter",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <converter class=\"org.nuxeo.ecm.diff.content.converters.ContentDiffHtmlConverter\" name=\"contentDiffHtmlConverter\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/html</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.diff.content.converters.ContentDiffTextConverter\" name=\"contentDiffTextConverter\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.converter.contrib",
          "name": "org.nuxeo.ecm.diff.content.converter.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.convert.plugins",
            "org.nuxeo.ecm.platform.convert.plugins"
          ],
          "resolutionOrder": 340,
          "services": [],
          "startOrder": 188,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.content.converter.contrib\">\n\n  <require>org.nuxeo.ecm.platform.convert.plugins</require>\n  <require>org.nuxeo.ecm.core.convert.plugins</require>\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"\n    point=\"converter\">\n\n    <converter name=\"contentDiffHtmlConverter\" class=\"org.nuxeo.ecm.diff.content.converters.ContentDiffHtmlConverter\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/html</destinationMimeType>\n    </converter>\n\n    <converter name=\"contentDiffTextConverter\" class=\"org.nuxeo.ecm.diff.content.converters.ContentDiffTextConverter\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-diff-convert-service-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-diff-content-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm",
      "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content",
      "id": "org.nuxeo.diff.content",
      "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: 5.6\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.diff\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.diff.content;singleton:=true\r\nNuxeo-Component: OSGI-INF/content-diff-document-adapter-contrib.xml,OSGI\r\n -INF/content-diff-adapter-framework.xml,OSGI-INF/content-diff-adapter-c\r\n ontrib.xml,OSGI-INF/content-diff-convert-service-contrib.xml,OSGI-INF/c\r\n ontent-diff-config.xml\r\n\r\n",
      "maxResolutionOrder": 340,
      "minResolutionOrder": 173,
      "packages": [
        "nuxeo-diff"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Diff\n\nThis repo hosts the source code of a plugin for Nuxeo Platform that allows to render a diff between two documents or two versions of a document.\nThe comparison takes into account all the properties shared by the documents, which means that if a comparison is done between two documents of a different type, only the schemas in common will be \"diffed\".\nThe comparison also takes into account blob-type properties.\n\n\n## Building and deploying\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Diff Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-diff).\n\n## Configuring\n\n### Diff display\n\nThe `DiffDisplayService` offers several extension points to configure the document diff display.\nMost of the code samples exposed here can be found in the [diff-display-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-display-contrib.xml) and [diff-widgets-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-widgets-contrib.xml) files.\n\n#### Configuring groups of properties to display with the diffDisplay extension point.\n\nA `diffDisplay` contribution represents a number of `diffBlocks` that you want to display when asking for a document comparison.\nIt is bound to a document type.\nA `diffBlock` contribution represents a number of properties (fields) that you want to display (see next section).\n\nWhen asking for the comparison between 2 versions of a document, the `diffDisplay` bound to the document type or a super type is used.\nIf no `diffDisplay` is found for this type or a super type a fall back is done on the default diff display mode: one block per document schema and for each block all the fields of the schema that are different.\n\n*Beware that in this case the order of the schemas and of the fields is undefined.*\n\nWhen asking for the comparison between 2 documents:\n- If they are of the same type: if  a `diffDisplay` is found for this type or a super type then it is used, else a fall back is done on the default diff display mode.\n- If they are of different types: if  a `diffDisplay` is found for a common super type then it is used, else a fall back is done on the default diff display mode.\n\nFor example, this is the `diffDisplay` contribution bound to the _File_ type:\n```xml\n<diffDisplay type=\"File\">\n  <diffBlocks>\n    <diffBlock name=\"heading\" />\n    <diffBlock name=\"dublincore\" />\n    <diffBlock name=\"files\" />\n  </diffDisplay>\n</diffBlocks>\n```\n\n_Note that the order of the diffBlocks is taken into account when rendering the diff display._\n\n#### Configuring a group of properties to display with the diffBlock extension point\n\nA `diffBlock` contribution represents a number of `fields` that you want to display. It is rendered as a foldable box.\nThe `label` attribute of a `diffBlock` contribution is used as the title of the foldable box.\nA `field` is defined by its `schema` and its `name`.\n\nFor example, this is the \"heading\" `diffBlock` contribution:\n```xml\n<diffBlock name=\"heading\" label=\"label.diffBlock.heading\">\n  <fields>\n    <field schema=\"dublincore\" name=\"title\" />\n    <field schema=\"dublincore\" name=\"description\" />\n  </fields>\n</diffBlock>\n```\n_Note that the order of the fields is taken into account when rendering the diff block._\n\nFor complex properties, you can contribute inside the `field` element the property `items` that you want to display:\n```xml\n<field schema=\"complextypes\" name=\"complex\">\n  <items>\n    <item name=\"stringItem\" />\n    <item name=\"thirdItem\" />\n    <item name=\"fourthItem\" />\n  </items>\n</field>\n```\n\n_Note that the order of the items is taken into account when rendering the field._\n\nThis is used for the `files` field of the `files` diff block:\n```xml\n<field schema=\"files\" name=\"files\">\n  <items>\n    <!-- Display the file only, not the filename which is managed\n         by the file widget type -->\n    <item name=\"file\" displayContentDiffLinks=\"true\" />\n  </items>\n</field>\n```\n\nIf no `items` are specified, all the property items are displayed.\n\nFor content properties (that hold a blob) or string ones you can set the `displayContentDiffLinks` attribute to `true` on a `field` or an `item` to display the content diff links.\nThese links will open a fancybox showing the detailed content diff using the usual green and red colors to distinguish the added/removed parts of the content.\nFor now, 2 links are displayed: _Textual diff_ based on a text conversion and _Html diff_ based on an html conversion (keeps the content layout).\n\n#### Configuring property widgets with the widgets extension point\n\n##### Principle\n\nWhen rendering a `diffBlock`, the `DiffDisplayService` builds a layout definition on the fly, including a layout row for each `field` of the `diffBlock`.\nEach row contains a widget definition for the `field`, and the layout template renders 2 instances of this widget definition: one for the left document and one for the right document.\nThe content diff links, if displayed, are also rendered by a widget inside the layout row.\n\nHow is the widget definition built for a given `field`?\nA lookup is done in the `LayoutStore` service to find a specific widget definition named with the xpath of the property.\nIf such a definition is not found, a lookup is done to find a generic widget definition named with the type of the property.\n\nThis allows you to only contribute a specific widget definition if the generic one doesn't match your needs for a given field, typically if you need a custom template, label or custom properties.\n\n##### Example\n\nLets say we have contributed the following `diffBlock`:\n```xml\n<diffBlock name=\"myCustomBlock\" label=\"label.diffBlock.custom\">\n  <fields>\n    <field schema=\"file\" name=\"content\" />\n    <field schema=\"dublincore\" name=\"title\" />\n  </fields>\n</diffBlock>\n```\n\nand the following widgets to the `widgets` extension point of the `org.nuxeo.ecm.platform.forms.layout.LayoutStore` component:\n```xml\n<extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n  point=\"widgets\">\n\n  <widget name=\"file:content\" type=\"file\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <labels>\n      <label mode=\"any\">label.summary.download.file</label>\n    </labels>\n    <translated>true</translated>\n    <properties mode=\"any\">\n    </properties>\n  </widget>\n\n  <widget name=\"string\" type=\"template\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <properties mode=\"any\">\n      <property name=\"widgetType\">text</property>\n      <property name=\"template\">\n        /widgets/generic_diff_widget_template.xhtml\n      </property>\n    </properties>\n  </widget>\n\n</extension>\n```\n\nWhen rendering the \"myCustomBlock\" `diffBlock`, the `DiffDisplayService` will:\n\n- Look for a specific widget definition named \"file:content\" in the `LayoutStore`, find it and use it for the \"file:content\" field.\n\n- Look for a specific widget definition named \"dublincore:title\" in the `LayoutStore`, won't find it and therefore will look for a generic widget definition named with the field type, ie. \"string\", find it and use it for the dublincore:title field.\n\nIn this use case, the \"string\" generic widget definition is sufficient to display the \"dublincore:title\" field.\nIt uses a widget of type \"text\" with \"label.dublincore.title\" as a label and \"dublincore:title\" as a field definition.\nWe can easily understand here the interest of generic widgets: once you have the type and xpath of a property, the matching widget definition can be computed on the fly using the property type to guess the widget type (\"string\" => \"text\", \"date\" => \"datetime\", etc.) and the property xpath for the field definition and label.\n\nThe \"file:content\" specific widget definition is contributed here to use a custom label \"label.summary.download.file\" instead of the one that would have been generated for the \"content\" generic widget definition: \"label.file.content\".\n\n_Note that in both cases (generic and specific) you don't need to define the widget field definitions since they are automatically computed from the property xpath, except in particular cases like \"note:note\" where the \"mime-type\" field is needed._\n\n##### List and complex properties\n\nYou might already know that the widgets used to display list and complex properties have subwidgets.\nIn the case of a list property, a subwidget is needed for the list items; in the case of a complex property, a subwidget is needed for each item of the complex property.\nThe lookup done by the `DiffDisplayService_` for the first-level widgets is also done recursively for the subwidgets!\n\n###### List property\n\nFor a list property, lets take the example of \"dublincore:contributors\", which is a string list.\n\n- To display the list, nothing special is needed so the \"scalarList\" generic widget definition can be used.\n\n- To display a list item (a contributor, which is of type \"string\"), the \"string\" generic widget definition doesn't match our needs: it would display the contributor's username whereas we want to display its fullname (firstname lastname).\nSo we need a specific widget definition for the list items subwidget to use a custom template able to display the contributor's fullname.\nThe name of this widget definition must match the xpath of the list item property, ie. \"dublincore:contributors/item\".\n\nTherefore, two widget definitions are involved:\n\n- The \"scalarList\" generic widget definition:\n\n```xml\n<widget name=\"scalarList\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"displayAllItems\">false</property>\n    <property name=\"displayItemIndexes\">true</property>\n    <property name=\"template\">\n      /widgets/list_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"dublincore:contributors/item\" specific widget definition:\n\n```xml\n<widget name=\"dublincore:contributors/item\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.dublincore.contributors.item</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"template\">/widgets/contributors_item_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n###### Complex property\n\nFor a complex property, lets take the example of a \"complextypes:complex\" property with two items \"stringItem\" and \"directoryItem\".\n\"stringItem\" is a simple string, but \"directoryItem\" is a string that needs to be bound to the \"myDirectory\" directory.\n\n- To display the complex property, nothing special is needed so the \"complex\" generic widget definition can be used.\n\n- To display the \"directoryItem\" item, the \"string\" generic widget definition doesn't match our needs: it would display the directory entry code stored in the backend whereas we want to display its label.\nSo we need a specific widget definition for the \"directoryItem\" subwidget to use the \"selectOneDirectory\" widget type bound to the \"myDirectory\" directory.\nAs for a list item, the name of this widget definition must match the xpath of the complex property item, ie. \"complextypes:complex/directoryItem\".\n\nTherefore, two widget definitions are involved:\n\n- The \"complex\" generic widget definition:\n\n```xml\n<widget name=\"complex\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"template\">\n      /widgets/complex_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"complextypes:complex/directoryItem\" specific widget definition:\n\n```xml\n<widget name=\"complextypes:complex/directoryItem\" type=\"selectOneDirectory\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.complextypes.complex.directoryItem</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"directoryName\">myDirectory</property>\n    <property name=\"localize\">true</property>\n    <property name=\"ordering\">ordering,label</property>\n  </properties>\n</widget>\n```\n\n###### Useful widget properties\n\nYou can use the following properties on a list widget definition (typically \"scalarList\", \"complexList\" or \"files:files\"):\n\n`<property name=\"displayAllItems\">[true|false]</property>`\nIf set to `true`, all the list items will be displayed, otherwise only the different ones will be.\n\n`<property name=\"displayItemIndexes\">[true|false]</property>`\nIf set to `true`, a subwidget will be added to the widget definition to display the list item indexes.\n\nYou can use the following property on a complex widget definition (typically \"complex\"):\n\n`<property name=\"display\">[inline|*]</property>`\nIf set to `inline` the complex items will be displayed as a table with one line and one column per item, otherwise as a table with one column and one line per item.\n\n##### About the value bound to the diff widgets\n\nIf you take a look at [layout_diff_template.xhtml](nuxeo-diff-jsf/src/main/resources/web/nuxeo.war/layouts/layout_diff_template.xhtml), you will see that the `value` passed to the `<nxl:widget>` tag is `#{value.leftValue}` or `#{value.rightValue}`, `value` being the object passed to the `<nxl:layout>` tag `value` attribute: `diffDisplayBlock`, of type `DiffDisplayBlockImpl`.\nThe `leftValue` and `rightValue` members of `DiffDisplayBlockImpl` are of type `Map<String, Map<String, PropertyDiffDisplay>>`. The first level Map keys are schema names, the second level ones are field keys.\nFinally, the `PropertyDiffDisplay` object has two members: `value` and `styleClass`, `value` holding the value to display and `styleClass` the css style class to apply to the &lt;span&gt; wrapping the value.\n\nFor example if we compare two documents where only the \"dublincore:title\" property is different (\"My first doc\" and \"My second doc\") we could have the following `diffDisplayBlock` object:\n\n```java\ndiffDisplayBlock.getLeftValue() = {dublincore={title={value=\"My first doc\", styleClass=\"redBackgroundColor\"}}}\ndiffDisplayBlock.getRightValue() = {dublincore={title={value=\"My second doc\", styleClass=\"greenBackgroundColor\"}}}\n```\n\nOn the widget side, the field definitions must match the `diffDisplayBlock` object structure, that's why the generated field definitions of the widget used for \"dublincore:title\" would be:\n\n```xml\n<fields>\n  <field>dublincore:title/value</field>\n  <field>dublincore:title/styleClass</field>\n</fields>\n```\n\nThis is important to know when designing a custom template for a diff widget (ie. where field definitions are automatically generated): you can use `#{field_0}` for the value itself and `#{field_1`} for the css style class associated to the value.\nBy default, only the items of a complex property or of a list property where the `displayAllItems` widget property is `true` can have a styleClass equal to `redBackgroundColor` or `greenBackgroundColor` in order to highlight the different items among all.\n\n#### To summarize: what you need to contribute to have a nice diff result for your custom document types\n\n- A `diffDisplay` contribution for each document type.\n\n- The associated `diffBlock` contributions. Don't forget that you can specify the items you want to display for a complex property and the fields/items for which you want to display the content diff links.\n\n- The specific widgets needed when the generic ones don't match your needs. Typically for a date property if you need to change the date format, or for a property bound to a directory to specifiy the directory name. Also don't forget that you can contribute a specific widget for a complex property item or a list item, using the item xpath.\n\n- The labels for each `diffBlock`, each widget and each subwidget in your `messages*.properties` files.\nFor example:\n\n```\nlabel.diffBlock.custom=My custom diff block title\nlabel.customSchema.customField=Custom field\nlabel.customSchema.customField.firstComplexItem=First item of the complex custom field\n```\n\n### Content diff\n\nWork in progress!\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "56f1f6c0b7c5c1f67502f8718bf655e4",
        "encoding": "UTF-8",
        "length": 16731,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-routing-api",
      "artifactVersion": "2023.7.9",
      "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.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.routing.api",
      "components": [],
      "fileName": "nuxeo-routing-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.routing",
      "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.api",
      "id": "org.nuxeo.ecm.platform.routing.api",
      "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 API\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.routing.api;singleton=true\r\nBundle-Vendor: Nuxeo\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-storage",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.storage",
          "org.nuxeo.ecm.core.storage.dbs",
          "org.nuxeo.ecm.core.storage.mem",
          "org.nuxeo.ecm.core.storage.mongodb",
          "org.nuxeo.ecm.core.storage.sql",
          "org.nuxeo.ecm.core.storage.sql.management"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage",
        "id": "grp:org.nuxeo.ecm.core.storage",
        "name": "org.nuxeo.ecm.core.storage",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.storage",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.storage.lock.LockManagerService",
          "declaredStartOrder": null,
          "documentation": "\n    Manages Lock Managers.\n  \n",
          "documentationHtml": "<p>\nManages Lock Managers.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.storage.lock.LockManagerService",
              "descriptors": [
                "org.nuxeo.ecm.core.storage.lock.LockManagerDescriptor"
              ],
              "documentation": "\n      Extension point to register lock managers.\n\n      A new Lock Manager can be contributed using the following extension point:\n      <code>\n    <lockmanager class=\"some.class.implementing.LockManager\" name=\"default\"/>\n</code>\n\n      A repository will use the Lock Manager of the same name.\n    \n",
              "documentationHtml": "<p>\nExtension point to register lock managers.\n</p><p>\nA new Lock Manager can be contributed using the following extension point:\n</p><p></p><pre><code>    &lt;lockmanager class&#61;&#34;some.class.implementing.LockManager&#34; name&#61;&#34;default&#34;/&gt;\n</code></pre><p>\nA repository will use the Lock Manager of the same name.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.lock.LockManagerService/ExtensionPoints/org.nuxeo.ecm.core.storage.lock.LockManagerService--lockmanager",
              "id": "org.nuxeo.ecm.core.storage.lock.LockManagerService--lockmanager",
              "label": "lockmanager (org.nuxeo.ecm.core.storage.lock.LockManagerService)",
              "name": "lockmanager",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.lock.LockManagerService",
          "name": "org.nuxeo.ecm.core.storage.lock.LockManagerService",
          "requirements": [],
          "resolutionOrder": 160,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.storage.lock.LockManagerService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.lock.LockManagerService/Services/org.nuxeo.ecm.core.storage.lock.LockManagerService",
              "id": "org.nuxeo.ecm.core.storage.lock.LockManagerService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 819,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.lock.LockManagerService\"\n  version=\"1.0.0\">\n\n  <documentation>\n    Manages Lock Managers.\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.core.storage.lock.LockManagerService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.storage.lock.LockManagerService\" />\n  </service>\n\n  <extension-point name=\"lockmanager\">\n    <documentation>\n      Extension point to register lock managers.\n\n      A new Lock Manager can be contributed using the following extension point:\n      <code>\n        <lockmanager name=\"default\" class=\"some.class.implementing.LockManager\" />\n      </code>\n      A repository will use the Lock Manager of the same name.\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.core.storage.lock.LockManagerDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/lockmanager-service-contrib.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.bulk/Contributions/org.nuxeo.ecm.core.storage.bulk--actions",
              "id": "org.nuxeo.ecm.core.storage.bulk--actions",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"10\" bucketSize=\"50\" httpEnabled=\"false\" inputStream=\"bulk/extractBinaryFulltext\" name=\"extractBinaryFulltext\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.bulk/Contributions/org.nuxeo.ecm.core.storage.bulk--streamProcessor",
              "id": "org.nuxeo.ecm.core.storage.bulk--streamProcessor",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.storage.action.ExtractBinaryFulltextAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"extractBinaryFulltext\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.bulk",
          "name": "org.nuxeo.ecm.core.storage.bulk",
          "requirements": [
            "org.nuxeo.ecm.core.bulk.config"
          ],
          "resolutionOrder": 827,
          "services": [],
          "startOrder": 160,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.bulk\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.bulk.config</require>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"extractBinaryFulltext\" inputStream=\"bulk/extractBinaryFulltext\" bucketSize=\"50\" batchSize=\"10\" httpEnabled=\"false\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"extractBinaryFulltext\"\n      class=\"org.nuxeo.ecm.core.storage.action.ExtractBinaryFulltextAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.extractBinaryFulltext.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.extractBinaryFulltext.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/bulk-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-storage-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage",
      "id": "org.nuxeo.ecm.core.storage",
      "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: 2023.7.9-t20240130-104746\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage\r\nNuxeo-Component: OSGI-INF/lockmanager-service-contrib.xml,OSGI-INF/bulk-\r\n contrib.xml\r\n\r\n",
      "maxResolutionOrder": 827,
      "minResolutionOrder": 160,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core",
          "org.nuxeo.ecm.core.api",
          "org.nuxeo.ecm.core.bulk",
          "org.nuxeo.ecm.core.cache",
          "org.nuxeo.ecm.core.event",
          "org.nuxeo.ecm.core.io",
          "org.nuxeo.ecm.core.mimetype",
          "org.nuxeo.ecm.core.mongodb",
          "org.nuxeo.ecm.core.persistence",
          "org.nuxeo.ecm.core.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.platform.el"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core",
        "id": "grp:org.nuxeo.ecm.core",
        "name": "org.nuxeo.ecm.core",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.CoreService",
          "declaredStartOrder": null,
          "documentation": "\n  The core service provides a way to register version removal policies\n  \n",
          "documentationHtml": "<p>\nThe core service provides a way to register version removal policies\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.CoreService",
              "descriptors": [
                "org.nuxeo.ecm.core.CoreServicePolicyDescriptor"
              ],
              "documentation": "\n      Used to register the version removal policy, which must implement\n      VersionRemovalPolicy.\n      <code>\n    <policy class=\"...\"/>\n</code>\n",
              "documentationHtml": "<p>\nUsed to register the version removal policy, which must implement\nVersionRemovalPolicy.\n</p><p></p><pre><code>    &lt;policy class&#61;&#34;...&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreService/ExtensionPoints/org.nuxeo.ecm.core.CoreService--versionRemovalPolicy",
              "id": "org.nuxeo.ecm.core.CoreService--versionRemovalPolicy",
              "label": "versionRemovalPolicy (org.nuxeo.ecm.core.CoreService)",
              "name": "versionRemovalPolicy",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.CoreService",
              "descriptors": [
                "org.nuxeo.ecm.core.CoreServiceOrphanVersionRemovalFilterDescriptor"
              ],
              "documentation": "\n      Used to register filter that are used by the default VersionRemovalPolicy implementation to check asynchronously what versions can really be removed.\n      <code>\n    <filter class=\"...\"/>\n</code>\n",
              "documentationHtml": "<p>\nUsed to register filter that are used by the default VersionRemovalPolicy implementation to check asynchronously what versions can really be removed.\n</p><p></p><pre><code>    &lt;filter class&#61;&#34;...&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreService/ExtensionPoints/org.nuxeo.ecm.core.CoreService--orphanVersionRemovalFilter",
              "id": "org.nuxeo.ecm.core.CoreService--orphanVersionRemovalFilter",
              "label": "orphanVersionRemovalFilter (org.nuxeo.ecm.core.CoreService)",
              "name": "orphanVersionRemovalFilter",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreService",
          "name": "org.nuxeo.ecm.core.CoreService",
          "requirements": [],
          "resolutionOrder": 83,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.CoreService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreService/Services/org.nuxeo.ecm.core.CoreService",
              "id": "org.nuxeo.ecm.core.CoreService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 792,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.CoreService\" version=\"1.0\">\n  <documentation>\n  The core service provides a way to register version removal policies\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.CoreService\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.CoreService\" />\n  </service>\n\n  <extension-point name=\"versionRemovalPolicy\">\n    <documentation>\n      Used to register the version removal policy, which must implement\n      VersionRemovalPolicy.\n      <code>\n        <policy class=\"...\"/>\n      </code>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.core.CoreServicePolicyDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"orphanVersionRemovalFilter\">\n    <documentation>\n      Used to register filter that are used by the default VersionRemovalPolicy implementation to check asynchronously what versions can really be removed.\n      <code>\n        <filter class=\"...\"/>\n      </code>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.core.CoreServiceOrphanVersionRemovalFilterDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/CoreService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n\n    This component is contributing the core types and schemas and other core extensions.\n\n    @author <a href=\"mailto:bs@nuxeo.com\">Bogdan Stefanescu</a>\n",
          "documentationHtml": "<p>\nThis component is contributing the core types and schemas and other core extensions.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "The core schemas\n",
              "documentationHtml": "<p>\nThe core schemas</p>",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreExtensions/Contributions/org.nuxeo.ecm.core.CoreExtensions--schema",
              "id": "org.nuxeo.ecm.core.CoreExtensions--schema",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <documentation>The core schemas</documentation>\n    <!-- XXX AT: prefixes should be set, see NXP-1152 -->\n    <schema name=\"core-types\" src=\"schema/core-types.xsd\"/>\n    <schema name=\"base\" src=\"schema/base.xsd\"/>\n    <schema name=\"relation\" prefix=\"relation\" src=\"schema/relation.xsd\"/>\n    <schema name=\"common\" src=\"schema/common.xsd\"/>\n    <schema name=\"dublincore\" prefix=\"dc\" src=\"schema/dublincore.xsd\"/>\n    <schema name=\"uid\" src=\"schema/uid.xsd\"/>\n    <schema name=\"file\" src=\"schema/file.xsd\"/>\n    <schema name=\"files\" src=\"schema/files.xsd\"/>\n    <schema name=\"note\" src=\"schema/note.xsd\"/>\n    <schema name=\"domain\" src=\"schema/domain.xsd\"/>\n    <schema name=\"relatedtext\" src=\"schema/relatedtext.xsd\"/>\n\n    <schema name=\"publishing\" prefix=\"publish\" src=\"schema/publishing.xsd\"/>\n    <schema name=\"webcontainer\" prefix=\"webc\" src=\"schema/webcontainer.xsd\"/>\n\n    <schema name=\"collection\" prefix=\"collection\" src=\"schema/collection.xsd\"/>\n    <schema isVersionWritable=\"true\" name=\"collectionMember\" prefix=\"collectionMember\" src=\"schema/collectionMember.xsd\"/>\n\n    <property indexOrder=\"ascending\" name=\"documentIds\" schema=\"collection\"/>\n    <property indexOrder=\"ascending\" name=\"collectionIds\" schema=\"collectionMember\"/>\n    <property name=\"created\" schema=\"dublincore\" secured=\"true\"/>\n    <property indexOrder=\"descending\" name=\"modified\" schema=\"dublincore\" secured=\"true\"/>\n    <property name=\"creator\" schema=\"dublincore\" secured=\"true\"/>\n    <property name=\"contributors\" schema=\"dublincore\" secured=\"true\"/>\n    <property name=\"lastContributor\" schema=\"dublincore\" secured=\"true\"/>\n    <!-- Removed since 9.1 -->\n    <property deprecation=\"removed\" name=\"size\" schema=\"common\"/>\n    <property deprecation=\"removed\" fallback=\"content/name\" name=\"filename\" schema=\"file\"/>\n    <property deprecation=\"removed\" fallback=\"files/*/file/name\" name=\"files/*/filename\" schema=\"files\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "The default type manager configuration\n",
              "documentationHtml": "<p>\nThe default type manager configuration</p>",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreExtensions/Contributions/org.nuxeo.ecm.core.CoreExtensions--configuration",
              "id": "org.nuxeo.ecm.core.CoreExtensions--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <documentation>The default type manager configuration</documentation>\n    <configuration>\n      <prefetch>common, dublincore</prefetch>\n      <clearComplexPropertyBeforeSet>true</clearComplexPropertyBeforeSet> <!-- false is DEPRECATED since 9.3 -->\n      <allowVersionWriteForDublinCore>false</allowVersionWriteForDublinCore> <!-- true is DEPRECATED since 10.3 -->\n    </configuration>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "The core document types\n",
              "documentationHtml": "<p>\nThe core document types</p>",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreExtensions/Contributions/org.nuxeo.ecm.core.CoreExtensions--doctype",
              "id": "org.nuxeo.ecm.core.CoreExtensions--doctype",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <documentation>The core document types</documentation>\n\n    <!-- standard facets with no schema -->\n    <facet name=\"Folderish\" perDocumentQuery=\"false\"/> <!-- used by system -->\n    <facet name=\"Orderable\"/> <!-- used by system -->\n    <facet name=\"Versionable\"/> <!-- used by system -->\n    <facet name=\"Downloadable\"/>\n    <facet name=\"Publishable\"/>\n    <facet name=\"PublishSpace\"/>\n    <facet name=\"MasterPublishSpace\"/>\n    <facet name=\"Commentable\"/>\n    <facet name=\"WebView\"/>\n    <facet name=\"SuperSpace\"/>\n    <facet name=\"HiddenInNavigation\" perDocumentQuery=\"false\"/>\n    <facet name=\"SystemDocument\"/>\n    <facet name=\"NotFulltextIndexable\"/>\n    <facet name=\"BigFolder\"/>\n    <facet name=\"HiddenInCreation\" perDocumentQuery=\"false\"/>\n\n    <!-- facet to be used for full-text indexing of related text content\n      (e.g. comments, annotations, tags...) -->\n    <facet name=\"HasRelatedText\">\n      <schema name=\"relatedtext\"/>\n    </facet>\n\n    <facet name=\"Collection\" perDocumentQuery=\"false\">\n      <schema name=\"collection\"/>\n    </facet>\n\n    <facet name=\"NotCollectionMember\" perDocumentQuery=\"false\"/>\n\n    <facet name=\"CollectionMember\">\n      <schema name=\"collectionMember\"/>\n    </facet>\n\n    <proxies>\n      <schema name=\"collectionMember\"/>\n    </proxies>\n\n    <doctype extends=\"Document\" name=\"Folder\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Folderish\"/>\n      <subtypes>\n        <type>Collection</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"OrderedFolder\">\n      <facet name=\"Orderable\"/>\n      <subtypes>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"HiddenFolder\">\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"Root\">\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>Domain</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Relation\"> <!-- no extends -->\n      <schema name=\"relation\"/>\n      <schema name=\"dublincore\"/>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"Domain\">\n      <schema name=\"domain\"/>\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>WorkspaceRoot</type>\n        <type>SectionRoot</type>\n        <type>TemplateRoot</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"WorkspaceRoot\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>Workspace</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"Workspace\">\n      <!-- for logo -->\n      <schema name=\"file\"/>\n      <schema name=\"webcontainer\"/>\n      <schema name=\"publishing\"/>\n      <!-- the content of webcontainer -->\n      <schema name=\"files\"/>\n      <facet name=\"SuperSpace\"/>\n      <subtypes>\n        <type>Collection</type>\n        <type>Workspace</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"TemplateRoot\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>Workspace</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"SectionRoot\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <facet name=\"MasterPublishSpace\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>Section</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"Section\">\n      <!-- for logo -->\n      <schema name=\"file\"/>\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"PublishSpace\"/>\n      <subtypes>\n        <type>Section</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"File\">\n      <schema name=\"common\"/>\n      <schema name=\"file\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <facet name=\"Downloadable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"Note\">\n      <schema name=\"common\"/>\n      <schema name=\"note\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"Collection\">\n      <schema name=\"uid\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Collection\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"common\"/>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"Collections\">\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>Collection</type>\n      </subtypes>\n    </doctype>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreExtensions/Contributions/org.nuxeo.ecm.core.CoreExtensions--listener",
              "id": "org.nuxeo.ecm.core.CoreExtensions--listener",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener class=\"org.nuxeo.ecm.core.model.EmptyNameFixer\" name=\"emptyNameFixer\" priority=\"1000\">\n      <event>aboutToImport</event>\n      <event>aboutToCreate</event>\n      <event>aboutToMove</event>\n    </listener>\n\n    <listener class=\"org.nuxeo.ecm.core.model.DuplicatedNameFixer\" name=\"duplicatedNameFixer\" priority=\"2000\">\n      <event>aboutToImport</event>\n      <event>aboutToCreate</event>\n      <event>aboutToMove</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreExtensions",
          "name": "org.nuxeo.ecm.core.CoreExtensions",
          "requirements": [],
          "resolutionOrder": 84,
          "services": [],
          "startOrder": 111,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.CoreExtensions\" version=\"1.0\">\n\n  <documentation>\n    This component is contributing the core types and schemas and other core extensions.\n\n    @author <a href=\"mailto:bs@nuxeo.com\">Bogdan Stefanescu</a>\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"schema\">\n    <documentation>The core schemas</documentation>\n    <!-- XXX AT: prefixes should be set, see NXP-1152 -->\n    <schema name=\"core-types\" src=\"schema/core-types.xsd\"/>\n    <schema name=\"base\" src=\"schema/base.xsd\"/>\n    <schema name=\"relation\" prefix=\"relation\" src=\"schema/relation.xsd\"/>\n    <schema name=\"common\" src=\"schema/common.xsd\"/>\n    <schema name=\"dublincore\" prefix=\"dc\" src=\"schema/dublincore.xsd\"/>\n    <schema name=\"uid\" src=\"schema/uid.xsd\"/>\n    <schema name=\"file\" src=\"schema/file.xsd\"/>\n    <schema name=\"files\" src=\"schema/files.xsd\"/>\n    <schema name=\"note\" src=\"schema/note.xsd\"/>\n    <schema name=\"domain\" src=\"schema/domain.xsd\"/>\n    <schema name=\"relatedtext\" src=\"schema/relatedtext.xsd\"/>\n\n    <schema name=\"publishing\" prefix=\"publish\" src=\"schema/publishing.xsd\" />\n    <schema name=\"webcontainer\" prefix=\"webc\" src=\"schema/webcontainer.xsd\"/>\n\n    <schema name=\"collection\" src=\"schema/collection.xsd\" prefix=\"collection\" />\n    <schema name=\"collectionMember\" src=\"schema/collectionMember.xsd\"\n      prefix=\"collectionMember\" isVersionWritable=\"true\"/>\n\n    <property schema=\"collection\" name=\"documentIds\" indexOrder=\"ascending\" />\n    <property schema=\"collectionMember\" name=\"collectionIds\" indexOrder=\"ascending\" />\n    <property schema=\"dublincore\" name=\"created\" secured=\"true\" />\n    <property schema=\"dublincore\" name=\"modified\" secured=\"true\" indexOrder=\"descending\" />\n    <property schema=\"dublincore\" name=\"creator\" secured=\"true\" />\n    <property schema=\"dublincore\" name=\"contributors\" secured=\"true\" />\n    <property schema=\"dublincore\" name=\"lastContributor\" secured=\"true\" />\n    <!-- Removed since 9.1 -->\n    <property schema=\"common\" name=\"size\" deprecation=\"removed\" />\n    <property schema=\"file\" name=\"filename\" deprecation=\"removed\" fallback=\"content/name\" />\n    <property schema=\"files\" name=\"files/*/filename\" deprecation=\"removed\" fallback=\"files/*/file/name\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"configuration\">\n    <documentation>The default type manager configuration</documentation>\n    <configuration>\n      <prefetch>common, dublincore</prefetch>\n      <clearComplexPropertyBeforeSet>true</clearComplexPropertyBeforeSet> <!-- false is DEPRECATED since 9.3 -->\n      <allowVersionWriteForDublinCore>false</allowVersionWriteForDublinCore> <!-- true is DEPRECATED since 10.3 -->\n    </configuration>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"doctype\">\n    <documentation>The core document types</documentation>\n\n    <!-- standard facets with no schema -->\n    <facet name=\"Folderish\" perDocumentQuery=\"false\"/> <!-- used by system -->\n    <facet name=\"Orderable\" /> <!-- used by system -->\n    <facet name=\"Versionable\" /> <!-- used by system -->\n    <facet name=\"Downloadable\" />\n    <facet name=\"Publishable\" />\n    <facet name=\"PublishSpace\" />\n    <facet name=\"MasterPublishSpace\" />\n    <facet name=\"Commentable\" />\n    <facet name=\"WebView\" />\n    <facet name=\"SuperSpace\" />\n    <facet name=\"HiddenInNavigation\" perDocumentQuery=\"false\"/>\n    <facet name=\"SystemDocument\" />\n    <facet name=\"NotFulltextIndexable\" />\n    <facet name=\"BigFolder\" />\n    <facet name=\"HiddenInCreation\" perDocumentQuery=\"false\"/>\n\n    <!-- facet to be used for full-text indexing of related text content\n      (e.g. comments, annotations, tags...) -->\n    <facet name=\"HasRelatedText\">\n      <schema name=\"relatedtext\" />\n    </facet>\n\n    <facet name=\"Collection\" perDocumentQuery=\"false\" >\n      <schema name=\"collection\" />\n    </facet>\n\n    <facet name=\"NotCollectionMember\" perDocumentQuery=\"false\"/>\n\n    <facet name=\"CollectionMember\">\n      <schema name=\"collectionMember\" />\n    </facet>\n\n    <proxies>\n      <schema name=\"collectionMember\" />\n    </proxies>\n\n    <doctype name=\"Folder\" extends=\"Document\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Folderish\"/>\n      <subtypes>\n        <type>Collection</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"OrderedFolder\" extends=\"Folder\">\n      <facet name=\"Orderable\"/>\n      <subtypes>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"HiddenFolder\" extends=\"Folder\">\n      <facet name=\"HiddenInNavigation\" />\n    </doctype>\n\n    <doctype name=\"Root\" extends=\"Folder\">\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>Domain</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Relation\"> <!-- no extends -->\n      <schema name=\"relation\"/>\n      <schema name=\"dublincore\"/>\n    </doctype>\n\n    <doctype name=\"Domain\" extends=\"Folder\">\n      <schema name=\"domain\"/>\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>WorkspaceRoot</type>\n        <type>SectionRoot</type>\n        <type>TemplateRoot</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"WorkspaceRoot\" extends=\"Folder\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\" />\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>Workspace</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Workspace\" extends=\"Folder\">\n      <!-- for logo -->\n      <schema name=\"file\"/>\n      <schema name=\"webcontainer\"/>\n      <schema name=\"publishing\"/>\n      <!-- the content of webcontainer -->\n      <schema name=\"files\" />\n      <facet name=\"SuperSpace\"/>\n      <subtypes>\n        <type>Collection</type>\n        <type>Workspace</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <type>File</type>\n        <type>Note</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"TemplateRoot\" extends=\"Folder\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\" />\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>Workspace</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"SectionRoot\" extends=\"Folder\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\" />\n      <facet name=\"MasterPublishSpace\" />\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>Section</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Section\" extends=\"Folder\">\n      <!-- for logo -->\n      <schema name=\"file\"/>\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"PublishSpace\" />\n      <subtypes>\n        <type>Section</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"File\" extends=\"Document\">\n      <schema name=\"common\"/>\n      <schema name=\"file\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <facet name=\"Downloadable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n    </doctype>\n\n    <doctype name=\"Note\" extends=\"Document\">\n      <schema name=\"common\"/>\n      <schema name=\"note\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Publishable\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HasRelatedText\"/>\n    </doctype>\n\n    <doctype name=\"Collection\" extends=\"Document\">\n      <schema name=\"uid\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Collection\" />\n      <facet name=\"NotCollectionMember\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"common\" />\n    </doctype>\n\n    <doctype name=\"Collections\" extends=\"Folder\">\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>Collection</type>\n      </subtypes>\n    </doctype>\n\n  </extension>\n\n   <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <listener name=\"emptyNameFixer\"\n        class=\"org.nuxeo.ecm.core.model.EmptyNameFixer\" priority=\"1000\">\n      <event>aboutToImport</event>\n      <event>aboutToCreate</event>\n      <event>aboutToMove</event>\n    </listener>\n\n    <listener name=\"duplicatedNameFixer\"\n        class=\"org.nuxeo.ecm.core.model.DuplicatedNameFixer\" priority=\"2000\">\n      <event>aboutToImport</event>\n      <event>aboutToCreate</event>\n      <event>aboutToMove</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/CoreExtensions.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.lifecycle.impl.LifeCycleServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n\n    Service that deals with life cycle.\n\n    @version 1.0\n    @author <a href=\"mailto:ja@nuxeo.com\">Julien Anguenot</a>\n",
          "documentationHtml": "<p>\nService that deals with life cycle.\n</p><p>\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
              "descriptors": [
                "org.nuxeo.ecm.core.lifecycle.extensions.LifeCycleDescriptor"
              ],
              "documentation": "\n      Extension point for registering life cycle definition.\n      <p/>\n\n      A life cycle is a state-transition model described as an XML document.\n      <p/>\n\n      A life cycle within Nuxeo Core describes only the states and the\n      transitions without any security policy whatsoever. For instance, the\n      workflow service (or BPM service) will be responsible of the security\n      policy and actors involved.\n    \n",
              "documentationHtml": "<p>\nExtension point for registering life cycle definition.\n</p><p>\nA life cycle is a state-transition model described as an XML document.\n</p><p>\nA life cycle within Nuxeo Core describes only the states and the\ntransitions without any security policy whatsoever. For instance, the\nworkflow service (or BPM service) will be responsible of the security\npolicy and actors involved.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.lifecycle.LifeCycleService/ExtensionPoints/org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "id": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "label": "lifecycle (org.nuxeo.ecm.core.lifecycle.LifeCycleService)",
              "name": "lifecycle",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
              "descriptors": [
                "org.nuxeo.ecm.core.lifecycle.extensions.LifeCycleTypesDescriptor"
              ],
              "documentation": "\n      Extension point for registering document type to life cycle mappings.\n      <p/>\n\n      For instance, you can specify that a document type <i>File</i>\n will follow a <i>default</i>\n\n      life cycle where <i>default</i>\n is the name of a registered life cycle.\n    \n",
              "documentationHtml": "<p>\nExtension point for registering document type to life cycle mappings.\n</p><p>\nFor instance, you can specify that a document type <i>File</i>\nwill follow a <i>default</i>\n</p><p>\nlife cycle where <i>default</i>\nis the name of a registered life cycle.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.lifecycle.LifeCycleService/ExtensionPoints/org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "id": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "label": "types (org.nuxeo.ecm.core.lifecycle.LifeCycleService)",
              "name": "types",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.lifecycle.LifeCycleService",
          "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
          "requirements": [],
          "resolutionOrder": 88,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.lifecycle.LifeCycleService/Services/org.nuxeo.ecm.core.lifecycle.LifeCycleService",
              "id": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 808,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n  <documentation>\n    Service that deals with life cycle.\n\n    @version 1.0\n    @author <a href=\"mailto:ja@nuxeo.com\">Julien Anguenot</a>\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.lifecycle.impl.LifeCycleServiceImpl\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" />\n  </service>\n\n  <extension-point name=\"lifecycle\">\n\n    <documentation>\n      Extension point for registering life cycle definition.\n      <p/>\n      A life cycle is a state-transition model described as an XML document.\n      <p/>\n      A life cycle within Nuxeo Core describes only the states and the\n      transitions without any security policy whatsoever. For instance, the\n      workflow service (or BPM service) will be responsible of the security\n      policy and actors involved.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.lifecycle.extensions.LifeCycleDescriptor\"/>\n\n  </extension-point>\n\n  <extension-point name=\"types\">\n\n    <documentation>\n      Extension point for registering document type to life cycle mappings.\n      <p/>\n      For instance, you can specify that a document type <i>File</i> will follow a <i>default</i>\n      life cycle where <i>default</i> is the name of a registered life cycle.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.lifecycle.extensions.LifeCycleTypesDescriptor\"/>\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/LifeCycleService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n\n    Nuxeo core life cycle contributions.\n\n    @version 1.0\n    @author <a href=\"mailto:ja@nuxeo.com\">Julien Anguenot</a>\n",
          "documentationHtml": "<p>\nNuxeo core life cycle contributions.\n</p><p>\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "Nuxeo core default life cycle definition.\n",
              "documentationHtml": "<p>\nNuxeo core default life cycle definition.</p>",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.LifecycleCoreExtensions/Contributions/org.nuxeo.ecm.core.LifecycleCoreExtensions--lifecycle",
              "id": "org.nuxeo.ecm.core.LifecycleCoreExtensions--lifecycle",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"lifecycle\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n    <documentation>Nuxeo core default life cycle definition.</documentation>\n\n    <lifecycle defaultInitial=\"project\" name=\"default\">\n      <transitions>\n        <transition destinationState=\"approved\" name=\"approve\">\n          <description>Approve the content</description>\n        </transition>\n        <transition destinationState=\"obsolete\" name=\"obsolete\">\n          <description>Content becomes obsolete</description>\n        </transition>\n        <transition destinationState=\"deleted\" name=\"delete\">\n          <description>Move document to trash (temporary delete)</description>\n        </transition>\n        <transition destinationState=\"project\" name=\"undelete\">\n          <description>Recover the document from trash</description>\n        </transition>\n        <transition destinationState=\"project\" name=\"backToProject\">\n          <description>Recover the document from trash</description>\n        </transition>\n      </transitions>\n      <states>\n        <state description=\"Default state\" initial=\"true\" name=\"project\">\n          <transitions>\n            <transition>approve</transition>\n            <transition>obsolete</transition>\n            <transition>delete</transition>\n          </transitions>\n        </state>\n        <state description=\"Content has been validated\" name=\"approved\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state description=\"Content is obsolete\" name=\"obsolete\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state description=\"Document is deleted\" name=\"deleted\">\n          <transitions>\n            <transition>undelete</transition>\n          </transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Nuxeo core default document types to life cycles mapping\n    \n",
              "documentationHtml": "<p>\nNuxeo core default document types to life cycles mapping\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.LifecycleCoreExtensions/Contributions/org.nuxeo.ecm.core.LifecycleCoreExtensions--types",
              "id": "org.nuxeo.ecm.core.LifecycleCoreExtensions--types",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n    <documentation>\n      Nuxeo core default document types to life cycles mapping\n    </documentation>\n\n    <types>\n      <type name=\"File\">default</type>\n      <type name=\"Note\">default</type>\n      <type name=\"Calendar\">default</type>\n      <type name=\"Folder\">default</type>\n      <type name=\"OrderedFolder\">default</type>\n      <type name=\"Workspace\">default</type>\n      <type name=\"Domain\">default</type>\n      <type name=\"Root\">default</type>\n      <type name=\"Section\">default</type>\n      <type name=\"WorkspaceRoot\">default</type>\n      <type name=\"SectionRoot\">default</type>\n      <type name=\"TemplateRoot\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.LifecycleCoreExtensions",
          "name": "org.nuxeo.ecm.core.LifecycleCoreExtensions",
          "requirements": [],
          "resolutionOrder": 89,
          "services": [],
          "startOrder": 113,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.LifecycleCoreExtensions\">\n\n  <documentation>\n    Nuxeo core life cycle contributions.\n\n    @version 1.0\n    @author <a href=\"mailto:ja@nuxeo.com\">Julien Anguenot</a>\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"lifecycle\">\n\n    <documentation>Nuxeo core default life cycle definition.</documentation>\n\n    <lifecycle name=\"default\" defaultInitial=\"project\">\n      <transitions>\n        <transition name=\"approve\" destinationState=\"approved\">\n          <description>Approve the content</description>\n        </transition>\n        <transition name=\"obsolete\" destinationState=\"obsolete\">\n          <description>Content becomes obsolete</description>\n        </transition>\n        <transition name=\"delete\" destinationState=\"deleted\">\n          <description>Move document to trash (temporary delete)</description>\n        </transition>\n        <transition name=\"undelete\" destinationState=\"project\">\n          <description>Recover the document from trash</description>\n        </transition>\n        <transition name=\"backToProject\" destinationState=\"project\">\n          <description>Recover the document from trash</description>\n        </transition>\n      </transitions>\n      <states>\n        <state name=\"project\" description=\"Default state\" initial=\"true\">\n          <transitions>\n            <transition>approve</transition>\n            <transition>obsolete</transition>\n            <transition>delete</transition>\n          </transitions>\n        </state>\n        <state name=\"approved\" description=\"Content has been validated\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state name=\"obsolete\" description=\"Content is obsolete\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state name=\"deleted\" description=\"Document is deleted\">\n          <transitions>\n            <transition>undelete</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\n    <documentation>\n      Nuxeo core default document types to life cycles mapping\n    </documentation>\n\n    <types>\n      <type name=\"File\">default</type>\n      <type name=\"Note\">default</type>\n      <type name=\"Calendar\">default</type>\n      <type name=\"Folder\">default</type>\n      <type name=\"OrderedFolder\">default</type>\n      <type name=\"Workspace\">default</type>\n      <type name=\"Domain\">default</type>\n      <type name=\"Root\">default</type>\n      <type name=\"Section\">default</type>\n      <type name=\"WorkspaceRoot\">default</type>\n      <type name=\"SectionRoot\">default</type>\n      <type name=\"TemplateRoot\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/LifeCycleCoreExtensions.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Listener for life cycle change events.\n\n      If event occurs on a folder, it will recurse on children to perform the\n      same transition if possible.\n\n      If the transition event is about marking documents as \"deleted\", and a\n      child cannot perform the transition, it will be removed.\n\n      Undelete transitions are not recursed on the children, however a special\n      documentUndeleted event has the same role and is processed by this listener.\n    \n",
              "documentationHtml": "<p>\nListener for life cycle change events.\n</p><p>\nIf event occurs on a folder, it will recurse on children to perform the\nsame transition if possible.\n</p><p>\nIf the transition event is about marking documents as &#34;deleted&#34;, and a\nchild cannot perform the transition, it will be removed.\n</p><p>\nUndelete transitions are not recursed on the children, however a special\ndocumentUndeleted event has the same role and is processed by this listener.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.event.lifecycle.listener/Contributions/org.nuxeo.ecm.core.event.lifecycle.listener--listener",
              "id": "org.nuxeo.ecm.core.event.lifecycle.listener--listener",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <documentation>\n      Listener for life cycle change events.\n\n      If event occurs on a folder, it will recurse on children to perform the\n      same transition if possible.\n\n      If the transition event is about marking documents as \"deleted\", and a\n      child cannot perform the transition, it will be removed.\n\n      Undelete transitions are not recursed on the children, however a special\n      documentUndeleted event has the same role and is processed by this listener.\n    </documentation>\n    <listener async=\"true\" class=\"org.nuxeo.ecm.core.lifecycle.event.BulkLifeCycleChangeListener\" name=\"bulkLifeCycleChangeListener\" postCommit=\"true\">\n      <event>lifecycle_transition_event</event>\n      <event>documentUndeleted</event>\n      <event>documentCreatedByCopy</event>\n    </listener>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      If true listener will recursive on children of document by paginate them.\n      <p/>\n\n      Default behavior is to fetch all children once.\n\n      @since 8.10-HF05, 9.2\n    \n",
              "documentationHtml": "<p>\nIf true listener will recursive on children of document by paginate them.\n</p><p>\nDefault behavior is to fetch all children once.\n</p><p>\n&#64;since 8.10-HF05, 9.2\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.event.lifecycle.listener/Contributions/org.nuxeo.ecm.core.event.lifecycle.listener--configuration",
              "id": "org.nuxeo.ecm.core.event.lifecycle.listener--configuration",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      If true listener will recursive on children of document by paginate them.\n      <p/>\n      Default behavior is to fetch all children once.\n\n      @since 8.10-HF05, 9.2\n    </documentation>\n    <property name=\"nuxeo.bulkLifeCycleChangeListener.paginate-get-children\">false</property>\n\n    <documentation>\n      If \"nuxeo.bulkLifeCycleChangeListener.paginate-get-children\" is true, this property set the page size for get\n      children calls.\n\n      @since 8.10-HF05, 9.2\n    </documentation>\n    <property name=\"nuxeo.bulkLifeCycleChangeListener.get-children-page-size\">500</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.event.lifecycle.listener",
          "name": "org.nuxeo.ecm.core.event.lifecycle.listener",
          "requirements": [],
          "resolutionOrder": 90,
          "services": [],
          "startOrder": 135,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.event.lifecycle.listener\"\n  version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <documentation>\n      Listener for life cycle change events.\n\n      If event occurs on a folder, it will recurse on children to perform the\n      same transition if possible.\n\n      If the transition event is about marking documents as \"deleted\", and a\n      child cannot perform the transition, it will be removed.\n\n      Undelete transitions are not recursed on the children, however a special\n      documentUndeleted event has the same role and is processed by this listener.\n    </documentation>\n    <listener name=\"bulkLifeCycleChangeListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.core.lifecycle.event.BulkLifeCycleChangeListener\">\n      <event>lifecycle_transition_event</event>\n      <event>documentUndeleted</event>\n      <event>documentCreatedByCopy</event>\n    </listener>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      If true listener will recursive on children of document by paginate them.\n      <p />\n      Default behavior is to fetch all children once.\n\n      @since 8.10-HF05, 9.2\n    </documentation>\n    <property name=\"nuxeo.bulkLifeCycleChangeListener.paginate-get-children\">false</property>\n\n    <documentation>\n      If \"nuxeo.bulkLifeCycleChangeListener.paginate-get-children\" is true, this property set the page size for get\n      children calls.\n\n      @since 8.10-HF05, 9.2\n    </documentation>\n    <property name=\"nuxeo.bulkLifeCycleChangeListener.get-children-page-size\">500</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/lifecycle-listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.security.SecurityService",
          "declaredStartOrder": null,
          "documentation": "\n    The security service is responsible to check the permission on a\n    repository. Permission check will be usually forwarded to the\n    security manager defined on the repository. This may change later.\n    <p/>\n\n    It holds a permission provider that defines the list of available permission\n    names and how they are combined into groups of permissions.\n    <p/>\n\n    It also defines which permissions are high level permissions that are to be\n    managed through the end user interface and in which order they should be\n    display in management menus.\n    <p/>\n\n\n    It also holds a security policy service that can stack custom policies.\n    These policies can override default permission checks based on acls set on\n    the document and/or its parents.\n\n    @author <a href=\"mailto:bs@nuxeo.com\">Bogdan Stefanescu</a>\n\n    @author <a href=\"mailto:og@nuxeo.com\">Olivier Grisel</a>\n\n    @author <a href=\"mailto:at@nuxeo.com\">Anahide Tchertchian</a>\n",
          "documentationHtml": "<p>\nThe security service is responsible to check the permission on a\nrepository. Permission check will be usually forwarded to the\nsecurity manager defined on the repository. This may change later.\n</p><p>\nIt holds a permission provider that defines the list of available permission\nnames and how they are combined into groups of permissions.\n</p><p>\nIt also defines which permissions are high level permissions that are to be\nmanaged through the end user interface and in which order they should be\ndisplay in management menus.\n</p><p>\nIt also holds a security policy service that can stack custom policies.\nThese policies can override default permission checks based on acls set on\nthe document and/or its parents.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "descriptors": [
                "org.nuxeo.ecm.core.security.PermissionDescriptor"
              ],
              "documentation": "\n      Extension point to register permission definitions or override\n      existing permissions.\n      <p/>\n\n\n      Example to define a single atomic permissions that are not meant\n      to be displayed in the rights management screen of folders:\n      <code>\n    <permission name=\"Browse\"/>\n    <permission name=\"ReadVersion\"/>\n    <permission name=\"ReadProperties\"/>\n    <permission name=\"ReadChildren\"/>\n    <permission name=\"ReadLifeCycle\"/>\n    <permission name=\"ReviewParticipant\"/>\n</code>\n<p/>\n\n\n      Example to define a compound permission that holds many related\n      atomic permissions into a single high level (role-like)\n      permission:\n      <code>\n    <permission name=\"Read\">\n        <include>Browse</include>\n        <include>ReadVersion</include>\n        <include>ReadProperties</include>\n        <include>ReadChildren</include>\n        <include>ReadLifeCycle</include>\n        <include>ReviewParticipant</include>\n    </permission>\n</code>\n\n\n      Note that each of the included permissions should have been\n      previously registered with their on &lt;permission/&gt;\n      declaration.\n\n      <p/>\n\n\n      It is later possible to override that definition in another\n      contribution to that extension-point to add a new permission\n      'CustomPerm' and remove 'ReviewParticipant':\n      <code>\n    <permission name=\"CustomPerm\"/>\n    <permission name=\"Read\">\n        <include>CustomPerm</include>\n        <remove>ReviewParticipant</remove>\n    </permission>\n</code>\n<p/>\n\n\n      Eventually the permissions declaration also accept 'alias' tags to\n      handle backward compatibility with deprecated permissions:\n      <code>\n    <permission name=\"ReadVersion\">\n        <documentation>\n            The Version permission is deprecated since its name is ambiguous,\n            use ReadPermission instead.\n          </documentation>\n        <alias>Version</alias>\n    </permission>\n</code>\n\n\n      NB: the alias feature is parsed by the extension point but the\n      underlying SecurityManager implementation does not leverage it\n      yet.\n\n    \n",
              "documentationHtml": "<p>\nExtension point to register permission definitions or override\nexisting permissions.\n</p><p>\nExample to define a single atomic permissions that are not meant\nto be displayed in the rights management screen of folders:\n</p><p></p><pre><code>    &lt;permission name&#61;&#34;Browse&#34;/&gt;\n    &lt;permission name&#61;&#34;ReadVersion&#34;/&gt;\n    &lt;permission name&#61;&#34;ReadProperties&#34;/&gt;\n    &lt;permission name&#61;&#34;ReadChildren&#34;/&gt;\n    &lt;permission name&#61;&#34;ReadLifeCycle&#34;/&gt;\n    &lt;permission name&#61;&#34;ReviewParticipant&#34;/&gt;\n</code></pre><p>\nExample to define a compound permission that holds many related\natomic permissions into a single high level (role-like)\npermission:\n</p><p></p><pre><code>    &lt;permission name&#61;&#34;Read&#34;&gt;\n        &lt;include&gt;Browse&lt;/include&gt;\n        &lt;include&gt;ReadVersion&lt;/include&gt;\n        &lt;include&gt;ReadProperties&lt;/include&gt;\n        &lt;include&gt;ReadChildren&lt;/include&gt;\n        &lt;include&gt;ReadLifeCycle&lt;/include&gt;\n        &lt;include&gt;ReviewParticipant&lt;/include&gt;\n    &lt;/permission&gt;\n</code></pre><p>\nNote that each of the included permissions should have been\npreviously registered with their on &lt;permission/&gt;\ndeclaration.\n</p><p>\nIt is later possible to override that definition in another\ncontribution to that extension-point to add a new permission\n&#39;CustomPerm&#39; and remove &#39;ReviewParticipant&#39;:\n</p><p></p><pre><code>    &lt;permission name&#61;&#34;CustomPerm&#34;/&gt;\n    &lt;permission name&#61;&#34;Read&#34;&gt;\n        &lt;include&gt;CustomPerm&lt;/include&gt;\n        &lt;remove&gt;ReviewParticipant&lt;/remove&gt;\n    &lt;/permission&gt;\n</code></pre><p>\nEventually the permissions declaration also accept &#39;alias&#39; tags to\nhandle backward compatibility with deprecated permissions:\n</p><p></p><pre><code>    &lt;permission name&#61;&#34;ReadVersion&#34;&gt;\n        &lt;documentation&gt;\n            The Version permission is deprecated since its name is ambiguous,\n            use ReadPermission instead.\n          &lt;/documentation&gt;\n        &lt;alias&gt;Version&lt;/alias&gt;\n    &lt;/permission&gt;\n</code></pre><p>\nNB: the alias feature is parsed by the extension point but the\nunderlying SecurityManager implementation does not leverage it\nyet.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/ExtensionPoints/org.nuxeo.ecm.core.security.SecurityService--permissions",
              "id": "org.nuxeo.ecm.core.security.SecurityService--permissions",
              "label": "permissions (org.nuxeo.ecm.core.security.SecurityService)",
              "name": "permissions",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "descriptors": [
                "org.nuxeo.ecm.core.security.PermissionVisibilityDescriptor"
              ],
              "documentation": "\n      Extension point to register permission visibility in user\n      interface or override existing settings.\n      <p/>\n\n\n      Example to define the default list of permissions that are\n      manageable through the UI screens:\n      <code>\n    <visibility>\n        <item order=\"10\" show=\"true\">Read</item>\n        <item order=\"50\" show=\"true\">ReadWrite</item>\n        <item order=\"100\" show=\"true\">Everything</item>\n    </visibility>\n</code>\n\n\n      This list of options items will be displayed if no type specific\n      settings are registered.\n\n      <p/>\n\n      Example to define the default list of permissions that are\n      specific to the Section document type:\n      <code>\n    <visibility type=\"Section\">\n        <item order=\"10\" show=\"true\">Read</item>\n        <item order=\"100\" show=\"true\">Everything</item>\n    </visibility>\n</code>\n\n\n      Note: the 'show' attribute defaults to 'true' and the 'order'\n      attribute defaults to '0'.\n\n    \n",
              "documentationHtml": "<p>\nExtension point to register permission visibility in user\ninterface or override existing settings.\n</p><p>\nExample to define the default list of permissions that are\nmanageable through the UI screens:\n</p><p></p><pre><code>    &lt;visibility&gt;\n        &lt;item order&#61;&#34;10&#34; show&#61;&#34;true&#34;&gt;Read&lt;/item&gt;\n        &lt;item order&#61;&#34;50&#34; show&#61;&#34;true&#34;&gt;ReadWrite&lt;/item&gt;\n        &lt;item order&#61;&#34;100&#34; show&#61;&#34;true&#34;&gt;Everything&lt;/item&gt;\n    &lt;/visibility&gt;\n</code></pre><p>\nThis list of options items will be displayed if no type specific\nsettings are registered.\n</p><p>\nExample to define the default list of permissions that are\nspecific to the Section document type:\n</p><p></p><pre><code>    &lt;visibility type&#61;&#34;Section&#34;&gt;\n        &lt;item order&#61;&#34;10&#34; show&#61;&#34;true&#34;&gt;Read&lt;/item&gt;\n        &lt;item order&#61;&#34;100&#34; show&#61;&#34;true&#34;&gt;Everything&lt;/item&gt;\n    &lt;/visibility&gt;\n</code></pre><p>\nNote: the &#39;show&#39; attribute defaults to &#39;true&#39; and the &#39;order&#39;\nattribute defaults to &#39;0&#39;.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/ExtensionPoints/org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "id": "org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "label": "permissionsVisibility (org.nuxeo.ecm.core.security.SecurityService)",
              "name": "permissionsVisibility",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "descriptors": [
                "org.nuxeo.ecm.core.security.SecurityPolicyDescriptor"
              ],
              "documentation": "\n      Extension point to register custom security policies or override existing\n      policies.\n      <p/>\n\n\n      Policies are checked in the order they are defined. They can grant or deny\n      access, in case following policies - as well as the default security check\n      relying on the acp set on the document - will be ignored. They can also\n      return an undefined access, in case following policy checks will continue.\n\n      <p/>\n\n\n      Example to define a custom policy :\n      <code>\n    <policy class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\"\n        name=\"lock\" order=\"10\"/>\n</code>\n\n\n      The class used has to implement the\n      org.nuxeo.ecm.core.security.SecurityPolicy interface.\n\n      <p/>\n\n\n      It is later possible to override that definition in another contribution\n      to that extension-point to disable or override a policy:\n      <code>\n    <policy enabled=\"false\" name=\"lock\"/>\n    <policy class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\"\n        name=\"lock\" order=\"20\"/>\n</code>\n<p/>\n\n\n      @author <a href=\"mailto:at@nuxeo.com\">Anahide Tchertchian</a>\n",
              "documentationHtml": "<p>\nExtension point to register custom security policies or override existing\npolicies.\n</p><p>\nPolicies are checked in the order they are defined. They can grant or deny\naccess, in case following policies - as well as the default security check\nrelying on the acp set on the document - will be ignored. They can also\nreturn an undefined access, in case following policy checks will continue.\n</p><p>\nExample to define a custom policy :\n</p><p></p><pre><code>    &lt;policy class&#61;&#34;org.nuxeo.ecm.core.security.LockSecurityPolicy&#34;\n        name&#61;&#34;lock&#34; order&#61;&#34;10&#34;/&gt;\n</code></pre><p>\nThe class used has to implement the\norg.nuxeo.ecm.core.security.SecurityPolicy interface.\n</p><p>\nIt is later possible to override that definition in another contribution\nto that extension-point to disable or override a policy:\n</p><p></p><pre><code>    &lt;policy enabled&#61;&#34;false&#34; name&#61;&#34;lock&#34;/&gt;\n    &lt;policy class&#61;&#34;org.nuxeo.ecm.core.security.LockSecurityPolicy&#34;\n        name&#61;&#34;lock&#34; order&#61;&#34;20&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/ExtensionPoints/org.nuxeo.ecm.core.security.SecurityService--policies",
              "id": "org.nuxeo.ecm.core.security.SecurityService--policies",
              "label": "policies (org.nuxeo.ecm.core.security.SecurityService)",
              "name": "policies",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService",
          "name": "org.nuxeo.ecm.core.security.SecurityService",
          "requirements": [],
          "resolutionOrder": 91,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/Services/org.nuxeo.ecm.core.security.SecurityService",
              "id": "org.nuxeo.ecm.core.security.SecurityService",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/Services/org.nuxeo.ecm.core.api.security.PermissionProvider",
              "id": "org.nuxeo.ecm.core.api.security.PermissionProvider",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.security.SecurityService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.SecurityService/Services/org.nuxeo.ecm.core.security.SecurityPolicyService",
              "id": "org.nuxeo.ecm.core.security.SecurityPolicyService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 817,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.security.SecurityService\"\n  version=\"1.0\">\n\n  <implementation class=\"org.nuxeo.ecm.core.security.SecurityService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.security.SecurityService\" />\n    <provide interface=\"org.nuxeo.ecm.core.api.security.PermissionProvider\" />\n    <provide interface=\"org.nuxeo.ecm.core.security.SecurityPolicyService\" />\n  </service>\n\n  <documentation>\n    The security service is responsible to check the permission on a\n    repository. Permission check will be usually forwarded to the\n    security manager defined on the repository. This may change later.\n    <p />\n    It holds a permission provider that defines the list of available permission\n    names and how they are combined into groups of permissions.\n    <p />\n    It also defines which permissions are high level permissions that are to be\n    managed through the end user interface and in which order they should be\n    display in management menus.\n    <p />\n    It also holds a security policy service that can stack custom policies.\n    These policies can override default permission checks based on acls set on\n    the document and/or its parents.\n\n    @author <a href=\"mailto:bs@nuxeo.com\">Bogdan Stefanescu</a>\n    @author <a href=\"mailto:og@nuxeo.com\">Olivier Grisel</a>\n    @author <a href=\"mailto:at@nuxeo.com\">Anahide Tchertchian</a>\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.security.SecurityService\" />\n\n  <extension-point name=\"permissions\">\n\n    <documentation>\n      Extension point to register permission definitions or override\n      existing permissions.\n      <p />\n\n      Example to define a single atomic permissions that are not meant\n      to be displayed in the rights management screen of folders:\n      <code>\n        <permission name=\"Browse\" />\n        <permission name=\"ReadVersion\" />\n        <permission name=\"ReadProperties\" />\n        <permission name=\"ReadChildren\" />\n        <permission name=\"ReadLifeCycle\" />\n        <permission name=\"ReviewParticipant\" />\n      </code>\n\n      <p />\n\n      Example to define a compound permission that holds many related\n      atomic permissions into a single high level (role-like)\n      permission:\n      <code>\n        <permission name=\"Read\">\n          <include>Browse</include>\n          <include>ReadVersion</include>\n          <include>ReadProperties</include>\n          <include>ReadChildren</include>\n          <include>ReadLifeCycle</include>\n          <include>ReviewParticipant</include>\n        </permission>\n      </code>\n\n      Note that each of the included permissions should have been\n      previously registered with their on &lt;permission/&gt;\n      declaration.\n\n      <p />\n\n      It is later possible to override that definition in another\n      contribution to that extension-point to add a new permission\n      'CustomPerm' and remove 'ReviewParticipant':\n      <code>\n        <permission name=\"CustomPerm\" />\n\n        <permission name=\"Read\">\n          <include>CustomPerm</include>\n          <remove>ReviewParticipant</remove>\n        </permission>\n      </code>\n\n      <p />\n\n      Eventually the permissions declaration also accept 'alias' tags to\n      handle backward compatibility with deprecated permissions:\n      <code>\n        <permission name=\"ReadVersion\">\n          <documentation>\n            The Version permission is deprecated since its name is ambiguous,\n            use ReadPermission instead.\n          </documentation>\n          <alias>Version</alias>\n        </permission>\n      </code>\n\n      NB: the alias feature is parsed by the extension point but the\n      underlying SecurityManager implementation does not leverage it\n      yet.\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.security.PermissionDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"permissionsVisibility\">\n\n    <documentation>\n      Extension point to register permission visibility in user\n      interface or override existing settings.\n      <p />\n\n      Example to define the default list of permissions that are\n      manageable through the UI screens:\n      <code>\n        <visibility>\n          <item show=\"true\" order=\"10\">Read</item>\n          <item show=\"true\" order=\"50\">ReadWrite</item>\n          <item show=\"true\" order=\"100\">Everything</item>\n        </visibility>\n      </code>\n\n      This list of options items will be displayed if no type specific\n      settings are registered.\n\n      <p />\n      Example to define the default list of permissions that are\n      specific to the Section document type:\n      <code>\n        <visibility type=\"Section\">\n          <item show=\"true\" order=\"10\">Read</item>\n          <item show=\"true\" order=\"100\">Everything</item>\n        </visibility>\n      </code>\n\n      Note: the 'show' attribute defaults to 'true' and the 'order'\n      attribute defaults to '0'.\n\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.core.security.PermissionVisibilityDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"policies\">\n\n    <documentation>\n      Extension point to register custom security policies or override existing\n      policies.\n      <p />\n\n      Policies are checked in the order they are defined. They can grant or deny\n      access, in case following policies - as well as the default security check\n      relying on the acp set on the document - will be ignored. They can also\n      return an undefined access, in case following policy checks will continue.\n\n      <p />\n\n      Example to define a custom policy :\n      <code>\n        <policy name=\"lock\"\n          class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\" order=\"10\" />\n      </code>\n\n      The class used has to implement the\n      org.nuxeo.ecm.core.security.SecurityPolicy interface.\n\n      <p />\n\n      It is later possible to override that definition in another contribution\n      to that extension-point to disable or override a policy:\n      <code>\n        <policy name=\"lock\" enabled=\"false\" />\n\n        <policy name=\"lock\"\n          class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\" order=\"20\" />\n      </code>\n\n      <p />\n\n      @author <a href=\"mailto:at@nuxeo.com\">Anahide Tchertchian</a>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.security.SecurityPolicyDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/SecurityService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n\n    Default permissions (atomic and compound) used by the core. If you\n    edit this file, please update the specification file:\n    doc/NXCore-Security.txt in core module\n\n    @author <a href=\"mailto:og@nuxeo.com\">Olivier Grisel</a>\n",
          "documentationHtml": "<p>\nDefault permissions (atomic and compound) used by the core. If you\nedit this file, please update the specification file:\ndoc/NXCore-Security.txt in core module\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.defaultPermissions/Contributions/org.nuxeo.ecm.core.security.defaultPermissions--permissions",
              "id": "org.nuxeo.ecm.core.security.defaultPermissions--permissions",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"permissions\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <permission name=\"Browse\"/>\n    <permission name=\"ReadProperties\">\n      <include>Browse</include>\n    </permission>\n    <permission name=\"ReadChildren\"/>\n    <permission name=\"ReadLifeCycle\"/>\n    <permission name=\"ReviewParticipant\"/>\n    <permission name=\"ReadSecurity\"/>\n\n    <permission name=\"WriteProperties\"/>\n    <permission name=\"ReadVersion\"/>\n\n    <permission name=\"WriteVersion\">\n       <include>WriteProperties</include>\n    </permission>\n\n    <permission name=\"Version\">\n       <include>ReadVersion</include>\n       <include>WriteVersion</include>\n    </permission>\n\n    <permission name=\"Read\">\n      <include>Browse</include>\n      <include>ReadVersion</include>\n      <include>ReadProperties</include>\n      <include>ReadChildren</include>\n      <include>ReadLifeCycle</include>\n      <include>ReadSecurity</include>\n      <include>ReviewParticipant</include>\n    </permission>\n\n    <permission name=\"AddChildren\"/>\n    <permission name=\"RemoveChildren\"/>\n    <permission name=\"Remove\"/>\n    <permission name=\"ManageWorkflows\"/>\n    <permission name=\"WriteLifeCycle\"/>\n    <permission name=\"Unlock\"/>\n\n    <permission name=\"Remove\">\n      <documentation>\n        NXP-10929: necessary to follow the \"delete\" transition when Trash is enabled: include WriteLifeCycle\n      </documentation>\n      <include>RemoveChildren</include>\n      <include>WriteLifeCycle</include>\n    </permission>\n\n    <permission name=\"ReadRemove\">\n      <include>Read</include>\n      <include>Remove</include>\n    </permission>\n\n    <permission name=\"Write\">\n      <include>AddChildren</include>\n      <include>WriteProperties</include>\n      <include>Remove</include>\n      <include>ManageWorkflows</include>\n      <include>WriteLifeCycle</include>\n      <include>WriteVersion</include>\n    </permission>\n\n    <permission name=\"ReadWrite\">\n      <include>Read</include>\n      <include>Write</include>\n    </permission>\n\n    <permission name=\"WriteSecurity\"/>\n\n    <permission name=\"Everything\">\n      <documentation>\n        Special permission given to administrators: god-level access\n      </documentation>\n    </permission>\n\n    <permission name=\"RestrictedRead\">\n      <documentation>\n        Deprecated - was used only for a single customer project before pluggable permission definitions\n      </documentation>\n    </permission>\n\n    <permission name=\"MakeRecord\"/>\n    <permission name=\"SetRetention\"/>\n    <permission name=\"ManageLegalHold\"/>\n    <!-- Only for flexible records -->\n    <permission name=\"UnsetRetention\"/>\n\n    <permission name=\"WriteColdStorage\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.defaultPermissions/Contributions/org.nuxeo.ecm.core.security.defaultPermissions--permissionsVisibility",
              "id": "org.nuxeo.ecm.core.security.defaultPermissions--permissionsVisibility",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"permissionsVisibility\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <visibility>\n      <item order=\"10\" show=\"true\">Read</item>\n      <item denyPermission=\"Write\" order=\"50\" show=\"true\">ReadWrite</item>\n      <item order=\"100\" show=\"true\">Everything</item>\n    </visibility>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.defaultPermissions",
          "name": "org.nuxeo.ecm.core.security.defaultPermissions",
          "requirements": [],
          "resolutionOrder": 92,
          "services": [],
          "startOrder": 158,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.security.defaultPermissions\">\n  <documentation>\n    Default permissions (atomic and compound) used by the core. If you\n    edit this file, please update the specification file:\n    doc/NXCore-Security.txt in core module\n\n    @author <a href=\"mailto:og@nuxeo.com\">Olivier Grisel</a>\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissions\">\n\n    <permission name=\"Browse\" />\n    <permission name=\"ReadProperties\">\n      <include>Browse</include>\n    </permission>\n    <permission name=\"ReadChildren\" />\n    <permission name=\"ReadLifeCycle\" />\n    <permission name=\"ReviewParticipant\" />\n    <permission name=\"ReadSecurity\" />\n\n    <permission name=\"WriteProperties\" />\n    <permission name=\"ReadVersion\"/>\n\n    <permission name=\"WriteVersion\" >\n       <include>WriteProperties</include>\n    </permission>\n\n    <permission name=\"Version\" >\n       <include>ReadVersion</include>\n       <include>WriteVersion</include>\n    </permission>\n\n    <permission name=\"Read\">\n      <include>Browse</include>\n      <include>ReadVersion</include>\n      <include>ReadProperties</include>\n      <include>ReadChildren</include>\n      <include>ReadLifeCycle</include>\n      <include>ReadSecurity</include>\n      <include>ReviewParticipant</include>\n    </permission>\n\n    <permission name=\"AddChildren\" />\n    <permission name=\"RemoveChildren\" />\n    <permission name=\"Remove\" />\n    <permission name=\"ManageWorkflows\" />\n    <permission name=\"WriteLifeCycle\" />\n    <permission name=\"Unlock\" />\n\n    <permission name=\"Remove\">\n      <documentation>\n        NXP-10929: necessary to follow the \"delete\" transition when Trash is enabled: include WriteLifeCycle\n      </documentation>\n      <include>RemoveChildren</include>\n      <include>WriteLifeCycle</include>\n    </permission>\n\n    <permission name=\"ReadRemove\">\n      <include>Read</include>\n      <include>Remove</include>\n    </permission>\n\n    <permission name=\"Write\">\n      <include>AddChildren</include>\n      <include>WriteProperties</include>\n      <include>Remove</include>\n      <include>ManageWorkflows</include>\n      <include>WriteLifeCycle</include>\n      <include>WriteVersion</include>\n    </permission>\n\n    <permission name=\"ReadWrite\">\n      <include>Read</include>\n      <include>Write</include>\n    </permission>\n\n    <permission name=\"WriteSecurity\" />\n\n    <permission name=\"Everything\">\n      <documentation>\n        Special permission given to administrators: god-level access\n      </documentation>\n    </permission>\n\n    <permission name=\"RestrictedRead\">\n      <documentation>\n        Deprecated - was used only for a single customer project before pluggable permission definitions\n      </documentation>\n    </permission>\n\n    <permission name=\"MakeRecord\" />\n    <permission name=\"SetRetention\" />\n    <permission name=\"ManageLegalHold\" />\n    <!-- Only for flexible records -->\n    <permission name=\"UnsetRetention\" />\n\n    <permission name=\"WriteColdStorage\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissionsVisibility\">\n\n    <visibility>\n      <item show=\"true\" order=\"10\">Read</item>\n      <item show=\"true\" order=\"50\" denyPermission=\"Write\">ReadWrite</item>\n      <item show=\"true\" order=\"100\">Everything</item>\n    </visibility>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/permissions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      The lock security policy checks if a lock is set on the document, in case\n      it denies write access to everyone except to the user who locked it.\n    \n",
              "documentationHtml": "<p>\nThe lock security policy checks if a lock is set on the document, in case\nit denies write access to everyone except to the user who locked it.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.defaultPolicies/Contributions/org.nuxeo.ecm.core.security.defaultPolicies--policies",
              "id": "org.nuxeo.ecm.core.security.defaultPolicies--policies",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"policies\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <documentation>\n      The lock security policy checks if a lock is set on the document, in case\n      it denies write access to everyone except to the user who locked it.\n    </documentation>\n    <policy class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\" name=\"lock\" order=\"10\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.security.defaultPolicies",
          "name": "org.nuxeo.ecm.core.security.defaultPolicies",
          "requirements": [],
          "resolutionOrder": 94,
          "services": [],
          "startOrder": 159,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.security.defaultPolicies\">\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"policies\">\n\n    <documentation>\n      The lock security policy checks if a lock is set on the document, in case\n      it denies write access to everyone except to the user who locked it.\n    </documentation>\n    <policy name=\"lock\" class=\"org.nuxeo.ecm.core.security.LockSecurityPolicy\"\n      order=\"10\" />\n\n  </extension>\n\n  <!--\n  Policy disabled by default given that with auto-checkout\n  it looks like write access to checked in documents is allowed.\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"policies\">\n    <documentation>\n      The checkin security policy denies write access on a live document when\n      it is in the checked-in state. The document must be checked out before\n      modification is allowed.\n      @since 5.4\n    </documentation>\n    <policy name=\"checkin\" class=\"org.nuxeo.ecm.core.security.CheckInSecurityPolicy\"\n      order=\"15\" />\n  </extension>\n  -->\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/security-policy-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.migration.MigrationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.service.migrator/Contributions/org.nuxeo.ecm.core.trash.service.migrator--configuration",
              "id": "org.nuxeo.ecm.core.trash.service.migrator--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.migration.MigrationService",
                "name": "org.nuxeo.runtime.migration.MigrationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.migration.MigrationService\">\n\n    <migration id=\"trash-storage\">\n      <description label=\"migration.trash-storage\">Migration of in the trash storage model</description>\n      <class>org.nuxeo.ecm.core.trash.TrashedStateMigrator</class>\n      <defaultState>property</defaultState>\n      <state id=\"lifecycle\">\n        <description label=\"migration.trash-storage.lifecycle\">Trashed state stored as deleted lifecycle state</description>\n      </state>\n      <state id=\"property\">\n        <description label=\"migration.trash-storage.property\">Trashed state stored as system property</description>\n      </state>\n\n      <step fromState=\"lifecycle\" id=\"lifecycle-to-property\" toState=\"property\">\n        <description label=\"migration.trash-storage.lifecycle-to-property\">Migrate trashed state from lifecycle to property</description>\n      </step>\n    </migration>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.service.migrator",
          "name": "org.nuxeo.ecm.core.trash.service.migrator",
          "requirements": [],
          "resolutionOrder": 95,
          "services": [],
          "startOrder": 174,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.trash.service.migrator\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.runtime.migration.MigrationService\" point=\"configuration\">\n\n    <migration id=\"trash-storage\">\n      <description label=\"migration.trash-storage\">Migration of in the trash storage model</description>\n      <class>org.nuxeo.ecm.core.trash.TrashedStateMigrator</class>\n      <defaultState>property</defaultState>\n      <state id=\"lifecycle\">\n        <description label=\"migration.trash-storage.lifecycle\">Trashed state stored as deleted lifecycle state</description>\n      </state>\n      <state id=\"property\">\n        <description label=\"migration.trash-storage.property\">Trashed state stored as system property</description>\n      </state>\n\n      <step id=\"lifecycle-to-property\" fromState=\"lifecycle\" toState=\"property\">\n        <description label=\"migration.trash-storage.lifecycle-to-property\">Migrate trashed state from lifecycle to property</description>\n      </step>\n    </migration>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/trash-migration.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.trash.TrashServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The trash service is responsible for deleting, purging and undeleting documents\n    based on the lifecycle state.\n  \n",
          "documentationHtml": "<p>\nThe trash service is responsible for deleting, purging and undeleting documents\nbased on the lifecycle state.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property defining the behavior when putting a checked in document in the trash.\n      When true, the document will be kept checked in (this avoids growing quotas).\n      When false, the document will be checked out (compatibility behavior).\n\n      @deprecated since 10.1 new trash service implementation doesn't allow to not keep checkedIn state. Property\n      configuration is still available for former trash service based on document life cycle state.\n    \n",
              "documentationHtml": "<p>\nProperty defining the behavior when putting a checked in document in the trash.\nWhen true, the document will be kept checked in (this avoids growing quotas).\nWhen false, the document will be checked out (compatibility behavior).\n</p><p>\n&#64;deprecated since 10.1 new trash service implementation doesn&#39;t allow to not keep checkedIn state. Property\nconfiguration is still available for former trash service based on document life cycle state.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.TrashService/Contributions/org.nuxeo.ecm.core.trash.TrashService--configuration",
              "id": "org.nuxeo.ecm.core.trash.TrashService--configuration",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property defining the behavior when putting a checked in document in the trash.\n      When true, the document will be kept checked in (this avoids growing quotas).\n      When false, the document will be checked out (compatibility behavior).\n\n      @deprecated since 10.1 new trash service implementation doesn't allow to not keep checkedIn state. Property\n      configuration is still available for former trash service based on document life cycle state.\n    </documentation>\n    <property name=\"org.nuxeo.trash.keepCheckedIn\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.TrashService",
          "name": "org.nuxeo.ecm.core.trash.TrashService",
          "requirements": [],
          "resolutionOrder": 96,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.trash.TrashService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.TrashService/Services/org.nuxeo.ecm.core.api.trash.TrashService",
              "id": "org.nuxeo.ecm.core.api.trash.TrashService",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.trash.TrashService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.TrashService/Services/org.nuxeo.ecm.core.trash.TrashService",
              "id": "org.nuxeo.ecm.core.trash.TrashService",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.trash.TrashService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.trash.TrashService/Services/org.nuxeo.ecm.core.trash.TrashServiceImpl",
              "id": "org.nuxeo.ecm.core.trash.TrashServiceImpl",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 825,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.trash.TrashService\"\n           version=\"1.0\">\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.api.trash.TrashService\" />\n    <provide interface=\"org.nuxeo.ecm.core.trash.TrashService\" />\n    <provide interface=\"org.nuxeo.ecm.core.trash.TrashServiceImpl\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.core.trash.TrashServiceImpl\" />\n\n  <documentation>\n    The trash service is responsible for deleting, purging and undeleting documents\n    based on the lifecycle state.\n  </documentation>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property defining the behavior when putting a checked in document in the trash.\n      When true, the document will be kept checked in (this avoids growing quotas).\n      When false, the document will be checked out (compatibility behavior).\n\n      @deprecated since 10.1 new trash service implementation doesn't allow to not keep checkedIn state. Property\n      configuration is still available for former trash service based on document life cycle state.\n    </documentation>\n    <property name=\"org.nuxeo.trash.keepCheckedIn\">true</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/trash-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.versioning.VersioningComponent",
          "declaredStartOrder": null,
          "documentation": "\n    The versioning service hold the versioning policy used to define what\n    happens to a document's version when it is created, saved, checked in,\n    checked out or restored, and what version increment options (none, minor,\n    major) are made available to the user.\n\n    @Since 5.4\n  \n",
          "documentationHtml": "<p>\nThe versioning service hold the versioning policy used to define what\nhappens to a document&#39;s version when it is created, saved, checked in,\nchecked out or restored, and what version increment options (none, minor,\nmajor) are made available to the user.\n</p><p>\n&#64;Since 5.4\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "descriptors": [
                "org.nuxeo.ecm.core.versioning.VersioningServiceDescriptor"
              ],
              "documentation": "\n      Extension point defining the implementation of the versioning policy.\n      Example:\n\n      <code>\n    <service class=\"some-class\"/>\n</code>\n\n\n      The provided class must implement\n      org.nuxeo.ecm.core.api.versioning.VersioningService\n\n      The default implementation is\n      org.nuxeo.ecm.core.versioning.StandardVersioningService\n    \n",
              "documentationHtml": "<p>\nExtension point defining the implementation of the versioning policy.\nExample:\n</p><p>\n</p><pre><code>    &lt;service class&#61;&#34;some-class&#34;/&gt;\n</code></pre><p>\nThe provided class must implement\norg.nuxeo.ecm.core.api.versioning.VersioningService\n</p><p>\nThe default implementation is\norg.nuxeo.ecm.core.versioning.StandardVersioningService\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/ExtensionPoints/org.nuxeo.ecm.core.api.versioning.VersioningService--versioningService",
              "id": "org.nuxeo.ecm.core.api.versioning.VersioningService--versioningService",
              "label": "versioningService (org.nuxeo.ecm.core.api.versioning.VersioningService)",
              "name": "versioningService",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "descriptors": [
                "org.nuxeo.ecm.core.versioning.VersioningPolicyDescriptor"
              ],
              "documentation": "\n      Extension point defining versioning policies for documents.\n      Contributions to this extension point are available for VersioningService\n      implementing ExtendableVersioningService interface.\n\n      Example:\n      <code>\n    <policy beforeUpdate=\"true\"\n        id=\"no-versioning-for-system-before-update\" increment=\"NONE\" order=\"1\">\n        <filter-id>system-document</filter-id>\n    </policy>\n    <policy id=\"no-versioning-for-system-after-update\" increment=\"NONE\" order=\"1\">\n        <filter-id>system-document</filter-id>\n    </policy>\n    <policy id=\"versioning-with-initial-version\" increment=\"MINOR\" order=\"2\">\n        <initialState major=\"1\" minor=\"0\"/>\n    </policy>\n</code>\n\n\n      The beforeUpdate attribute enables, if set to true,\n      to apply versioning before the actual update of the document.\n      The default value for this attribute is false.\n\n      The increment attribute defines which version number\n      (minor or major) have to be incremented.\n      The available options for this attribute are :\n        - NONE\n        - MINOR\n        - MAJOR\n\n      The order attribute defines in which order the policies\n      should be taken into account. They are taken in ascending order.\n\n      Initial state is the initial version number of the document.\n      Default is 0.0.\n\n      Each policy contains one or multiple filters\n      defining under which conditions the document should be versioned\n      (Note that filters for a policy are OR-ed).\n\n      @since 9.1\n    \n",
              "documentationHtml": "<p>\nExtension point defining versioning policies for documents.\nContributions to this extension point are available for VersioningService\nimplementing ExtendableVersioningService interface.\n</p><p>\nExample:\n</p><p></p><pre><code>    &lt;policy beforeUpdate&#61;&#34;true&#34;\n        id&#61;&#34;no-versioning-for-system-before-update&#34; increment&#61;&#34;NONE&#34; order&#61;&#34;1&#34;&gt;\n        &lt;filter-id&gt;system-document&lt;/filter-id&gt;\n    &lt;/policy&gt;\n    &lt;policy id&#61;&#34;no-versioning-for-system-after-update&#34; increment&#61;&#34;NONE&#34; order&#61;&#34;1&#34;&gt;\n        &lt;filter-id&gt;system-document&lt;/filter-id&gt;\n    &lt;/policy&gt;\n    &lt;policy id&#61;&#34;versioning-with-initial-version&#34; increment&#61;&#34;MINOR&#34; order&#61;&#34;2&#34;&gt;\n        &lt;initialState major&#61;&#34;1&#34; minor&#61;&#34;0&#34;/&gt;\n    &lt;/policy&gt;\n</code></pre><p>\nThe beforeUpdate attribute enables, if set to true,\nto apply versioning before the actual update of the document.\nThe default value for this attribute is false.\n</p><p>\nThe increment attribute defines which version number\n(minor or major) have to be incremented.\nThe available options for this attribute are :\n- NONE\n- MINOR\n- MAJOR\n</p><p>\nThe order attribute defines in which order the policies\nshould be taken into account. They are taken in ascending order.\n</p><p>\nInitial state is the initial version number of the document.\nDefault is 0.0.\n</p><p>\nEach policy contains one or multiple filters\ndefining under which conditions the document should be versioned\n(Note that filters for a policy are OR-ed).\n</p><p>\n&#64;since 9.1\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/ExtensionPoints/org.nuxeo.ecm.core.api.versioning.VersioningService--policies",
              "id": "org.nuxeo.ecm.core.api.versioning.VersioningService--policies",
              "label": "policies (org.nuxeo.ecm.core.api.versioning.VersioningService)",
              "name": "policies",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "descriptors": [
                "org.nuxeo.ecm.core.versioning.VersioningFilterDescriptor"
              ],
              "documentation": "\n      Extension point defining filters which can be used\n      by one or multiple versioning policies.\n      Contributions to this extension point are available for VersioningService\n      implementing ExtendableVersioningService interface.\n\n      Example :\n      <code>\n    <filter class=\"foo.bar.CustomVersioningFilter\" id=\"class-filter\"/>\n    <filter id=\"collaborative-filter-on-files\">\n        <type>File</type>\n        <condition>#{previousDocument.dc.lastContributor != currentDocument.dc.lastContributor}</condition>\n    </filter>\n    <filter id=\"empty\">\n        <type/>\n        <facet/>\n        <schema/>\n        <condition/>\n    </filter>\n</code>\n\n\n      A custom filter can be defined with the class attribute\n      if a java class should be used for the filter.\n      Otherwise, a StandardVersioningFilter will be used\n      with the following elements available:\n\n       - The type element defines which document type will be versioned.\n\n       - The facet/schema element defines that the document\n         will be versioned if it contains the facet/schema.\n\n       - The condition element enables creating\n         a custom condition with an EL expression.\n\n      Note that elements for a filter are AND-ed.\n\n      @since 9.1\n    \n",
              "documentationHtml": "<p>\nExtension point defining filters which can be used\nby one or multiple versioning policies.\nContributions to this extension point are available for VersioningService\nimplementing ExtendableVersioningService interface.\n</p><p>\nExample :\n</p><p></p><pre><code>    &lt;filter class&#61;&#34;foo.bar.CustomVersioningFilter&#34; id&#61;&#34;class-filter&#34;/&gt;\n    &lt;filter id&#61;&#34;collaborative-filter-on-files&#34;&gt;\n        &lt;type&gt;File&lt;/type&gt;\n        &lt;condition&gt;#{previousDocument.dc.lastContributor !&#61; currentDocument.dc.lastContributor}&lt;/condition&gt;\n    &lt;/filter&gt;\n    &lt;filter id&#61;&#34;empty&#34;&gt;\n        &lt;type/&gt;\n        &lt;facet/&gt;\n        &lt;schema/&gt;\n        &lt;condition/&gt;\n    &lt;/filter&gt;\n</code></pre><p>\nA custom filter can be defined with the class attribute\nif a java class should be used for the filter.\nOtherwise, a StandardVersioningFilter will be used\nwith the following elements available:\n</p><p>\n- The type element defines which document type will be versioned.\n</p><p>\n- The facet/schema element defines that the document\nwill be versioned if it contains the facet/schema.\n</p><p>\n- The condition element enables creating\na custom condition with an EL expression.\n</p><p>\nNote that elements for a filter are AND-ed.\n</p><p>\n&#64;since 9.1\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/ExtensionPoints/org.nuxeo.ecm.core.api.versioning.VersioningService--filters",
              "id": "org.nuxeo.ecm.core.api.versioning.VersioningService--filters",
              "label": "filters (org.nuxeo.ecm.core.api.versioning.VersioningService)",
              "name": "filters",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "descriptors": [
                "org.nuxeo.ecm.core.versioning.VersioningRestrictionDescriptor"
              ],
              "documentation": "\n      Extension point defining restrictions of versioning option by document type. Contributions to this XP are\n      available for VersioningService implementing ExtendableVersioningService interface.\n\n      Example:\n\n      <code>\n    <restriction type=\"File\">\n        <options lifeCycleState=\"project\">\n            <option>NONE</option>\n            <option default=\"true\">MINOR</option>\n        </options>\n        <options lifeCycleState=\"approved\"/>\n    </restriction>\n    <restriction type=\"*\">\n        <options lifeCycleState=\"*\">\n            <option default=\"true\">NONE</option>\n            <option>MINOR</option>\n            <option>MAJOR</option>\n        </options>\n        <options lifeCycleState=\"approved\">\n            <option default=\"true\">NONE</option>\n            <option>MINOR</option>\n        </options>\n    </restriction>\n</code>\n\n\n      \"type\" attribute is available for restriction tag and should be the name of a document type.\n\n      The restriction with type \"*\" will be used for all the document types if no specific restriction is contributed.\n\n      Options tag contains the different increment option available when saving a document. If the default attribute\n      isn't set, the first tag will be used as default. Options tag should always have the lifeCycleState attribute.\n      The life cycle state name \"*\" can be used to match any state: it'll be used by default if no other option with\n      a matching state exists.\n\n      Following option gives no increment saving option when the current life cycle of the document is approved.\n      <code>\n    <options lifeCycleState=\"approved\"/>\n</code>\n\n\n      Following options removes major increment option and set the minor increment option as default choice when the\n      current life cycle of the document is projet.\n      <code>\n    <options lifeCycleState=\"project\">\n        <none/>\n        <minor default=\"true\"/>\n    </options>\n</code>\n\n\n      If no restriction is specified, the restriction with \"*\" is used. If there is no default restriction, we fall\n      back on the service implementation (ie: none, minor and major options are available).\n\n      @since 9.1\n    \n",
              "documentationHtml": "<p>\nExtension point defining restrictions of versioning option by document type. Contributions to this XP are\navailable for VersioningService implementing ExtendableVersioningService interface.\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;restriction type&#61;&#34;File&#34;&gt;\n        &lt;options lifeCycleState&#61;&#34;project&#34;&gt;\n            &lt;option&gt;NONE&lt;/option&gt;\n            &lt;option default&#61;&#34;true&#34;&gt;MINOR&lt;/option&gt;\n        &lt;/options&gt;\n        &lt;options lifeCycleState&#61;&#34;approved&#34;/&gt;\n    &lt;/restriction&gt;\n    &lt;restriction type&#61;&#34;*&#34;&gt;\n        &lt;options lifeCycleState&#61;&#34;*&#34;&gt;\n            &lt;option default&#61;&#34;true&#34;&gt;NONE&lt;/option&gt;\n            &lt;option&gt;MINOR&lt;/option&gt;\n            &lt;option&gt;MAJOR&lt;/option&gt;\n        &lt;/options&gt;\n        &lt;options lifeCycleState&#61;&#34;approved&#34;&gt;\n            &lt;option default&#61;&#34;true&#34;&gt;NONE&lt;/option&gt;\n            &lt;option&gt;MINOR&lt;/option&gt;\n        &lt;/options&gt;\n    &lt;/restriction&gt;\n</code></pre><p>\n&#34;type&#34; attribute is available for restriction tag and should be the name of a document type.\n</p><p>\nThe restriction with type &#34;*&#34; will be used for all the document types if no specific restriction is contributed.\n</p><p>\nOptions tag contains the different increment option available when saving a document. If the default attribute\nisn&#39;t set, the first tag will be used as default. Options tag should always have the lifeCycleState attribute.\nThe life cycle state name &#34;*&#34; can be used to match any state: it&#39;ll be used by default if no other option with\na matching state exists.\n</p><p>\nFollowing option gives no increment saving option when the current life cycle of the document is approved.\n</p><p></p><pre><code>    &lt;options lifeCycleState&#61;&#34;approved&#34;/&gt;\n</code></pre><p>\nFollowing options removes major increment option and set the minor increment option as default choice when the\ncurrent life cycle of the document is projet.\n</p><p></p><pre><code>    &lt;options lifeCycleState&#61;&#34;project&#34;&gt;\n        &lt;none/&gt;\n        &lt;minor default&#61;&#34;true&#34;/&gt;\n    &lt;/options&gt;\n</code></pre><p>\nIf no restriction is specified, the restriction with &#34;*&#34; is used. If there is no default restriction, we fall\nback on the service implementation (ie: none, minor and major options are available).\n</p><p>\n&#64;since 9.1\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/ExtensionPoints/org.nuxeo.ecm.core.api.versioning.VersioningService--restrictions",
              "id": "org.nuxeo.ecm.core.api.versioning.VersioningService--restrictions",
              "label": "restrictions (org.nuxeo.ecm.core.api.versioning.VersioningService)",
              "name": "restrictions",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService",
          "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
          "requirements": [],
          "resolutionOrder": 97,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.versioning.VersioningService/Services/org.nuxeo.ecm.core.api.versioning.VersioningService",
              "id": "org.nuxeo.ecm.core.api.versioning.VersioningService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 801,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.core.versioning.VersioningComponent\" />\n\n  <documentation>\n    The versioning service hold the versioning policy used to define what\n    happens to a document's version when it is created, saved, checked in,\n    checked out or restored, and what version increment options (none, minor,\n    major) are made available to the user.\n\n    @Since 5.4\n  </documentation>\n\n  <extension-point name=\"versioningService\">\n    <documentation>\n      Extension point defining the implementation of the versioning policy.\n      Example:\n\n      <code>\n        <service class=\"some-class\" />\n      </code>\n\n      The provided class must implement\n      org.nuxeo.ecm.core.api.versioning.VersioningService\n\n      The default implementation is\n      org.nuxeo.ecm.core.versioning.StandardVersioningService\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.versioning.VersioningServiceDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"policies\">\n\n    <documentation>\n      Extension point defining versioning policies for documents.\n      Contributions to this extension point are available for VersioningService\n      implementing ExtendableVersioningService interface.\n\n      Example:\n      <code>\n        <policy id=\"no-versioning-for-system-before-update\" beforeUpdate=\"true\" increment=\"NONE\" order=\"1\">\n          <filter-id>system-document</filter-id>\n        </policy>\n        <policy id=\"no-versioning-for-system-after-update\" increment=\"NONE\" order=\"1\">\n          <filter-id>system-document</filter-id>\n        </policy>\n        <policy id=\"versioning-with-initial-version\" increment=\"MINOR\" order=\"2\">\n          <initialState major=\"1\" minor=\"0\" />\n        </policy>\n      </code>\n\n      The beforeUpdate attribute enables, if set to true,\n      to apply versioning before the actual update of the document.\n      The default value for this attribute is false.\n\n      The increment attribute defines which version number\n      (minor or major) have to be incremented.\n      The available options for this attribute are :\n        - NONE\n        - MINOR\n        - MAJOR\n\n      The order attribute defines in which order the policies\n      should be taken into account. They are taken in ascending order.\n\n      Initial state is the initial version number of the document.\n      Default is 0.0.\n\n      Each policy contains one or multiple filters\n      defining under which conditions the document should be versioned\n      (Note that filters for a policy are OR-ed).\n\n      @since 9.1\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.versioning.VersioningPolicyDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"filters\">\n\n    <documentation>\n      Extension point defining filters which can be used\n      by one or multiple versioning policies.\n      Contributions to this extension point are available for VersioningService\n      implementing ExtendableVersioningService interface.\n\n      Example :\n      <code>\n\n        <filter id=\"class-filter\" class=\"foo.bar.CustomVersioningFilter\"/>\n\n        <filter id=\"collaborative-filter-on-files\">\n          <type>File</type>\n          <condition>#{previousDocument.dc.lastContributor != currentDocument.dc.lastContributor}</condition>\n        </filter>\n\n        <filter id=\"empty\">\n          <type></type>\n          <facet></facet>\n          <schema></schema>\n          <condition></condition>\n        </filter>\n      </code>\n\n      A custom filter can be defined with the class attribute\n      if a java class should be used for the filter.\n      Otherwise, a StandardVersioningFilter will be used\n      with the following elements available:\n\n       - The type element defines which document type will be versioned.\n\n       - The facet/schema element defines that the document\n         will be versioned if it contains the facet/schema.\n\n       - The condition element enables creating\n         a custom condition with an EL expression.\n\n      Note that elements for a filter are AND-ed.\n\n      @since 9.1\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.versioning.VersioningFilterDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"restrictions\">\n    <documentation>\n      Extension point defining restrictions of versioning option by document type. Contributions to this XP are\n      available for VersioningService implementing ExtendableVersioningService interface.\n\n      Example:\n\n      <code>\n        <restriction type=\"File\">\n          <options lifeCycleState=\"project\">\n            <option>NONE</option>\n            <option default=\"true\">MINOR</option>\n          </options>\n          <options lifeCycleState=\"approved\" />\n        </restriction>\n\n        <restriction type=\"*\">\n          <options lifeCycleState=\"*\">\n            <option default=\"true\">NONE</option>\n            <option>MINOR</option>\n            <option>MAJOR</option>\n          </options>\n          <options lifeCycleState=\"approved\">\n            <option default=\"true\">NONE</option>\n            <option>MINOR</option>\n          </options>\n        </restriction>\n      </code>\n\n      \"type\" attribute is available for restriction tag and should be the name of a document type.\n\n      The restriction with type \"*\" will be used for all the document types if no specific restriction is contributed.\n\n      Options tag contains the different increment option available when saving a document. If the default attribute\n      isn't set, the first tag will be used as default. Options tag should always have the lifeCycleState attribute.\n      The life cycle state name \"*\" can be used to match any state: it'll be used by default if no other option with\n      a matching state exists.\n\n      Following option gives no increment saving option when the current life cycle of the document is approved.\n      <code>\n        <options lifeCycleState=\"approved\" />\n      </code>\n\n      Following options removes major increment option and set the minor increment option as default choice when the\n      current life cycle of the document is projet.\n      <code>\n        <options lifeCycleState=\"project\">\n          <none />\n          <minor default=\"true\" />\n        </options>\n      </code>\n\n      If no restriction is specified, the restriction with \"*\" is used. If there is no default restriction, we fall\n      back on the service implementation (ie: none, minor and major options are available).\n\n      @since 9.1\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.versioning.VersioningRestrictionDescriptor\" />\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/versioning-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Defines an adapter for documents having versioning\n      info. The adapter\n      interface is VersioningDocument and could be\n      retrieved in a standard way\n      from a document model with\n      getAdapter(VersioningDocument.class)\n    \n",
              "documentationHtml": "<p>\nDefines an adapter for documents having versioning\ninfo. The adapter\ninterface is VersioningDocument and could be\nretrieved in a standard way\nfrom a document model with\ngetAdapter(VersioningDocument.class)\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter/Contributions/org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter--adapters",
              "id": "org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter--adapters",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n\n    <documentation>\n      Defines an adapter for documents having versioning\n      info. The adapter\n      interface is VersioningDocument and could be\n      retrieved in a standard way\n      from a document model with\n      getAdapter(VersioningDocument.class)\n    </documentation>\n\n    <adapter class=\"org.nuxeo.ecm.core.api.facet.VersioningDocument\" factory=\"org.nuxeo.ecm.core.versioning.VersioningDocumentAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter",
          "name": "org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter",
          "requirements": [],
          "resolutionOrder": 98,
          "services": [],
          "startOrder": 176,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.versioning.VersioningDocumentAdapter\"\n  version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n\n    <documentation>\n      Defines an adapter for documents having versioning\n      info. The adapter\n      interface is VersioningDocument and could be\n      retrieved in a standard way\n      from a document model with\n      getAdapter(VersioningDocument.class)\n    </documentation>\n\n    <adapter class=\"org.nuxeo.ecm.core.api.facet.VersioningDocument\"\n      factory=\"org.nuxeo.ecm.core.versioning.VersioningDocumentAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/versioning-document-adapter.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Configuration property (true or false) controlling whether ACLs on versions are disabled.\n      The value \"legacy\" is also possible, to disable for direct access but enable for queries.\n      @since 11.3\n    \n",
              "documentationHtml": "<p>\nConfiguration property (true or false) controlling whether ACLs on versions are disabled.\nThe value &#34;legacy&#34; is also possible, to disable for direct access but enable for queries.\n&#64;since 11.3\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.config/Contributions/org.nuxeo.ecm.core.versioning.config--configuration",
              "id": "org.nuxeo.ecm.core.versioning.config--configuration",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Configuration property (true or false) controlling whether ACLs on versions are disabled.\n      The value \"legacy\" is also possible, to disable for direct access but enable for queries.\n      @since 11.3\n    </documentation>\n    <property name=\"org.nuxeo.version.acl.disabled\">false</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Configuration property (true or false) controlling whether the ReadVersion permission is disabled.\n      @since 11.3\n    \n",
              "documentationHtml": "<p>\nConfiguration property (true or false) controlling whether the ReadVersion permission is disabled.\n&#64;since 11.3\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.config/Contributions/org.nuxeo.ecm.core.versioning.config--configuration1",
              "id": "org.nuxeo.ecm.core.versioning.config--configuration1",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Configuration property (true or false) controlling whether the ReadVersion permission is disabled.\n      @since 11.3\n    </documentation>\n    <property name=\"org.nuxeo.version.readversion.disabled\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.config",
          "name": "org.nuxeo.ecm.core.versioning.config",
          "requirements": [],
          "resolutionOrder": 99,
          "services": [],
          "startOrder": 177,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.versioning.config\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Configuration property (true or false) controlling whether ACLs on versions are disabled.\n      The value \"legacy\" is also possible, to disable for direct access but enable for queries.\n      @since 11.3\n    </documentation>\n    <property name=\"org.nuxeo.version.acl.disabled\">false</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Configuration property (true or false) controlling whether the ReadVersion permission is disabled.\n      @since 11.3\n    </documentation>\n    <property name=\"org.nuxeo.version.readversion.disabled\">false</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/versioning-acl-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Resolver for document properties containing DocumentModel reference. Can manage PATH reference or ID\n    reference. Value will contain id or path prefixed by the repository name to which the referenced document belongs.\n  \n",
          "documentationHtml": "<p>\nResolver for document properties containing DocumentModel reference. Can manage PATH reference or ID\nreference. Value will contain id or path prefixed by the repository name to which the referenced document belongs.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.ObjectResolverService--resolvers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.DocumentModel.resolver/Contributions/org.nuxeo.ecm.core.DocumentModel.resolver--resolvers",
              "id": "org.nuxeo.ecm.core.DocumentModel.resolver--resolvers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.ObjectResolverService",
                "name": "org.nuxeo.ecm.core.schema.ObjectResolverService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resolvers\" target=\"org.nuxeo.ecm.core.schema.ObjectResolverService\">\n    <resolver class=\"org.nuxeo.ecm.core.model.DocumentModelResolver\" type=\"documentResolver\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.DocumentModel.resolver",
          "name": "org.nuxeo.ecm.core.DocumentModel.resolver",
          "requirements": [],
          "resolutionOrder": 100,
          "services": [],
          "startOrder": 112,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.DocumentModel.resolver\">\n  <documentation>\n    Resolver for document properties containing DocumentModel reference. Can manage PATH reference or ID\n    reference. Value will contain id or path prefixed by the repository name to which the referenced document belongs.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.ObjectResolverService\" point=\"resolvers\">\n    <resolver type=\"documentResolver\" class=\"org.nuxeo.ecm.core.model.DocumentModelResolver\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-resolver-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.filter.CharacterFilteringServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The character filtering service enables the filtering of unwanted characters.\n    If filtering is enabled, by default the control characters not valid in XML specification\n    will be removed from any field in document creation or update.\n  \n",
          "documentationHtml": "<p>\nThe character filtering service enables the filtering of unwanted characters.\nIf filtering is enabled, by default the control characters not valid in XML specification\nwill be removed from any field in document creation or update.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.filter.CharacterFilteringService",
              "descriptors": [
                "org.nuxeo.ecm.core.filter.CharacterFilteringServiceDescriptor"
              ],
              "documentation": "\n      Extension point to set if filtering is enabled or disabled. Other characters can\n      be added to be filtered if present.\n\n      <code>\n    <filtering enabled=\"true\">\n        <disallowedCharacters>\n            <character>\\r</character>\n            <character>\\t</character>\n        </disallowedCharacters>\n    </filtering>\n</code>\n",
              "documentationHtml": "<p>\nExtension point to set if filtering is enabled or disabled. Other characters can\nbe added to be filtered if present.\n</p><p>\n</p><pre><code>    &lt;filtering enabled&#61;&#34;true&#34;&gt;\n        &lt;disallowedCharacters&gt;\n            &lt;character&gt;\\r&lt;/character&gt;\n            &lt;character&gt;\\t&lt;/character&gt;\n        &lt;/disallowedCharacters&gt;\n    &lt;/filtering&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.filter.CharacterFilteringService/ExtensionPoints/org.nuxeo.ecm.core.filter.CharacterFilteringService--filtering",
              "id": "org.nuxeo.ecm.core.filter.CharacterFilteringService--filtering",
              "label": "filtering (org.nuxeo.ecm.core.filter.CharacterFilteringService)",
              "name": "filtering",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.filter.CharacterFilteringService",
          "name": "org.nuxeo.ecm.core.filter.CharacterFilteringService",
          "requirements": [],
          "resolutionOrder": 101,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.filter.CharacterFilteringService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.filter.CharacterFilteringService/Services/org.nuxeo.ecm.core.filter.CharacterFilteringService",
              "id": "org.nuxeo.ecm.core.filter.CharacterFilteringService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 805,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.filter.CharacterFilteringService\">\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.filter.CharacterFilteringService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.core.filter.CharacterFilteringServiceImpl\" />\n\n  <documentation>\n    The character filtering service enables the filtering of unwanted characters.\n    If filtering is enabled, by default the control characters not valid in XML specification\n    will be removed from any field in document creation or update.\n  </documentation>\n\n  <extension-point name=\"filtering\">\n    <documentation>\n      Extension point to set if filtering is enabled or disabled. Other characters can\n      be added to be filtered if present.\n\n      <code>\n        <filtering enabled=\"true\">\n          <disallowedCharacters>\n            <character>\\r</character>\n            <character>\\t</character>\n          </disallowedCharacters>\n        </filtering>\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.filter.CharacterFilteringServiceDescriptor\" />\n\n  </extension-point>\n</component>\n",
          "xmlFileName": "/OSGI-INF/character-filtering-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.filter.CharacterFilteringService--filtering",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.document.characterFiltering.contrib/Contributions/org.nuxeo.ecm.core.document.characterFiltering.contrib--filtering",
              "id": "org.nuxeo.ecm.core.document.characterFiltering.contrib--filtering",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.filter.CharacterFilteringService",
                "name": "org.nuxeo.ecm.core.filter.CharacterFilteringService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filtering\" target=\"org.nuxeo.ecm.core.filter.CharacterFilteringService\">\n    <filtering enabled=\"true\">\n    </filtering>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.document.characterFiltering.contrib",
          "name": "org.nuxeo.ecm.core.document.characterFiltering.contrib",
          "requirements": [],
          "resolutionOrder": 102,
          "services": [],
          "startOrder": 134,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.document.characterFiltering.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.filter.CharacterFilteringService\" point=\"filtering\">\n    <filtering enabled=\"true\">\n    </filtering>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/character-filtering-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.blob.DocumentBlobManagerComponent",
          "declaredStartOrder": null,
          "documentation": "\n    Document Blob Manager, dispatching blobs and for methods associated to Documents or repositories.\n  \n",
          "documentationHtml": "<p>\nDocument Blob Manager, dispatching blobs and for methods associated to Documents or repositories.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.blob.DocumentBlobManager",
              "descriptors": [
                "org.nuxeo.ecm.core.blob.BlobDispatcherDescriptor"
              ],
              "documentation": "\n      Extension points to register the blob dispatcher.\n    \n",
              "documentationHtml": "<p>\nExtension points to register the blob dispatcher.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.DocumentBlobManager/ExtensionPoints/org.nuxeo.ecm.core.blob.DocumentBlobManager--configuration",
              "id": "org.nuxeo.ecm.core.blob.DocumentBlobManager--configuration",
              "label": "configuration (org.nuxeo.ecm.core.blob.DocumentBlobManager)",
              "name": "configuration",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.DocumentBlobManager",
          "name": "org.nuxeo.ecm.core.blob.DocumentBlobManager",
          "requirements": [],
          "resolutionOrder": 103,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.blob.DocumentBlobManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.DocumentBlobManager/Services/org.nuxeo.ecm.core.blob.DocumentBlobManager",
              "id": "org.nuxeo.ecm.core.blob.DocumentBlobManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 803,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.blob.DocumentBlobManager\" version=\"1.0.0\">\n\n  <documentation>\n    Document Blob Manager, dispatching blobs and for methods associated to Documents or repositories.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.blob.DocumentBlobManagerComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.blob.DocumentBlobManager\" />\n  </service>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      Extension points to register the blob dispatcher.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.blob.BlobDispatcherDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/documentblobmanager-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.uidgen.service.UIDGeneratorService"
          ],
          "componentClass": "org.nuxeo.ecm.core.uidgen.UIDGeneratorComponent",
          "declaredStartOrder": null,
          "documentation": "\n    Component for a generator of unique ids, which can be used as metadata for documents or any other use.\n  \n",
          "documentationHtml": "<p>\nComponent for a generator of unique ids, which can be used as metadata for documents or any other use.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.platform.uidgen.service.UIDGeneratorService--sequencers"
              ],
              "componentId": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "descriptors": [
                "org.nuxeo.ecm.core.uidgen.UIDSequencerProviderDescriptor"
              ],
              "documentation": "\n      Allows to contribute a new uid sequencer.\n    \n",
              "documentationHtml": "<p>\nAllows to contribute a new uid sequencer.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService/ExtensionPoints/org.nuxeo.ecm.core.uidgen.UIDGeneratorService--sequencers",
              "id": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService--sequencers",
              "label": "sequencers (org.nuxeo.ecm.core.uidgen.UIDGeneratorService)",
              "name": "sequencers",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.platform.uidgen.service.UIDGeneratorService--generators"
              ],
              "componentId": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "descriptors": [
                "org.nuxeo.ecm.core.uidgen.UIDGeneratorDescriptor"
              ],
              "documentation": "\n      Allows to contribute a new uid generator.\n    \n",
              "documentationHtml": "<p>\nAllows to contribute a new uid generator.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService/ExtensionPoints/org.nuxeo.ecm.core.uidgen.UIDGeneratorService--generators",
              "id": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService--generators",
              "label": "generators (org.nuxeo.ecm.core.uidgen.UIDGeneratorService)",
              "name": "generators",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Listener to automatically generate uids for documents according to the registered uid generators.\n    \n",
              "documentationHtml": "<p>\nListener to automatically generate uids for documents according to the registered uid generators.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService/Contributions/org.nuxeo.ecm.core.uidgen.UIDGeneratorService--listener",
              "id": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService--listener",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <documentation>\n      Listener to automatically generate uids for documents according to the registered uid generators.\n    </documentation>\n    <listener async=\"false\" class=\"org.nuxeo.ecm.core.uidgen.DocUIDGeneratorListener\" name=\"uidlistener\" postCommit=\"false\" priority=\"10\">\n      <event>documentCreated</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
          "name": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
          "requirements": [],
          "resolutionOrder": 104,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService/Services/org.nuxeo.ecm.core.uidgen.UIDSequencer",
              "id": "org.nuxeo.ecm.core.uidgen.UIDSequencer",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidgen.UIDGeneratorService/Services/org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "id": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 826,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.uidgen.UIDGeneratorService\">\n\n  <alias>org.nuxeo.ecm.platform.uidgen.service.UIDGeneratorService</alias>\n\n  <documentation>\n    Component for a generator of unique ids, which can be used as metadata for documents or any other use.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.uidgen.UIDGeneratorComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.uidgen.UIDSequencer\" />\n    <provide interface=\"org.nuxeo.ecm.core.uidgen.UIDGeneratorService\" />\n  </service>\n\n  <extension-point name=\"sequencers\">\n    <documentation>\n      Allows to contribute a new uid sequencer.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.uidgen.UIDSequencerProviderDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"generators\">\n    <documentation>\n      Allows to contribute a new uid generator.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.uidgen.UIDGeneratorDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <documentation>\n      Listener to automatically generate uids for documents according to the registered uid generators.\n    </documentation>\n    <listener name=\"uidlistener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.core.uidgen.DocUIDGeneratorListener\" priority=\"10\">\n      <event>documentCreated</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/uidgenerator-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property defining the name of the key/value store used for the KeyValueStoreUIDSequencer.\n    \n",
              "documentationHtml": "<p>\nProperty defining the name of the key/value store used for the KeyValueStoreUIDSequencer.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidseq.keyvaluestore/Contributions/org.nuxeo.ecm.core.uidseq.keyvaluestore--configuration",
              "id": "org.nuxeo.ecm.core.uidseq.keyvaluestore--configuration",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property defining the name of the key/value store used for the KeyValueStoreUIDSequencer.\n    </documentation>\n    <property name=\"nuxeo.uidseq.keyvaluestore.name\">sequence</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.uidseq.keyvaluestore",
          "name": "org.nuxeo.ecm.core.uidseq.keyvaluestore",
          "requirements": [],
          "resolutionOrder": 105,
          "services": [],
          "startOrder": 175,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.uidseq.keyvaluestore\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property defining the name of the key/value store used for the KeyValueStoreUIDSequencer.\n    </documentation>\n    <property name=\"nuxeo.uidseq.keyvaluestore.name\">sequence</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/uidgenerator-keyvalue-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.api.CoreSessionServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Service managing the acquisition/release of CoreSession instances.\n  \n",
          "documentationHtml": "<p>\nService managing the acquisition/release of CoreSession instances.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.CoreSessionServiceImpl",
          "name": "org.nuxeo.ecm.core.api.CoreSessionServiceImpl",
          "requirements": [],
          "resolutionOrder": 106,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.CoreSessionServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.api.CoreSessionServiceImpl/Services/org.nuxeo.ecm.core.api.CoreSessionService",
              "id": "org.nuxeo.ecm.core.api.CoreSessionService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 793,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.api.CoreSessionServiceImpl\" version=\"1.0.0\">\n\n  <documentation>\n    Service managing the acquisition/release of CoreSession instances.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.api.CoreSessionServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.api.CoreSessionService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/CoreSessionService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.schedulers/Contributions/org.nuxeo.ecm.core.schedulers--schedule",
              "id": "org.nuxeo.ecm.core.schedulers--schedule",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "name": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\">\n\n    <schedule id=\"aceScheduler\">\n      <eventId>updateACEStatus</eventId>\n      <!-- every 5 mins -->\n      <cronExpression>0 0/5 * * * ?</cronExpression>\n    </schedule>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.schedulers/Contributions/org.nuxeo.ecm.core.schedulers--listener",
              "id": "org.nuxeo.ecm.core.schedulers--listener",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.ecm.core.security.UpdateACEStatusListener\" name=\"updateACEStatus\">\n      <event>updateACEStatus</event>\n    </listener>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.schedulers/Contributions/org.nuxeo.ecm.core.schedulers--queues",
              "id": "org.nuxeo.ecm.core.schedulers--queues",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"updateACEStatus\">\n      <maxThreads>1</maxThreads>\n      <category>updateACEStatus</category>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.schedulers",
          "name": "org.nuxeo.ecm.core.schedulers",
          "requirements": [],
          "resolutionOrder": 107,
          "services": [],
          "startOrder": 154,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.schedulers\">\n\n  <extension target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\"\n    point=\"schedule\">\n\n    <schedule id=\"aceScheduler\">\n      <eventId>updateACEStatus</eventId>\n      <!-- every 5 mins -->\n      <cronExpression>0 0/5 * * * ?</cronExpression>\n    </schedule>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"updateACEStatus\" async=\"true\" class=\"org.nuxeo.ecm.core.security.UpdateACEStatusListener\">\n      <event>updateACEStatus</event>\n    </listener>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"updateACEStatus\">\n      <maxThreads>1</maxThreads>\n      <category>updateACEStatus</category>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/scheduler-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      The retention and hold security policy prevents deletion of a document\n      when it is under retention or has a legal hold.\n    \n",
              "documentationHtml": "<p>\nThe retention and hold security policy prevents deletion of a document\nwhen it is under retention or has a legal hold.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.retention.contrib/Contributions/org.nuxeo.ecm.core.retention.contrib--policies",
              "id": "org.nuxeo.ecm.core.retention.contrib--policies",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"policies\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n    <documentation>\n      The retention and hold security policy prevents deletion of a document\n      when it is under retention or has a legal hold.\n    </documentation>\n    <policy class=\"org.nuxeo.ecm.core.security.RetentionAndHoldSecurityPolicy\" name=\"retentionAndHold\" order=\"1\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.retention.contrib/Contributions/org.nuxeo.ecm.core.retention.contrib--listener",
              "id": "org.nuxeo.ecm.core.retention.contrib--listener",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.ecm.core.security.RetentionExpiredFinderListener\" name=\"findRetentionExpired\">\n      <event>findRetentionExpired</event>\n    </listener>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.retention.contrib/Contributions/org.nuxeo.ecm.core.retention.contrib--actions",
              "id": "org.nuxeo.ecm.core.retention.contrib--actions",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <!-- NOT httpEnabled -->\n    <action batchSize=\"25\" bucketSize=\"100\" inputStream=\"retention/retentionExpired\" name=\"retentionExpired\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.retention.contrib/Contributions/org.nuxeo.ecm.core.retention.contrib--streamProcessor",
              "id": "org.nuxeo.ecm.core.retention.contrib--streamProcessor",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.security.RetentionExpiredAction\" defaultConcurrency=\"1\" defaultPartitions=\"1\" name=\"retentionExpired\">\n      <!-- continue on failure, because failure to expire retention doesn't give us an inconsistent state -->\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"60s\" maxRetries=\"20\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.retention.contrib",
          "name": "org.nuxeo.ecm.core.retention.contrib",
          "requirements": [],
          "resolutionOrder": 108,
          "services": [],
          "startOrder": 153,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.retention.contrib\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\" point=\"policies\">\n    <documentation>\n      The retention and hold security policy prevents deletion of a document\n      when it is under retention or has a legal hold.\n    </documentation>\n    <policy name=\"retentionAndHold\" class=\"org.nuxeo.ecm.core.security.RetentionAndHoldSecurityPolicy\"\n      order=\"1\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"findRetentionExpired\" async=\"true\"\n      class=\"org.nuxeo.ecm.core.security.RetentionExpiredFinderListener\">\n      <event>findRetentionExpired</event>\n    </listener>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <!-- NOT httpEnabled -->\n    <action name=\"retentionExpired\" inputStream=\"retention/retentionExpired\" bucketSize=\"100\" batchSize=\"25\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"retentionExpired\" class=\"org.nuxeo.ecm.core.security.RetentionExpiredAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.retentionExpired.defaultConcurrency:=1}\"\n      defaultPartitions=\"${nuxeo.bulk.action.retentionExpired.defaultPartitions:=1}\">\n      <!-- continue on failure, because failure to expire retention doesn't give us an inconsistent state -->\n      <policy name=\"default\" maxRetries=\"20\" delay=\"1s\" maxDelay=\"60s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-and-hold-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.EventService--listeners",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.asyncdigest.listener/Contributions/org.nuxeo.ecm.core.blob.asyncdigest.listener--listeners",
              "id": "org.nuxeo.ecm.core.blob.asyncdigest.listener--listeners",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.EventService",
                "name": "org.nuxeo.runtime.EventService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listeners\" target=\"org.nuxeo.runtime.EventService\">\n    <listener class=\"org.nuxeo.ecm.core.blob.AsyncDigestListener\">\n      <topic>asyncDigest</topic>\n    </listener>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.asyncdigest.listener/Contributions/org.nuxeo.ecm.core.blob.asyncdigest.listener--queues",
              "id": "org.nuxeo.ecm.core.blob.asyncdigest.listener--queues",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"computeDigest\">\n      <maxThreads>2</maxThreads>\n      <category>computeDigest</category>\n    </queue>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scheduler.SchedulerService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.asyncdigest.listener/Contributions/org.nuxeo.ecm.core.blob.asyncdigest.listener--schedule",
              "id": "org.nuxeo.ecm.core.blob.asyncdigest.listener--schedule",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scheduler.SchedulerService",
                "name": "org.nuxeo.ecm.core.scheduler.SchedulerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\">\n    <schedule id=\"blobManagerDeleteMarkedBlobsSchedule\">\n      <event>blobManagerDeleteMarkedBlobsEvent</event>\n      <!-- every 15 minutes -->\n      <cronExpression>0 0/15 * * * ?</cronExpression>\n    </schedule>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.asyncdigest.listener/Contributions/org.nuxeo.ecm.core.blob.asyncdigest.listener--listener",
              "id": "org.nuxeo.ecm.core.blob.asyncdigest.listener--listener",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.ecm.core.blob.BlobDeleteListener\" name=\"blobManagerDeleteMarkedBlobsListener\" postCommit=\"true\">\n      <event>blobManagerDeleteMarkedBlobsEvent</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.blob.asyncdigest.listener",
          "name": "org.nuxeo.ecm.core.blob.asyncdigest.listener",
          "requirements": [],
          "resolutionOrder": 109,
          "services": [],
          "startOrder": 126,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.blob.asyncdigest.listener\">\n\n  <extension target=\"org.nuxeo.runtime.EventService\" point=\"listeners\">\n    <listener class=\"org.nuxeo.ecm.core.blob.AsyncDigestListener\">\n      <topic>asyncDigest</topic>\n    </listener>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"computeDigest\">\n      <maxThreads>2</maxThreads>\n      <category>computeDigest</category>\n    </queue>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\" point=\"schedule\">\n    <schedule id=\"blobManagerDeleteMarkedBlobsSchedule\">\n      <event>blobManagerDeleteMarkedBlobsEvent</event>\n      <!-- every 15 minutes -->\n      <cronExpression>0 0/15 * * * ?</cronExpression>\n    </schedule>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"blobManagerDeleteMarkedBlobsListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.core.blob.BlobDeleteListener\">\n      <event>blobManagerDeleteMarkedBlobsEvent</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/asyncdigest-listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property defining the restricted aspect when creating a (live) proxy.\n\n      @since 2021.17\n    \n",
              "documentationHtml": "<p>\nProperty defining the restricted aspect when creating a (live) proxy.\n</p><p>\n&#64;since 2021.17\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.proxy.creation.restricted.configuration/Contributions/org.nuxeo.ecm.core.proxy.creation.restricted.configuration--configuration",
              "id": "org.nuxeo.ecm.core.proxy.creation.restricted.configuration--configuration",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property defining the restricted aspect when creating a (live) proxy.\n\n      @since 2021.17\n    </documentation>\n    <property name=\"org.nuxeo.proxy.creation.restricted\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.proxy.creation.restricted.configuration",
          "name": "org.nuxeo.ecm.core.proxy.creation.restricted.configuration",
          "requirements": [],
          "resolutionOrder": 110,
          "services": [],
          "startOrder": 151,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.proxy.creation.restricted.configuration\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property defining the restricted aspect when creating a (live) proxy.\n\n      @since 2021.17\n    </documentation>\n    <property name=\"org.nuxeo.proxy.creation.restricted\">true</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/proxy-creation-configuration-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.migration.bulk/Contributions/org.nuxeo.ecm.core.migration.bulk--actions",
              "id": "org.nuxeo.ecm.core.migration.bulk--actions",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"100\" inputStream=\"bulk/migration\" name=\"migration\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.migration.bulk/Contributions/org.nuxeo.ecm.core.migration.bulk--streamProcessor",
              "id": "org.nuxeo.ecm.core.migration.bulk--streamProcessor",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <!-- Migration processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.migrator.AbstractBulkMigrator$MigrationAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"migration\" start=\"false\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.migration.bulk",
          "name": "org.nuxeo.ecm.core.migration.bulk",
          "requirements": [],
          "resolutionOrder": 111,
          "services": [],
          "startOrder": 143,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.migration.bulk\">\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"migration\" inputStream=\"bulk/migration\" bucketSize=\"100\" batchSize=\"25\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <!-- Migration processor -->\n    <streamProcessor name=\"migration\" class=\"org.nuxeo.ecm.core.migrator.AbstractBulkMigrator$MigrationAction\"\n                     defaultConcurrency=\"${nuxeo.bulk.action.migration.defaultConcurrency:=2}\"\n                     defaultPartitions=\"${nuxeo.bulk.action.migration.defaultPartitions:=4}\" start=\"false\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"false\"/>\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/bulk-migration-action-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scroll.service--scroll",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.scroll.contrib/Contributions/org.nuxeo.ecm.core.scroll.contrib--scroll",
              "id": "org.nuxeo.ecm.core.scroll.contrib--scroll",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll class=\"org.nuxeo.ecm.core.blob.scroll.RepositoryBlobScroll\" name=\"repositoryBlobScroll\" type=\"generic\"/>\n    <scroll class=\"org.nuxeo.ecm.core.blob.scroll.InMemoryBlobScroll\" name=\"inMemoryBlobScroll\" type=\"generic\"/>\n    <scroll class=\"org.nuxeo.ecm.core.blob.scroll.LocalBlobScroll\" name=\"localBlobScroll\" type=\"generic\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.scroll.contrib",
          "name": "org.nuxeo.ecm.core.scroll.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.scroll.service"
          ],
          "resolutionOrder": 129,
          "services": [],
          "startOrder": 155,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.scroll.contrib\" version=\"1.0\">\n  <require>org.nuxeo.ecm.core.scroll.service</require>\n  <extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll type=\"generic\" name=\"repositoryBlobScroll\" class=\"org.nuxeo.ecm.core.blob.scroll.RepositoryBlobScroll\" />\n    <scroll type=\"generic\" name=\"inMemoryBlobScroll\" class=\"org.nuxeo.ecm.core.blob.scroll.InMemoryBlobScroll\" />\n    <scroll type=\"generic\" name=\"localBlobScroll\" class=\"org.nuxeo.ecm.core.blob.scroll.LocalBlobScroll\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/scroll-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--domainEventProducer",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.stream.blobs/Contributions/org.nuxeo.ecm.core.stream.blobs--domainEventProducer",
              "id": "org.nuxeo.ecm.core.stream.blobs--domainEventProducer",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"domainEventProducer\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <domainEventProducer class=\"org.nuxeo.ecm.core.blob.stream.BlobDomainEventProducer\" name=\"blobDomain\">\n      <stream codec=\"avro\" name=\"source/blob\" partitions=\"1\"/>\n    </domainEventProducer>\n    <domainEventProducer class=\"org.nuxeo.ecm.core.model.stream.DocumentDomainEventProducer\" name=\"documentDomain\">\n      <stream codec=\"avro\" name=\"source/document\" partitions=\"1\"/>\n    </domainEventProducer>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.stream.blobs/Contributions/org.nuxeo.ecm.core.stream.blobs--streamProcessor",
              "id": "org.nuxeo.ecm.core.stream.blobs--streamProcessor",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.blob.stream.StreamOrphanBlobGC\" defaultCodec=\"avro\" defaultConcurrency=\"1\" defaultPartitions=\"1\" enabled=\"true\" name=\"blobGC\">\n      <policy continueOnFailure=\"true\" delay=\"3s\" maxDelay=\"60s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.ecm.core.model.stream.StreamDocumentGC\" defaultCodec=\"avro\" defaultConcurrency=\"1\" defaultPartitions=\"1\" enabled=\"true\" name=\"documentGC\">\n      <policy continueOnFailure=\"true\" delay=\"3s\" maxDelay=\"60s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.stream.blobs",
          "name": "org.nuxeo.ecm.core.stream.blobs",
          "requirements": [
            "org.nuxeo.ecm.core.bulk"
          ],
          "resolutionOrder": 132,
          "services": [],
          "startOrder": 172,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.stream.blobs\">\n\n  <require>org.nuxeo.ecm.core.bulk</require>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"domainEventProducer\">\n    <domainEventProducer name=\"blobDomain\" class=\"org.nuxeo.ecm.core.blob.stream.BlobDomainEventProducer\">\n      <stream name=\"source/blob\" partitions=\"${nuxeo.bulk.action.blobGC.defaultPartitions:=1}\" codec=\"avro\" />\n    </domainEventProducer>\n    <domainEventProducer name=\"documentDomain\" class=\"org.nuxeo.ecm.core.model.stream.DocumentDomainEventProducer\">\n      <stream name=\"source/document\" partitions=\"${nuxeo.bulk.action.documentGC.defaultPartitions:=1}\" codec=\"avro\" />\n    </domainEventProducer>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"blobGC\"\n      defaultCodec=\"avro\" class=\"org.nuxeo.ecm.core.blob.stream.StreamOrphanBlobGC\"\n      defaultConcurrency=\"${nuxeo.bulk.action.blobGC.defaultConcurrency:=1}\"\n      defaultPartitions=\"${nuxeo.bulk.action.blobGC.defaultPartitions:=1}\"\n      enabled=\"${nuxeo.bulk.action.blobGC.enabled:=true}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"3s\" maxDelay=\"60s\"\n        continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"documentGC\"\n      defaultCodec=\"avro\" class=\"org.nuxeo.ecm.core.model.stream.StreamDocumentGC\"\n      defaultConcurrency=\"${nuxeo.bulk.action.documentGC.defaultConcurrency:=1}\"\n      defaultPartitions=\"${nuxeo.bulk.action.documentGC.defaultPartitions:=1}\"\n      enabled=\"${nuxeo.bulk.action.documentGC.enabled:=true}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"3s\" maxDelay=\"60s\"\n        continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-domain-event-producer-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.deletion.config/Contributions/org.nuxeo.ecm.core.deletion.config--actions",
              "id": "org.nuxeo.ecm.core.deletion.config--actions",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"50\" bucketSize=\"100\" inputStream=\"bulk/deletion\" name=\"deletion\"/>\n    <action batchSize=\"50\" bucketSize=\"100\" inputStream=\"bulk/garbageCollectOrphanBlobs\" name=\"garbageCollectOrphanBlobs\" sequentialScroll=\"true\" validationClass=\"org.nuxeo.ecm.core.action.validation.GarbageCollectOrphanBlobsValidation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.deletion.config/Contributions/org.nuxeo.ecm.core.deletion.config--streamProcessor",
              "id": "org.nuxeo.ecm.core.deletion.config--streamProcessor",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.action.DeletionAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"deletion\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <!-- GarbageCollectOrphanBlobs processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.action.GarbageCollectOrphanBlobsAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"garbageCollectOrphanBlobs\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.deletion.config",
          "name": "org.nuxeo.ecm.core.deletion.config",
          "requirements": [
            "org.nuxeo.ecm.core.bulk"
          ],
          "resolutionOrder": 133,
          "services": [],
          "startOrder": 133,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.deletion.config\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.bulk</require>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"deletion\" inputStream=\"bulk/deletion\" bucketSize=\"100\" batchSize=\"50\" />\n    <action name=\"garbageCollectOrphanBlobs\"\n      validationClass=\"org.nuxeo.ecm.core.action.validation.GarbageCollectOrphanBlobsValidation\"\n      inputStream=\"bulk/garbageCollectOrphanBlobs\" bucketSize=\"100\"\n      batchSize=\"50\" sequentialScroll=\"true\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"deletion\" class=\"org.nuxeo.ecm.core.action.DeletionAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.deletion.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.deletion.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\"/>\n    </streamProcessor>\n    <!-- GarbageCollectOrphanBlobs processor -->\n    <streamProcessor name=\"garbageCollectOrphanBlobs\"\n      class=\"org.nuxeo.ecm.core.action.GarbageCollectOrphanBlobsAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.garbageCollectOrphanBlobs.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.garbageCollectOrphanBlobs.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/deletion-action-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.orphanVersionsCleanup/Contributions/org.nuxeo.ecm.core.orphanVersionsCleanup--actions",
              "id": "org.nuxeo.ecm.core.orphanVersionsCleanup--actions",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"100\" inputStream=\"bulk/garbageCollectOrphanVersions\" name=\"garbageCollectOrphanVersions\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.orphanVersionsCleanup/Contributions/org.nuxeo.ecm.core.orphanVersionsCleanup--streamProcessor",
              "id": "org.nuxeo.ecm.core.orphanVersionsCleanup--streamProcessor",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.action.GarbageCollectOrphanVersionsAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"garbageCollectOrphanVersions\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.orphanVersionsCleanup",
          "name": "org.nuxeo.ecm.core.orphanVersionsCleanup",
          "requirements": [
            "org.nuxeo.ecm.core.bulk"
          ],
          "resolutionOrder": 134,
          "services": [],
          "startOrder": 150,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.orphanVersionsCleanup\">\n\n  <require>org.nuxeo.ecm.core.bulk</require>\n\n  <!-- bulk action implementing the new orphan versions full GC -->\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"garbageCollectOrphanVersions\" inputStream=\"bulk/garbageCollectOrphanVersions\" bucketSize=\"100\"\n      batchSize=\"25\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"garbageCollectOrphanVersions\"\n      class=\"org.nuxeo.ecm.core.action.GarbageCollectOrphanVersionsAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.garbageCollectOrphanVersions.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.garbageCollectOrphanVersions.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/orphanVersionsCleanup-listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.versioning.VersioningService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.default-policies/Contributions/org.nuxeo.ecm.core.versioning.default-policies--policies",
              "id": "org.nuxeo.ecm.core.versioning.default-policies--policies",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"policies\" target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n    <policy beforeUpdate=\"true\" id=\"no-versioning-for-system-before-update\" increment=\"NONE\" order=\"1\">\n      <filter-id>system-document</filter-id>\n    </policy>\n    <policy id=\"no-versioning-for-system-after-update\" increment=\"NONE\" order=\"1\">\n      <filter-id>system-document</filter-id>\n    </policy>\n    <policy beforeUpdate=\"true\" id=\"disable-versioning-before-update\" increment=\"NONE\" order=\"2\">\n      <filter-id>disable-versioning</filter-id>\n    </policy>\n    <policy id=\"disable-versioning-after-update\" increment=\"NONE\" order=\"2\">\n      <filter-id>disable-versioning</filter-id>\n    </policy>\n    <policy id=\"note-as-wiki\" increment=\"MINOR\" order=\"50\">\n      <filter-id>note-filter</filter-id>\n    </policy>\n    <policy beforeUpdate=\"true\" id=\"collaborative-save\" increment=\"MINOR\" order=\"100\">\n      <filter-id>last-contributor-different-filter</filter-id>\n    </policy>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.versioning.VersioningService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.default-policies/Contributions/org.nuxeo.ecm.core.versioning.default-policies--filters",
              "id": "org.nuxeo.ecm.core.versioning.default-policies--filters",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n    <filter class=\"org.nuxeo.ecm.core.versioning.NoVersioningPolicyFilter\" id=\"system-document\"/>\n    <filter id=\"disable-versioning\">\n      <condition>#{currentDocument.contextData.DisableAutomaticVersioning}</condition>\n    </filter>\n    <filter id=\"note-filter\">\n      <type>Note</type>\n    </filter>\n    <filter id=\"last-contributor-different-filter\">\n      <schema>file</schema>\n      <condition>#{previousDocument.dc.lastContributor != currentDocument.dc.lastContributor}</condition>\n    </filter>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.versioning.default-policies",
          "name": "org.nuxeo.ecm.core.versioning.default-policies",
          "requirements": [
            "org.nuxeo.ecm.platform.el.service"
          ],
          "resolutionOrder": 142,
          "services": [],
          "startOrder": 178,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.versioning.default-policies\" version=\"1.0\">\n\n  <require>org.nuxeo.ecm.platform.el.service</require>\n\n  <extension target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" point=\"policies\">\n    <policy id=\"no-versioning-for-system-before-update\" beforeUpdate=\"true\" increment=\"NONE\" order=\"1\">\n      <filter-id>system-document</filter-id>\n    </policy>\n    <policy id=\"no-versioning-for-system-after-update\" increment=\"NONE\" order=\"1\">\n      <filter-id>system-document</filter-id>\n    </policy>\n    <policy id=\"disable-versioning-before-update\" beforeUpdate=\"true\" increment=\"NONE\" order=\"2\">\n      <filter-id>disable-versioning</filter-id>\n    </policy>\n    <policy id=\"disable-versioning-after-update\" increment=\"NONE\" order=\"2\">\n      <filter-id>disable-versioning</filter-id>\n    </policy>\n    <policy id=\"note-as-wiki\" increment=\"MINOR\" order=\"50\">\n      <filter-id>note-filter</filter-id>\n    </policy>\n    <policy id=\"collaborative-save\" increment=\"MINOR\" beforeUpdate=\"true\" order=\"100\">\n      <filter-id>last-contributor-different-filter</filter-id>\n    </policy>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" point=\"filters\">\n    <filter id=\"system-document\" class=\"org.nuxeo.ecm.core.versioning.NoVersioningPolicyFilter\" />\n    <filter id=\"disable-versioning\">\n      <condition>#{currentDocument.contextData.DisableAutomaticVersioning}</condition>\n    </filter>\n    <filter id=\"note-filter\">\n      <type>Note</type>\n    </filter>\n    <filter id=\"last-contributor-different-filter\">\n      <schema>file</schema>\n      <condition>#{previousDocument.dc.lastContributor != currentDocument.dc.lastContributor}</condition>\n    </filter>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/versioning-default-policies.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.repository.RepositoryService",
          "declaredStartOrder": 100,
          "documentation": "\n    Service to manage core repositories.\n  \n",
          "documentationHtml": "<p>\nService to manage core repositories.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.repository.RepositoryServiceComponent",
          "name": "org.nuxeo.ecm.core.repository.RepositoryServiceComponent",
          "requirements": [
            "org.nuxeo.runtime.cluster.ClusterService",
            "org.nuxeo.ecm.core.api.repository.RepositoryManager"
          ],
          "resolutionOrder": 780,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.repository.RepositoryServiceComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.repository.RepositoryServiceComponent/Services/org.nuxeo.ecm.core.repository.RepositoryService",
              "id": "org.nuxeo.ecm.core.repository.RepositoryService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 772,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.repository.RepositoryServiceComponent\"\n  version=\"1.0\">\n  <documentation>\n    Service to manage core repositories.\n  </documentation>\n\n  <require>org.nuxeo.ecm.core.api.repository.RepositoryManager</require>\n  <require>org.nuxeo.runtime.cluster.ClusterService</require>\n\n  <implementation class=\"org.nuxeo.ecm.core.repository.RepositoryService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.repository.RepositoryService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/RepositoryService.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core",
      "id": "org.nuxeo.ecm.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 5.4.2.qualifier\r\nExport-Package: org.nuxeo.ecm.core,org.nuxeo.ecm.core.api,org.nuxeo.ecm.\r\n core.api.local,org.nuxeo.ecm.core.lifecycle,org.nuxeo.ecm.core.lifecycl\r\n e.event,org.nuxeo.ecm.core.lifecycle.extensions,org.nuxeo.ecm.core.life\r\n cycle.impl,org.nuxeo.ecm.core.model,org.nuxeo.ecm.core.repository,org.n\r\n uxeo.ecm.core.security,org.nuxeo.ecm.core.trash,org.nuxeo.ecm.core.vers\r\n ioning\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core\r\nBundle-Name: org.nuxeo.ecm.core\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nRequire-Bundle: org.nuxeo.ecm.core.api;visibility:=reexport,org.nuxeo.ec\r\n m.core.event\r\nNuxeo-Component: OSGI-INF/CoreService.xml, OSGI-INF/RepositoryService.xm\r\n l, OSGI-INF/CoreExtensions.xml, OSGI-INF/LifeCycleService.xml, OSGI-INF\r\n /LifeCycleCoreExtensions.xml, OSGI-INF/lifecycle-listener-contrib.xml, \r\n OSGI-INF/SecurityService.xml, OSGI-INF/permissions-contrib.xml, OSGI-IN\r\n F/security-policy-contrib.xml, OSGI-INF/trash-migration.xml, OSGI-INF/t\r\n rash-service.xml, OSGI-INF/versioning-service.xml, OSGI-INF/versioning-\r\n document-adapter.xml, OSGI-INF/versioning-default-policies.xml, OSGI-IN\r\n F/versioning-acl-contrib.xml, OSGI-INF/orphanVersionsCleanup-listener-c\r\n ontrib.xml, OSGI-INF/document-resolver-contrib.xml, OSGI-INF/character-\r\n filtering-service.xml, OSGI-INF/character-filtering-service-contrib.xml\r\n , OSGI-INF/documentblobmanager-service.xml, OSGI-INF/uidgenerator-servi\r\n ce.xml, OSGI-INF/uidgenerator-keyvalue-config.xml, OSGI-INF/CoreSession\r\n Service.xml, OSGI-INF/scheduler-contrib.xml, OSGI-INF/deletion-action-c\r\n onfig.xml, OSGI-INF/retention-and-hold-contrib.xml, OSGI-INF/asyncdiges\r\n t-listener-contrib.xml, OSGI-INF/proxy-creation-configuration-contrib.x\r\n ml, OSGI-INF/core-domain-event-producer-contrib.xml, OSGI-INF/scroll-co\r\n ntrib.xml, OSGI-INF/bulk-migration-action-contrib.xml\r\nImport-Package: javax.naming,javax.transaction;version=\"1.1\",javax.trans\r\n action.xa;version=\"1.1\",javax.xml.parsers,org.apache.commons.lang,org.a\r\n pache.commons.logging,org.apache.xml.serialize,org.nuxeo.common.collect\r\n ions,org.nuxeo.common.utils,org.nuxeo.common.xmap.annotation,org.nuxeo.\r\n ecm.core.event,org.nuxeo.ecm.core.event.impl,org.nuxeo.ecm.core.query,o\r\n rg.nuxeo.ecm.core.query.sql.model,org.nuxeo.ecm.core.schema,org.nuxeo.e\r\n cm.core.schema.types,org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.\r\n runtime.api.login,org.nuxeo.runtime.model,org.nuxeo.runtime.services.ev\r\n ent,org.nuxeo.runtime.services.streaming,org.nuxeo.runtime.transaction,\r\n org.osgi.framework;version=\"1.4\",org.w3c.dom\r\nBundle-SymbolicName: org.nuxeo.ecm.core;singleton:=true\r\nEclipse-ExtensibleAPI: true\r\n\r\n",
      "maxResolutionOrder": 780,
      "minResolutionOrder": 83,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.core.event"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-webapp-base",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.webapp.base",
          "org.nuxeo.ecm.webapp.core",
          "org.nuxeo.ecm.webapp.ui"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp",
        "id": "grp:org.nuxeo.ecm.webapp",
        "name": "org.nuxeo.ecm.webapp",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.webapp.base",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.webapp.tree.TreeManagerImpl",
          "declaredStartOrder": null,
          "documentation": "\n    TreeManager component and service declaration.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nTreeManager component and service declaration.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.treeManager",
              "descriptors": [
                "org.nuxeo.ecm.webapp.tree.TreeManagerPluginDescriptor"
              ],
              "documentation": "\n      Plugin extension point for the tree manager service.\n\n      Enables registration of plugins that will control document filter and\n      sorting.\n\n      Example of a plugin registration:\n\n      <code>\n    <treeManagerPlugin name=\"navigation\">\n        <excludedFacets>\n            <facet name=\"HiddenInNavigation\"/>\n        </excludedFacets>\n        <includedFacets>\n            <facet name=\"Folderish\"/>\n        </includedFacets>\n        <excludedTypes>\n            <type>Section</type>\n        </excludedTypes>\n        <sortPropertyPath>dc:title</sortPropertyPath>\n        <filterClass>org.example.com.MyFilterClass</filterClass>\n        <leafFilterClass>org.example.com.MyLeafFilterClass</leafFilterClass>\n        <sorterClass>org.example.com.MySorterClass</sorterClass>\n    </treeManagerPlugin>\n</code>\n\n\n      Example of a plugin using a page provider:\n\n      <code>\n    <treeManagerPlugin name=\"navigation\">\n        <leafFilterClass>\n            org.nuxeo.ecm.webapp.tree.BigFolderLeafFilter\n          </leafFilterClass>\n        <pageProvider>TREE_CHILDREN</pageProvider>\n    </treeManagerPlugin>\n</code>\n<ul>\n    <li>\n          excludedFacets: list of facets used to filter documents that should\n          not appear in the tree\n        </li>\n    <li>\n          includedFacets: list of facets used to filter documents that should\n          appear in the tree\n        </li>\n    <li>\n          excludedTypes: list of types used to filter documents that should not\n          appear in the tree\n        </li>\n    <li>\n          sortPropertyPath: property path used to sort tree node children when\n          using the default sorter\n        </li>\n    <li>\n          filterClass: the filter class has to implement the\n          org.nuxeo.ecm.core.api.Filter interface. If it implements the\n          org.nuxeo.ecm.webapp.tree.DocumentTreeFilter interface, the above\n          filter properties will be set on it.\n        </li>\n    <li>\n          leafFilterClass: filter that can decide that a document is shown with\n          no children. The leaf filter class has to implement the\n          org.nuxeo.ecm.core.api.Filter interface.\n        </li>\n    <li>\n          sorterClass: the sorter class has to implement the\n          org.nuxeo.ecm.core.api.Sorter interface. If it implements the\n          org.nuxeo.ecm.webapp.tree.DocumentTreeSorter interface, the above sort\n          property will be set on it.\n        </li>\n    <li>\n          queryModel: the page provider (with one free parameter that will be\n          replaced by the tree node id) to use to list the children of a\n          document in the tree. When not defined, a core query using the\n          filterClass and sorterClass is used.\n        </li>\n    <li>\n          queryModel: the query model (with one free parameter) to use to list\n          the children of a document in the tree. When not defined, a core query\n          using the filterClass and sorterClass is used. NOW DEPRECATED, use\n          pageProvider instead.\n        </li>\n    <li>\n          orderableQueryModel: the query model (with one free parameter) to use\n          to list the children of an orderable document in the tree. NOW\n          DEPRECATED, use pageProvider instead.\n        </li>\n</ul>\n",
              "documentationHtml": "<p>\nPlugin extension point for the tree manager service.\n</p><p>\nEnables registration of plugins that will control document filter and\nsorting.\n</p><p>\nExample of a plugin registration:\n</p><p>\n</p><pre><code>    &lt;treeManagerPlugin name&#61;&#34;navigation&#34;&gt;\n        &lt;excludedFacets&gt;\n            &lt;facet name&#61;&#34;HiddenInNavigation&#34;/&gt;\n        &lt;/excludedFacets&gt;\n        &lt;includedFacets&gt;\n            &lt;facet name&#61;&#34;Folderish&#34;/&gt;\n        &lt;/includedFacets&gt;\n        &lt;excludedTypes&gt;\n            &lt;type&gt;Section&lt;/type&gt;\n        &lt;/excludedTypes&gt;\n        &lt;sortPropertyPath&gt;dc:title&lt;/sortPropertyPath&gt;\n        &lt;filterClass&gt;org.example.com.MyFilterClass&lt;/filterClass&gt;\n        &lt;leafFilterClass&gt;org.example.com.MyLeafFilterClass&lt;/leafFilterClass&gt;\n        &lt;sorterClass&gt;org.example.com.MySorterClass&lt;/sorterClass&gt;\n    &lt;/treeManagerPlugin&gt;\n</code></pre><p>\nExample of a plugin using a page provider:\n</p><p>\n</p><pre><code>    &lt;treeManagerPlugin name&#61;&#34;navigation&#34;&gt;\n        &lt;leafFilterClass&gt;\n            org.nuxeo.ecm.webapp.tree.BigFolderLeafFilter\n          &lt;/leafFilterClass&gt;\n        &lt;pageProvider&gt;TREE_CHILDREN&lt;/pageProvider&gt;\n    &lt;/treeManagerPlugin&gt;\n</code></pre><p>\n</p><ul><li>\nexcludedFacets: list of facets used to filter documents that should\nnot appear in the tree\n</li><li>\nincludedFacets: list of facets used to filter documents that should\nappear in the tree\n</li><li>\nexcludedTypes: list of types used to filter documents that should not\nappear in the tree\n</li><li>\nsortPropertyPath: property path used to sort tree node children when\nusing the default sorter\n</li><li>\nfilterClass: the filter class has to implement the\norg.nuxeo.ecm.core.api.Filter interface. If it implements the\norg.nuxeo.ecm.webapp.tree.DocumentTreeFilter interface, the above\nfilter properties will be set on it.\n</li><li>\nleafFilterClass: filter that can decide that a document is shown with\nno children. The leaf filter class has to implement the\norg.nuxeo.ecm.core.api.Filter interface.\n</li><li>\nsorterClass: the sorter class has to implement the\norg.nuxeo.ecm.core.api.Sorter interface. If it implements the\norg.nuxeo.ecm.webapp.tree.DocumentTreeSorter interface, the above sort\nproperty will be set on it.\n</li><li>\nqueryModel: the page provider (with one free parameter that will be\nreplaced by the tree node id) to use to list the children of a\ndocument in the tree. When not defined, a core query using the\nfilterClass and sorterClass is used.\n</li><li>\nqueryModel: the query model (with one free parameter) to use to list\nthe children of a document in the tree. When not defined, a core query\nusing the filterClass and sorterClass is used. NOW DEPRECATED, use\npageProvider instead.\n</li><li>\norderableQueryModel: the query model (with one free parameter) to use\nto list the children of an orderable document in the tree. NOW\nDEPRECATED, use pageProvider instead.\n</li></ul>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.treeManager/ExtensionPoints/org.nuxeo.ecm.platform.treeManager--plugin",
              "id": "org.nuxeo.ecm.platform.treeManager--plugin",
              "label": "plugin (org.nuxeo.ecm.platform.treeManager)",
              "name": "plugin",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.treeManager",
          "name": "org.nuxeo.ecm.platform.treeManager",
          "requirements": [],
          "resolutionOrder": 624,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.treeManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.treeManager/Services/org.nuxeo.ecm.webapp.tree.TreeManager",
              "id": "org.nuxeo.ecm.webapp.tree.TreeManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 881,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.treeManager\">\n\n  <documentation>\n    TreeManager component and service declaration.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.webapp.tree.TreeManagerImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.webapp.tree.TreeManager\" />\n  </service>\n\n  <extension-point name=\"plugin\">\n    <documentation>\n      Plugin extension point for the tree manager service.\n\n      Enables registration of plugins that will control document filter and\n      sorting.\n\n      Example of a plugin registration:\n\n      <code>\n        <treeManagerPlugin name=\"navigation\">\n          <excludedFacets>\n            <facet name=\"HiddenInNavigation\" />\n          </excludedFacets>\n          <includedFacets>\n            <facet name=\"Folderish\" />\n          </includedFacets>\n          <excludedTypes>\n            <type>Section</type>\n          </excludedTypes>\n          <sortPropertyPath>dc:title</sortPropertyPath>\n          <filterClass>org.example.com.MyFilterClass</filterClass>\n          <leafFilterClass>org.example.com.MyLeafFilterClass</leafFilterClass>\n          <sorterClass>org.example.com.MySorterClass</sorterClass>\n        </treeManagerPlugin>\n      </code>\n\n      Example of a plugin using a page provider:\n\n      <code>\n        <treeManagerPlugin name=\"navigation\">\n          <leafFilterClass>\n            org.nuxeo.ecm.webapp.tree.BigFolderLeafFilter\n          </leafFilterClass>\n          <pageProvider>TREE_CHILDREN</pageProvider>\n        </treeManagerPlugin>\n      </code>\n\n      <ul>\n        <li>\n          excludedFacets: list of facets used to filter documents that should\n          not appear in the tree\n        </li>\n        <li>\n          includedFacets: list of facets used to filter documents that should\n          appear in the tree\n        </li>\n        <li>\n          excludedTypes: list of types used to filter documents that should not\n          appear in the tree\n        </li>\n        <li>\n          sortPropertyPath: property path used to sort tree node children when\n          using the default sorter\n        </li>\n        <li>\n          filterClass: the filter class has to implement the\n          org.nuxeo.ecm.core.api.Filter interface. If it implements the\n          org.nuxeo.ecm.webapp.tree.DocumentTreeFilter interface, the above\n          filter properties will be set on it.\n        </li>\n        <li>\n          leafFilterClass: filter that can decide that a document is shown with\n          no children. The leaf filter class has to implement the\n          org.nuxeo.ecm.core.api.Filter interface.\n        </li>\n        <li>\n          sorterClass: the sorter class has to implement the\n          org.nuxeo.ecm.core.api.Sorter interface. If it implements the\n          org.nuxeo.ecm.webapp.tree.DocumentTreeSorter interface, the above sort\n          property will be set on it.\n        </li>\n        <li>\n          queryModel: the page provider (with one free parameter that will be\n          replaced by the tree node id) to use to list the children of a\n          document in the tree. When not defined, a core query using the\n          filterClass and sorterClass is used.\n        </li>\n        <li>\n          queryModel: the query model (with one free parameter) to use to list\n          the children of a document in the tree. When not defined, a core query\n          using the filterClass and sorterClass is used. NOW DEPRECATED, use\n          pageProvider instead.\n        </li>\n        <li>\n          orderableQueryModel: the query model (with one free parameter) to use\n          to list the children of an orderable document in the tree. NOW\n          DEPRECATED, use pageProvider instead.\n        </li>\n      </ul>\n\n\n    </documentation>\n    <object class=\"org.nuxeo.ecm.webapp.tree.TreeManagerPluginDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxtreemanager-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "Default configuration for Nuxeo EP tree\n",
          "documentationHtml": "<p>\nDefault configuration for Nuxeo EP tree</p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Default configuration for the Nuxeo EP tree.\n\n      Displays only Folderish objects, not marked as hidden in navigation, and\n      sorts by dc:title property. Folders with the BigFolder facet are shown\n      without any children.\n    \n",
              "documentationHtml": "<p>\nDefault configuration for the Nuxeo EP tree.\n</p><p>\nDisplays only Folderish objects, not marked as hidden in navigation, and\nsorts by dc:title property. Folders with the BigFolder facet are shown\nwithout any children.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.treeManager--plugin",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.treeManager.contrib/Contributions/org.nuxeo.ecm.platform.treeManager.contrib--plugin",
              "id": "org.nuxeo.ecm.platform.treeManager.contrib--plugin",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.treeManager",
                "name": "org.nuxeo.ecm.platform.treeManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"plugin\" target=\"org.nuxeo.ecm.platform.treeManager\">\n\n    <documentation>\n      Default configuration for the Nuxeo EP tree.\n\n      Displays only Folderish objects, not marked as hidden in navigation, and\n      sorts by dc:title property. Folders with the BigFolder facet are shown\n      without any children.\n    </documentation>\n\n    <treeManagerPlugin name=\"navigation\">\n      <leafFilterClass>\n        org.nuxeo.ecm.webapp.tree.BigFolderLeafFilter\n      </leafFilterClass>\n      <pageProvider>tree_children</pageProvider>\n    </treeManagerPlugin>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.treeManager.contrib",
          "name": "org.nuxeo.ecm.platform.treeManager.contrib",
          "requirements": [],
          "resolutionOrder": 625,
          "services": [],
          "startOrder": 518,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.treeManager.contrib\">\n\n  <documentation>Default configuration for Nuxeo EP tree</documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.treeManager\" point=\"plugin\">\n\n    <documentation>\n      Default configuration for the Nuxeo EP tree.\n\n      Displays only Folderish objects, not marked as hidden in navigation, and\n      sorts by dc:title property. Folders with the BigFolder facet are shown\n      without any children.\n    </documentation>\n\n    <treeManagerPlugin name=\"navigation\">\n      <leafFilterClass>\n        org.nuxeo.ecm.webapp.tree.BigFolderLeafFilter\n      </leafFilterClass>\n      <pageProvider>tree_children</pageProvider>\n    </treeManagerPlugin>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxtreemanager-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.seam.debug.action/Contributions/org.nuxeo.ecm.webapp.seam.debug.action--actions",
              "id": "org.nuxeo.ecm.webapp.seam.debug.action--actions",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action enabled=\"true\" id=\"seamReload\" label=\"Reload Seam\" link=\"#{seamReload.doReload}\" order=\"50\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>seamHotReloadIsEnabled</filter-id>\n    </action>\n\n    <action enabled=\"true\" id=\"devModeFlush\" label=\"Dev mode: force flush\" link=\"#{seamReload.doFlush}\" order=\"100\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>devModeEnabledForAdmin</filter-id>\n    </action>\n\n    <action id=\"activateLayoutDevMode\" label=\"Activate UI Development mode\" link=\"#{nuxeoLayoutManagerBean.setDevModeSet(true)}\" order=\"100\">\n      <category>USER_SERVICES</category>\n      <filter-id>layoutDevModeDisabled</filter-id>\n    </action>\n\n    <action id=\"deactivateLayoutDevMode\" label=\"Deactivate UI Development mode\" link=\"#{nuxeoLayoutManagerBean.setDevModeSet(false)}\" order=\"100\">\n      <category>USER_SERVICES</category>\n      <filter-id>layoutDevModeEnabled</filter-id>\n    </action>\n\n    <!-- NXP-7025: disable pdf export on doc -->\n    <!--\n      <action id=\"pdfExport\" link=\"pdf\" order=\"18\"\n      label=\"label.exportview.pdfExport\" icon=\"/icons/pdf_export.png\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      </action>\n    -->\n\n    <action icon=\"/icons/pdf_export.png\" id=\"exportViewPDFExport\" label=\"label.exportview.pdfExport\" link=\"#{restHelper.getDocumentUrl(currentDocument, 'pdf', true)}\" order=\"0\">\n      <category>DOCUMENT_EXPORT_VIEW_ACTION</category>\n    </action>\n\n    <action icon=\"/icons/action_export_zip.gif\" id=\"exportViewZipBlobExport\" label=\"label.exportview.zipBlobExport\" link=\"#{clipboardActions.exportWorklistAsZip(currentDocument)}\">\n      <category>DOCUMENT_EXPORT_VIEW_COMMAND_ACTION</category>\n    </action>\n\n    <!-- Contextual tools buttons contrib NXP-9039 -->\n    <action icon=\"/icons/contextual_menu/unlocked.png\" id=\"documentLock\" label=\"command.lock\" link=\"#{lockActions.lockCurrentDocument}\" order=\"10\" type=\"link\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_lock</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/contextual_menu/locked.png\" id=\"documentUnlock\" label=\"command.unlock\" link=\"#{lockActions.unlockCurrentDocument}\" order=\"10\" type=\"link\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_unlock</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action accessKey=\"k\" icon=\"/icons/contextual_menu/share.png\" id=\"permalinkAction\" label=\"label.permalink\" order=\"20\" type=\"fancybox\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <properties>\n        <property name=\"include\">/incl/permalink_box.xhtml</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/contextual_menu/subscribe.png\" id=\"subscribesAllDocNotifications\" label=\"label.subscriptions.follow\" link=\"#{subscriptionAction.updateAllSubscriptions}\" order=\"40\" type=\"link\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>hasNoSubscriptions</filter-id>\n      <filter-id>canSubscribe</filter-id>\n      <filter-id>isNotVersion</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/contextual_menu/unsubscribe.png\" id=\"unsubscribesAllDocNotifications\" label=\"label.subscriptions.unfollow\" link=\"#{subscriptionAction.updateAllSubscriptions}\" order=\"40\" type=\"link\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>hasSubscriptions</filter-id>\n      <filter-id>canSubscribe</filter-id>\n      <filter-id>isNotVersion</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/action_add.gif\" id=\"addCurrentDocumentToWorklist\" immediate=\"true\" label=\"help.command.clipboard.addworklist\" link=\"#{operationActionBean.doOperation('addCurrentDocumentToWorklist')}\" order=\"60\" type=\"link\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>not_folder</filter-id>\n      <filter-id>not_anonymous</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/printer.gif\" id=\"print\" label=\"label.print\" link=\"#{restHelper.doPrint(themeActions.defaultTheme)}\" order=\"70\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"restoreVersion\" immediate=\"true\" label=\"command.undeleteDocs\" link=\"#{deleteActions.restoreCurrentDocument}\" order=\"1\">\n      <category>DOCUMENT_SUMMARY_CUSTOM_ACTIONS</category>\n      <filter-id>restoreVersionDisplay</filter-id>\n    </action>\n\n    <action icon=\"/icons/pdf.png\" id=\"blobToPDF\" label=\"label.document.generatePdf\" link=\"#{conversionActions.generatePdfFileFromBlobHolder(currentDocument, currentDocumentAsBlobHolder)}\" order=\"200\">\n      <category>BLOB_ACTIONS</category>\n      <filter-id>isMainBlob</filter-id>\n      <filter-id>isExportableToPDF</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.seam.debug.action/Contributions/org.nuxeo.ecm.webapp.seam.debug.action--filters",
              "id": "org.nuxeo.ecm.webapp.seam.debug.action--filters",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"restoreVersionDisplay\">\n      <rule grant=\"true\">\n        <condition>#{deleteActions.restoreActionDisplay()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"devModeEnabledForAdmin\">\n      <rule grant=\"true\">\n        <condition>#{seamReload.getCanTriggerFlush()}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"seamHotReloadIsEnabled\">\n      <rule grant=\"true\">\n        <condition>#{seamHotReloadIsEnabled}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"layoutDevModeEnabled\">\n      <rule grant=\"true\">\n        <condition>#{nxDevModeSet and nuxeoLayoutManagerBean.devModeSet}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"layoutDevModeDisabled\">\n      <rule grant=\"true\">\n        <condition>#{nxDevModeSet and not nuxeoLayoutManagerBean.devModeSet}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"isNotVersion\">\n      <rule grant=\"true\">\n        <condition>!document.isVersion()</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"hasSubscriptions\">\n      <rule grant=\"true\">\n        <condition>#{subscriptionAction.getSelectedNotifications().size() &gt; 0}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"hasNoSubscriptions\">\n      <rule grant=\"true\">\n        <condition>#{subscriptionAction.getSelectedNotifications().size() == 0}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canSubscribe\">\n      <rule grant=\"false\">\n        <type>Domain</type>\n        <type>WorkspaceRoot</type>\n      </rule>\n    </filter>\n\n    <filter id=\"documentHasBlobs\">\n      <rule grant=\"true\">\n        <condition>\n          #{popupHelper.isDocumentHasBlobs(document)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"hasNote\">\n      <rule grant=\"true\">\n        <schema>note</schema>\n      </rule>\n    </filter>\n\n    <filter id=\"notHasNote\">\n      <rule grant=\"false\">\n        <schema>note</schema>\n      </rule>\n    </filter>\n\n    <filter id=\"denyForFile\">\n      <rule grant=\"false\">\n        <type>File</type>\n      </rule>\n    </filter>\n\n    <filter id=\"hasDublincore\">\n      <rule grant=\"true\">\n        <schema>dublincore</schema>\n      </rule>\n    </filter>\n\n    <filter id=\"canToggleLayoutToEditMode\">\n      <documentation>\n        <p>\n          Filter used by the \"toggleableLayoutWithForms\" widget type\n          to check\n          wether the \"edit\" button should be displayed.\n        </p>\n        <p>\n          This filter is a combination of default filters \"edit\" and\n          \"mutable_document\" usually used to control rendering of the \"edit\" tab\n          on document views.\n        </p>\n        @since 5.6\n      </documentation>\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n      <rule grant=\"false\">\n        <facet>Immutable</facet>\n      </rule>\n      <rule grant=\"false\">\n        <condition>\n          document.isTrashed()\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"isMainBlob\">\n      <rule grant=\"true\">\n        <condition>#{blobXPath == blobHolderGenerator.getBlobHolder(document).xpath}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"isExportableToPDF\">\n      <rule grant=\"true\">\n        <condition>#{conversionActions.isExportableToPDF(blob)}</condition>\n      </rule>\n    </filter>\n\n    <!--\n    Not used since 10.2, kept it for backward compatibility\n    -->\n    <filter id=\"canFollow\">\n      <rule grant=\"true\">\n        <condition>#{subscriptionAction.canFollow()}</condition>\n      </rule>\n    </filter>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--typeCompatibility",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.seam.debug.action/Contributions/org.nuxeo.ecm.webapp.seam.debug.action--typeCompatibility",
              "id": "org.nuxeo.ecm.webapp.seam.debug.action--typeCompatibility",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"typeCompatibility\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <typeCompatibility type=\"link\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <category>DOCUMENT_HEADER_ACTIONS_LIST</category>\n      <category>DEFAULT_LIST</category>\n      <category>CLIPBOARD_LIST</category>\n      <category>CURRENT_SELECTION_COPY</category>\n      <category>CLIPBOARD_PASTE</category>\n      <category>CURRENT_SELECTION_ADDTOLIST</category>\n      <category>CURRENT_SELECTION_TRASH</category>\n      <category>CREATE_DOCUMENT_FORM</category>\n      <category>EDIT_DOCUMENT_FORM</category>\n      <category>USER_SERVICES</category>\n      <category>USER_MENU_ACTIONS</category>\n      <category>SUBVIEW_UPPER_LIST</category>\n    </typeCompatibility>\n\n    <typeCompatibility type=\"bare_link\">\n      <category>DOCUMENT_HEADER_ACTIONS_LIST_HREF</category>\n      <category>SUBVIEW_UPPER_LIST_HREF</category>\n    </typeCompatibility>\n\n    <typeCompatibility type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <category>TAB_MANAGE_sub_tab</category>\n      <category>TAB_CONTENT_HISTORY_sub_tab</category>\n    </typeCompatibility>\n\n    <typeCompatibility type=\"main_tab\">\n      <category>MAIN_TABS</category>\n    </typeCompatibility>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.seam.debug.action",
          "name": "org.nuxeo.ecm.webapp.seam.debug.action",
          "requirements": [],
          "resolutionOrder": 626,
          "services": [],
          "startOrder": 651,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.webapp.seam.debug.action\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"seamReload\" link=\"#{seamReload.doReload}\" enabled=\"true\"\n      label=\"Reload Seam\" order=\"50\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>seamHotReloadIsEnabled</filter-id>\n    </action>\n\n    <action id=\"devModeFlush\" link=\"#{seamReload.doFlush}\" enabled=\"true\"\n      label=\"Dev mode: force flush\" order=\"100\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>devModeEnabledForAdmin</filter-id>\n    </action>\n\n    <action id=\"activateLayoutDevMode\" link=\"#{nuxeoLayoutManagerBean.setDevModeSet(true)}\"\n      label=\"Activate UI Development mode\" order=\"100\">\n      <category>USER_SERVICES</category>\n      <filter-id>layoutDevModeDisabled</filter-id>\n    </action>\n\n    <action id=\"deactivateLayoutDevMode\" link=\"#{nuxeoLayoutManagerBean.setDevModeSet(false)}\"\n      label=\"Deactivate UI Development mode\" order=\"100\">\n      <category>USER_SERVICES</category>\n      <filter-id>layoutDevModeEnabled</filter-id>\n    </action>\n\n    <!-- NXP-7025: disable pdf export on doc -->\n    <!--\n      <action id=\"pdfExport\" link=\"pdf\" order=\"18\"\n      label=\"label.exportview.pdfExport\" icon=\"/icons/pdf_export.png\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      </action>\n    -->\n\n    <action id=\"exportViewPDFExport\"\n      link=\"#{restHelper.getDocumentUrl(currentDocument, 'pdf', true)}\" order=\"0\"\n      label=\"label.exportview.pdfExport\" icon=\"/icons/pdf_export.png\">\n      <category>DOCUMENT_EXPORT_VIEW_ACTION</category>\n    </action>\n\n    <action id=\"exportViewZipBlobExport\" link=\"#{clipboardActions.exportWorklistAsZip(currentDocument)}\"\n      label=\"label.exportview.zipBlobExport\" icon=\"/icons/action_export_zip.gif\">\n      <category>DOCUMENT_EXPORT_VIEW_COMMAND_ACTION</category>\n    </action>\n\n    <!-- Contextual tools buttons contrib NXP-9039 -->\n    <action id=\"documentLock\" link=\"#{lockActions.lockCurrentDocument}\"\n      order=\"10\" label=\"command.lock\" type=\"link\" icon=\"/icons/contextual_menu/unlocked.png\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_lock</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"documentUnlock\" link=\"#{lockActions.unlockCurrentDocument}\"\n      order=\"10\" label=\"command.unlock\" type=\"link\" icon=\"/icons/contextual_menu/locked.png\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_unlock</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"permalinkAction\" order=\"20\" label=\"label.permalink\" type=\"fancybox\"\n      icon=\"/icons/contextual_menu/share.png\" accessKey=\"k\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <properties>\n        <property name=\"include\">/incl/permalink_box.xhtml</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"subscribesAllDocNotifications\" link=\"#{subscriptionAction.updateAllSubscriptions}\"\n      order=\"40\" label=\"label.subscriptions.follow\" type=\"link\"\n      icon=\"/icons/contextual_menu/subscribe.png\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>hasNoSubscriptions</filter-id>\n      <filter-id>canSubscribe</filter-id>\n      <filter-id>isNotVersion</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"unsubscribesAllDocNotifications\" link=\"#{subscriptionAction.updateAllSubscriptions}\"\n      order=\"40\" label=\"label.subscriptions.unfollow\" type=\"link\"\n      icon=\"/icons/contextual_menu/unsubscribe.png\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>hasSubscriptions</filter-id>\n      <filter-id>canSubscribe</filter-id>\n      <filter-id>isNotVersion</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"addCurrentDocumentToWorklist\"\n      link=\"#{operationActionBean.doOperation('addCurrentDocumentToWorklist')}\"\n      order=\"60\" label=\"help.command.clipboard.addworklist\" type=\"link\"\n      icon=\"/icons/action_add.gif\" immediate=\"true\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>not_folder</filter-id>\n      <filter-id>not_anonymous</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"print\" link=\"#{restHelper.doPrint(themeActions.defaultTheme)}\"\n      order=\"70\" label=\"label.print\" icon=\"/icons/printer.gif\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"restoreVersion\" link=\"#{deleteActions.restoreCurrentDocument}\"\n      order=\"1\" label=\"command.undeleteDocs\" immediate=\"true\">\n      <category>DOCUMENT_SUMMARY_CUSTOM_ACTIONS</category>\n      <filter-id>restoreVersionDisplay</filter-id>\n    </action>\n\n    <action id=\"blobToPDF\" link=\"#{conversionActions.generatePdfFileFromBlobHolder(currentDocument, currentDocumentAsBlobHolder)}\"\n            order=\"200\" label=\"label.document.generatePdf\" icon=\"/icons/pdf.png\">\n      <category>BLOB_ACTIONS</category>\n      <filter-id>isMainBlob</filter-id>\n      <filter-id>isExportableToPDF</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"restoreVersionDisplay\">\n      <rule grant=\"true\">\n        <condition>#{deleteActions.restoreActionDisplay()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"devModeEnabledForAdmin\">\n      <rule grant=\"true\">\n        <condition>#{seamReload.getCanTriggerFlush()}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"seamHotReloadIsEnabled\">\n      <rule grant=\"true\">\n        <condition>#{seamHotReloadIsEnabled}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"layoutDevModeEnabled\">\n      <rule grant=\"true\">\n        <condition>#{nxDevModeSet and nuxeoLayoutManagerBean.devModeSet}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"layoutDevModeDisabled\">\n      <rule grant=\"true\">\n        <condition>#{nxDevModeSet and not nuxeoLayoutManagerBean.devModeSet}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"isNotVersion\">\n      <rule grant=\"true\">\n        <condition>!document.isVersion()</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"hasSubscriptions\">\n      <rule grant=\"true\">\n        <condition>#{subscriptionAction.getSelectedNotifications().size() > 0}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"hasNoSubscriptions\">\n      <rule grant=\"true\">\n        <condition>#{subscriptionAction.getSelectedNotifications().size() == 0}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canSubscribe\">\n      <rule grant=\"false\">\n        <type>Domain</type>\n        <type>WorkspaceRoot</type>\n      </rule>\n    </filter>\n\n    <filter id=\"documentHasBlobs\">\n      <rule grant=\"true\">\n        <condition>\n          #{popupHelper.isDocumentHasBlobs(document)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"hasNote\">\n      <rule grant=\"true\">\n        <schema>note</schema>\n      </rule>\n    </filter>\n\n    <filter id=\"notHasNote\">\n      <rule grant=\"false\">\n        <schema>note</schema>\n      </rule>\n    </filter>\n\n    <filter id=\"denyForFile\">\n      <rule grant=\"false\">\n        <type>File</type>\n      </rule>\n    </filter>\n\n    <filter id=\"hasDublincore\">\n      <rule grant=\"true\">\n        <schema>dublincore</schema>\n      </rule>\n    </filter>\n\n    <filter id=\"canToggleLayoutToEditMode\">\n      <documentation>\n        <p>\n          Filter used by the \"toggleableLayoutWithForms\" widget type\n          to check\n          wether the \"edit\" button should be displayed.\n        </p>\n        <p>\n          This filter is a combination of default filters \"edit\" and\n          \"mutable_document\" usually used to control rendering of the \"edit\" tab\n          on document views.\n        </p>\n        @since 5.6\n      </documentation>\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n      <rule grant=\"false\">\n        <facet>Immutable</facet>\n      </rule>\n      <rule grant=\"false\">\n        <condition>\n          document.isTrashed()\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"isMainBlob\">\n      <rule grant=\"true\">\n        <condition>#{blobXPath == blobHolderGenerator.getBlobHolder(document).xpath}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"isExportableToPDF\">\n      <rule grant=\"true\">\n        <condition>#{conversionActions.isExportableToPDF(blob)}</condition>\n      </rule>\n    </filter>\n\n    <!--\n    Not used since 10.2, kept it for backward compatibility\n    -->\n    <filter id=\"canFollow\">\n      <rule grant=\"true\">\n        <condition>#{subscriptionAction.canFollow()}</condition>\n      </rule>\n    </filter>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"typeCompatibility\">\n\n    <typeCompatibility type=\"link\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <category>DOCUMENT_HEADER_ACTIONS_LIST</category>\n      <category>DEFAULT_LIST</category>\n      <category>CLIPBOARD_LIST</category>\n      <category>CURRENT_SELECTION_COPY</category>\n      <category>CLIPBOARD_PASTE</category>\n      <category>CURRENT_SELECTION_ADDTOLIST</category>\n      <category>CURRENT_SELECTION_TRASH</category>\n      <category>CREATE_DOCUMENT_FORM</category>\n      <category>EDIT_DOCUMENT_FORM</category>\n      <category>USER_SERVICES</category>\n      <category>USER_MENU_ACTIONS</category>\n      <category>SUBVIEW_UPPER_LIST</category>\n    </typeCompatibility>\n\n    <typeCompatibility type=\"bare_link\">\n      <category>DOCUMENT_HEADER_ACTIONS_LIST_HREF</category>\n      <category>SUBVIEW_UPPER_LIST_HREF</category>\n    </typeCompatibility>\n\n    <typeCompatibility type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <category>TAB_MANAGE_sub_tab</category>\n      <category>TAB_CONTENT_HISTORY_sub_tab</category>\n    </typeCompatibility>\n\n    <typeCompatibility type=\"main_tab\">\n      <category>MAIN_TABS</category>\n    </typeCompatibility>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService--restlets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.seam.debug.restAPI.contrib/Contributions/org.nuxeo.ecm.webapp.seam.debug.restAPI.contrib--restlets",
              "id": "org.nuxeo.ecm.webapp.seam.debug.restAPI.contrib--restlets",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
                "name": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"restlets\" target=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\">\n\n    <restletPlugin class=\"org.nuxeo.ecm.webapp.seam.NuxeoSeamHotReloadRestTrigger\" enabled=\"true\" name=\"seamReloadTrigger\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/seamReload</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.seam.debug.restAPI.contrib",
          "name": "org.nuxeo.ecm.webapp.seam.debug.restAPI.contrib",
          "requirements": [],
          "resolutionOrder": 627,
          "services": [],
          "startOrder": 652,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webapp.seam.debug.restAPI.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\"\n      point=\"restlets\">\n\n    <restletPlugin\n        name=\"seamReloadTrigger\"\n        class=\"org.nuxeo.ecm.webapp.seam.NuxeoSeamHotReloadRestTrigger\"\n        enabled=\"true\"\n        useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/seamReload</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/restAPI-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.webapp.directory.DirectoryTreeService",
          "declaredStartOrder": null,
          "documentation": "\n    The DirectoryTreeService is used to build tree-shaped explorer like\n    navigation menus (usging the &lt;richfaces:tree /&gt; components) from a hierarchical\n    set of directories (with schemas \"vocabulary\" and \"xvocabulary\").\n\n    DirectoryTreeDescriptors also reference a QueryModel to update on node selection\n    and a JSF view to display on node selection.\n\n    This is typically used to display results of a query where documents are filtered\n    upon a hierachical property (such as the dc:coverage metadata for instance).\n\n    @author Olivier Grisel (og@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe DirectoryTreeService is used to build tree-shaped explorer like\nnavigation menus (usging the &lt;richfaces:tree /&gt; components) from a hierarchical\nset of directories (with schemas &#34;vocabulary&#34; and &#34;xvocabulary&#34;).\n</p><p>\nDirectoryTreeDescriptors also reference a QueryModel to update on node selection\nand a JSF view to display on node selection.\n</p><p>\nThis is typically used to display results of a query where documents are filtered\nupon a hierachical property (such as the dc:coverage metadata for instance).\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webapp.directory.DirectoryTreeService",
              "descriptors": [
                "org.nuxeo.ecm.webapp.directory.DirectoryTreeDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.directory.DirectoryTreeService/ExtensionPoints/org.nuxeo.ecm.webapp.directory.DirectoryTreeService--trees",
              "id": "org.nuxeo.ecm.webapp.directory.DirectoryTreeService--trees",
              "label": "trees (org.nuxeo.ecm.webapp.directory.DirectoryTreeService)",
              "name": "trees",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.directory.DirectoryTreeService",
          "name": "org.nuxeo.ecm.webapp.directory.DirectoryTreeService",
          "requirements": [
            "org.nuxeo.ecm.platform.actions.ActionService"
          ],
          "resolutionOrder": 628,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.webapp.directory.DirectoryTreeService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.directory.DirectoryTreeService/Services/org.nuxeo.ecm.webapp.directory.DirectoryTreeService",
              "id": "org.nuxeo.ecm.webapp.directory.DirectoryTreeService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 905,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.webapp.directory.DirectoryTreeService\">\n\n  <!-- since 6.0, automatically registers actions -->\n  <require>org.nuxeo.ecm.platform.actions.ActionService</require>\n\n  <documentation>\n    The DirectoryTreeService is used to build tree-shaped explorer like\n    navigation menus (usging the &lt;richfaces:tree /&gt; components) from a hierarchical\n    set of directories (with schemas \"vocabulary\" and \"xvocabulary\").\n\n    DirectoryTreeDescriptors also reference a QueryModel to update on node selection\n    and a JSF view to display on node selection.\n\n    This is typically used to display results of a query where documents are filtered\n    upon a hierachical property (such as the dc:coverage metadata for instance).\n\n    @author Olivier Grisel (og@nuxeo.com)\n  </documentation>\n\n  <!-- XXX JC : see why this requirement\n  <require>org.nuxeo.ecm.directory.DirectoryServiceImpl</require>\n -->\n  <implementation\n          class=\"org.nuxeo.ecm.webapp.directory.DirectoryTreeService\" />\n  <service>\n    <provide interface=\"org.nuxeo.ecm.webapp.directory.DirectoryTreeService\" />\n  </service>\n  <extension-point name=\"trees\">\n    <object\n            class=\"org.nuxeo.ecm.webapp.directory.DirectoryTreeDescriptor\" />\n  </extension-point>\n  <documentation>\n    Registry for DirectoryTreeDescriptor instances used to build\n    DirectoryTreeNodes.\n\n    Extension point supports override and enable attribute in descriptor\n\n    @author Olivier Grisel (og@nuxeo.com)\n  </documentation>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/directorytreemanager-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService",
          "declaredStartOrder": null,
          "documentation": "\n    The DocumentsLists service registers lists of documents.\n    These lists of documents can be used for :\n    - Clipboard : lists of documents that can be copied or pasted\n    - Workling List : the list of documents user is working on (mass processing)\n    - List of selected document inside a container\n\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe DocumentsLists service registers lists of documents.\nThese lists of documents can be used for :\n- Clipboard : lists of documents that can be copied or pasted\n- Workling List : the list of documents user is working on (mass processing)\n- List of selected document inside a container\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService",
              "descriptors": [
                "org.nuxeo.ecm.webapp.documentsLists.DocumentsListDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService/ExtensionPoints/org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService--list",
              "id": "org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService--list",
              "label": "list (org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService)",
              "name": "list",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService",
          "name": "org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService",
          "requirements": [],
          "resolutionOrder": 629,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService/Services/org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService",
              "id": "org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 906,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService\">\n  <implementation\n          class=\"org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService\" />\n  <service>\n    <provide interface=\"org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService\" />\n  </service>\n\n  <documentation>\n    The DocumentsLists service registers lists of documents.\n    These lists of documents can be used for :\n    - Clipboard : lists of documents that can be copied or pasted\n    - Workling List : the list of documents user is working on (mass processing)\n    - List of selected document inside a container\n\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n  <extension-point name=\"list\">\n    <object\n            class=\"org.nuxeo.ecm.webapp.documentsLists.DocumentsListDescriptor\" />\n  </extension-point>\n  <documentation>\n    Registry for new Lists\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n</component>\n",
          "xmlFileName": "/OSGI-INF/documentslists-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent--remotableSeamBeans",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.baseContrib/Contributions/org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.baseContrib--remotableSeamBeans",
              "id": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.baseContrib--remotableSeamBeans",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent",
                "name": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"remotableSeamBeans\" target=\"org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent\">\n      <remotableSeamBeans>\n          <beans>\n              <bean>clipboardActions</bean>\n          </beans>\n      </remotableSeamBeans>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.baseContrib",
          "name": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.baseContrib",
          "requirements": [
            "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent"
          ],
          "resolutionOrder": 630,
          "services": [],
          "startOrder": 530,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.baseContrib\">\n\n  <require>org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent\" point=\"remotableSeamBeans\">\n      <remotableSeamBeans>\n          <beans>\n              <bean>clipboardActions</bean>\n          </beans>\n      </remotableSeamBeans>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/seamremotingjsbuilder-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.layouts.search.contrib/Contributions/org.nuxeo.ecm.webapp.layouts.search.contrib--widgets",
              "id": "org.nuxeo.ecm.webapp.layouts.search.contrib--widgets",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"search_title\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.title</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:title</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_description\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.description</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:description</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_nature\" type=\"suggestManyDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.nature</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:nature</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">nature</property>\n        <property name=\"localize\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_subjects\" type=\"suggestManyDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.subject</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:subjects</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"dbl10n\">true</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">l10nsubjects</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_rights\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.rights</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:rights</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_source\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.source</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:source</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_coverage\" type=\"suggestManyDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.coverage</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:coverage</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"dbl10n\">true</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">l10ncoverage</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_created_min\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.creationDateBetween</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:created_min</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">00:00</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_created_max\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.search.and</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:created_max</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">23:59</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_modified_min\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.modificationDateBetween</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:modified_min</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">00:00</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_modified_max\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.search.and</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:modified_max</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">23:59</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_issued_min\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.issueDateBetween</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:issued_min</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">00:00</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_issued_max\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.search.and</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:issued_max</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">23:59</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_validated_min\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.validationDateBetween</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:valid_min</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">00:00</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_validated_max\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.search.and</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:valid_max</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">23:59</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_expired_min\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.expirationDateBetween</label>\n      </labels>\n      <fields>\n        <field>search:expired_min</field>\n      </fields>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">00:00</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_expired_max\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.search.and</label>\n      </labels>\n      <fields>\n        <field>search:expired_max</field>\n      </fields>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">23:59</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_format\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.format</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:format</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_path\" type=\"select_path_tree\">\n      <labels>\n        <label mode=\"any\">label.advanced_search.searchpath</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:searchpath</field>\n      </fields>\n      <properties>\n        <property name=\"labelOpenPopUp\">label.relation.addPath</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_language\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.language</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:language</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_deleted_documents\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.search.deleted.documents</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:currentLifeCycleState</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/search_deleted_documents_widget.xhtml\n        </property>\n      </properties>\n      <widgetModes>\n        <mode value=\"any\">\n          #{nxu:test(deleteActions.trashManagementEnabled, mode, 'hidden')}\n        </mode>\n      </widgetModes>\n    </widget>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.layouts.search.contrib",
          "name": "org.nuxeo.ecm.webapp.layouts.search.contrib",
          "requirements": [],
          "resolutionOrder": 631,
          "services": [],
          "startOrder": 647,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.webapp.layouts.search.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"search_title\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.title</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:title</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_description\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.description</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:description</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_nature\" type=\"suggestManyDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.nature</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:nature</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">nature</property>\n        <property name=\"localize\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_subjects\" type=\"suggestManyDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.subject</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:subjects</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"dbl10n\">true</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">l10nsubjects</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_rights\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.rights</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:rights</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_source\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.source</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:source</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_coverage\" type=\"suggestManyDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.coverage</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:coverage</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"dbl10n\">true</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">l10ncoverage</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_created_min\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.creationDateBetween</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:created_min</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">00:00</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_created_max\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.search.and</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:created_max</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">23:59</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_modified_min\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.modificationDateBetween</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:modified_min</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">00:00</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_modified_max\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.search.and</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:modified_max</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">23:59</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_issued_min\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.issueDateBetween</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:issued_min</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">00:00</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_issued_max\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.search.and</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:issued_max</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">23:59</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_validated_min\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.validationDateBetween</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:valid_min</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">00:00</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_validated_max\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.search.and</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:valid_max</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">23:59</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_expired_min\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.expirationDateBetween</label>\n      </labels>\n      <fields>\n        <field>search:expired_min</field>\n      </fields>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">00:00</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_expired_max\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.search.and</label>\n      </labels>\n      <fields>\n        <field>search:expired_max</field>\n      </fields>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateAndTimeFormatter()}</property>\n        <property name=\"defaultTime\">23:59</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_format\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.format</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:format</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_path\" type=\"select_path_tree\">\n      <labels>\n        <label mode=\"any\">label.advanced_search.searchpath</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:searchpath</field>\n      </fields>\n      <properties>\n        <property name=\"labelOpenPopUp\">label.relation.addPath</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_language\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.language</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:language</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"search_deleted_documents\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.search.deleted.documents</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>search:currentLifeCycleState</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/search_deleted_documents_widget.xhtml\n        </property>\n      </properties>\n      <widgetModes>\n        <mode value=\"any\">\n          #{nxu:test(deleteActions.trashManagementEnabled, mode, 'hidden')}\n        </mode>\n      </widgetModes>\n    </widget>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/search-layouts-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.widgts/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.widgts--widgettypes",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.widgts--widgettypes",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"life_cycle_transitions\">\n      <configuration>\n        <title>Life cycle transitions</title>\n        <description>\n          This widget type displays a selection of available life cycle\n          transitions\n          given a life cycle state and a life cycle policy.\n          <br/>\n          It requires the configuration of the first field to map to a String\n          value storing the chosen life cycle transition.\n          <br/>\n          It needs the following properties configuration:\n          <ul>\n            <li>\n              lifeCycleName: represents the life cycle from which to retrieve\n              the transitions.\n            </li>\n            <li>\n              currentLifeCycleState: the current state from where to start\n              finding the available transitions.\n            </li>\n          </ul>\n          <br/>\n          A standard definition could be:\n          <div class=\"pre\">\n            &lt;widget name=\"life_cycle_transitions\"\n            type=\"life_cycle_transitions\"&gt;\n            &lt;labels&gt;\n            &lt;label mode=\"any\"&gt;&lt;/label&gt;\n            &lt;/labels&gt;\n            &lt;fields&gt;\n            &lt;field&gt;contextData['lifeCycleTransition']&lt;/field&gt;\n            &lt;/fields&gt;\n            &lt;properties widgetMode=\"edit\"&gt;\n            &lt;property\n            name=\"currentLifeCycleState\"&gt;#{layoutValue.currentLifeCycleState}&lt;/property&gt;\n            &lt;property\n            name=\"lifeCycleName\"&gt;#{layoutValue.lifeCyclePolicy}&lt;/property&gt;\n            &lt;/properties&gt;\n            &lt;/widget&gt; </div>\n        </description>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"life_cycle_transitions_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget>lifeCycleName</widget>\n                </row>\n                <row>\n                  <widget>currentLifeCycleState</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n              <widget name=\"lifeCycleName\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Lifecycle name</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The lifecycle containing transitions to\n                    choose.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>lifeCycleName</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"currentLifeCycleState\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Current life cycle state</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The life cycle state to choose transitions\n                    from.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>currentLifeCycleState</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/life_cycle_transitions_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"image\">\n      <configuration>\n        <sinceVersion>5.5</sinceVersion>\n        <title>Image</title>\n        <description>\n          <p>\n            The image widget displays a file uploader/editor in create or edit\n            mode, with additional message tag for errors, and an &lt;img&gt; tag\n            displaying the image in other modes.\n          </p>\n          <li>\n            width: the width of the img tag in view mode.\n          </li>\n          <li>\n            height: the height of the img tag in view mode.\n          </li>\n        </description>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"image_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>width</widget>\n                </row>\n                <row>\n                  <widget>height</widget>\n                </row>\n              </rows>\n              <widget name=\"width\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Width</label>\n                </labels>\n                <fields>\n                  <field>width</field>\n                </fields>\n              </widget>\n              <widget name=\"height\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Height</label>\n                </labels>\n                <fields>\n                  <field>height</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"image_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget>acceptedExtensions</widget>\n                </row>\n              </rows>\n              <widget name=\"acceptedExtensions\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Accepted extensions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    A comma separated list of supported file\n                    extensions. Default value: '.jpg, .jpeg, .png, .gif, .tif,\n                    .tiff, .psd, .raw, .ai, .svg, .ps, .eps, .epsi, .epsf, .xcf,\n                    .bmp'.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>acceptedExtensions</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>blob</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/image_widget_template.xhtml</property>\n    </widgetType>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.widgts/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.widgts--widgets",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.widgts--widgets",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"life_cycle_transitions\" type=\"life_cycle_transitions\">\n\n      <documentation>\n        Default widget listing available life cycle transitions from the\n        document's current state and document's life cycle policy.\n        <br/>\n        The chosen transition is stored in the contextData of the document.\n      </documentation>\n\n      <labels>\n        <label mode=\"any\">label.life.cycle.changeFor</label>\n      </labels>\n      <fields>\n        <field>contextData['lifeCycleTransition']</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"create\">hidden</mode>\n        <mode value=\"view\">hidden</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"currentLifeCycleState\">#{layoutValue.currentLifeCycleState}</property>\n        <property name=\"lifeCycleName\">#{layoutValue.lifeCyclePolicy}</property>\n      </properties>\n    </widget>\n\n    <!-- group's layout widgets -->\n    <widget name=\"group_name\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.groupManager.groupName</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field schema=\"group\">groupname</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"create\">edit</mode>\n        <mode value=\"any\">hidden</mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"required\">true</property>\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n    <widget name=\"group_label\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.groupManager.groupLabel</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field schema=\"group\">grouplabel</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n    <widget name=\"group_members\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.groupManager.userMembers</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field schema=\"group\">members</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"template\">\n          /widgets/user_suggestion_widget_template.xhtml\n        </property>\n        <property name=\"userSuggestionSearchType\">USER_TYPE</property>\n        <property name=\"operationId\">UserGroup.Suggestion</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"suggestionFormatter\">userEntryDefaultFormatter</property>\n        <property name=\"selectionFormatter\">userEntryDefaultFormatter</property>\n      </properties>\n    </widget>\n    <widget name=\"group_subgroups\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.groupManager.groupMembers</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field schema=\"group\">subGroups</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"template\">\n          /widgets/user_suggestion_widget_template.xhtml\n        </property>\n        <property name=\"userSuggestionSearchType\">GROUP_TYPE</property>\n        <property name=\"operationId\">UserGroup.Suggestion</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"suggestionFormatter\">userEntryDefaultFormatter</property>\n        <property name=\"selectionFormatter\">userEntryDefaultFormatter</property>\n      </properties>\n    </widget>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.widgts",
          "name": "org.nuxeo.ecm.platform.forms.layouts.webapp.widgts",
          "requirements": [],
          "resolutionOrder": 632,
          "services": [],
          "startOrder": 334,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.forms.layouts.webapp.widgts\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"life_cycle_transitions\">\n      <configuration>\n        <title>Life cycle transitions</title>\n        <description>\n          This widget type displays a selection of available life cycle\n          transitions\n          given a life cycle state and a life cycle policy.\n          <br />\n          It requires the configuration of the first field to map to a String\n          value storing the chosen life cycle transition.\n          <br />\n          It needs the following properties configuration:\n          <ul>\n            <li>\n              lifeCycleName: represents the life cycle from which to retrieve\n              the transitions.\n            </li>\n            <li>\n              currentLifeCycleState: the current state from where to start\n              finding the available transitions.\n            </li>\n          </ul>\n          <br />\n          A standard definition could be:\n          <div class=\"pre\">\n            &lt;widget name=\"life_cycle_transitions\"\n            type=\"life_cycle_transitions\"&gt;\n            &lt;labels&gt;\n            &lt;label mode=\"any\"&gt;&lt;/label&gt;\n            &lt;/labels&gt;\n            &lt;fields&gt;\n            &lt;field&gt;contextData['lifeCycleTransition']&lt;/field&gt;\n            &lt;/fields&gt;\n            &lt;properties widgetMode=\"edit\"&gt;\n            &lt;property\n            name=\"currentLifeCycleState\"&gt;#{layoutValue.currentLifeCycleState}&lt;/property&gt;\n            &lt;property\n            name=\"lifeCycleName\"&gt;#{layoutValue.lifeCyclePolicy}&lt;/property&gt;\n            &lt;/properties&gt;\n            &lt;/widget&gt; </div>\n        </description>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"life_cycle_transitions_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget>lifeCycleName</widget>\n                </row>\n                <row>\n                  <widget>currentLifeCycleState</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n              <widget name=\"lifeCycleName\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Lifecycle name</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The lifecycle containing transitions to\n                    choose.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>lifeCycleName</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"currentLifeCycleState\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Current life cycle state</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The life cycle state to choose transitions\n                    from.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>currentLifeCycleState</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/life_cycle_transitions_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"image\">\n      <configuration>\n        <sinceVersion>5.5</sinceVersion>\n        <title>Image</title>\n        <description>\n          <p>\n            The image widget displays a file uploader/editor in create or edit\n            mode, with additional message tag for errors, and an &lt;img&gt; tag\n            displaying the image in other modes.\n          </p>\n          <li>\n            width: the width of the img tag in view mode.\n          </li>\n          <li>\n            height: the height of the img tag in view mode.\n          </li>\n        </description>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"image_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>width</widget>\n                </row>\n                <row>\n                  <widget>height</widget>\n                </row>\n              </rows>\n              <widget name=\"width\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Width</label>\n                </labels>\n                <fields>\n                  <field>width</field>\n                </fields>\n              </widget>\n              <widget name=\"height\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Height</label>\n                </labels>\n                <fields>\n                  <field>height</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"image_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget>acceptedExtensions</widget>\n                </row>\n              </rows>\n              <widget name=\"acceptedExtensions\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Accepted extensions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    A comma separated list of supported file\n                    extensions. Default value: '.jpg, .jpeg, .png, .gif, .tif,\n                    .tiff, .psd, .raw, .ai, .svg, .ps, .eps, .epsi, .epsf, .xcf,\n                    .bmp'.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>acceptedExtensions</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>blob</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/image_widget_template.xhtml</property>\n    </widgetType>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"life_cycle_transitions\" type=\"life_cycle_transitions\">\n\n      <documentation>\n        Default widget listing available life cycle transitions from the\n        document's current state and document's life cycle policy.\n        <br />\n        The chosen transition is stored in the contextData of the document.\n      </documentation>\n\n      <labels>\n        <label mode=\"any\">label.life.cycle.changeFor</label>\n      </labels>\n      <fields>\n        <field>contextData['lifeCycleTransition']</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"create\">hidden</mode>\n        <mode value=\"view\">hidden</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"currentLifeCycleState\">#{layoutValue.currentLifeCycleState}</property>\n        <property name=\"lifeCycleName\">#{layoutValue.lifeCyclePolicy}</property>\n      </properties>\n    </widget>\n\n    <!-- group's layout widgets -->\n    <widget name=\"group_name\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.groupManager.groupName</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field schema=\"group\">groupname</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"create\">edit</mode>\n        <mode value=\"any\">hidden</mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"required\">true</property>\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n    <widget name=\"group_label\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.groupManager.groupLabel</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field schema=\"group\">grouplabel</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n    <widget name=\"group_members\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.groupManager.userMembers</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field schema=\"group\">members</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"template\">\n          /widgets/user_suggestion_widget_template.xhtml\n        </property>\n        <property name=\"userSuggestionSearchType\">USER_TYPE</property>\n        <property name=\"operationId\">UserGroup.Suggestion</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"suggestionFormatter\">userEntryDefaultFormatter</property>\n        <property name=\"selectionFormatter\">userEntryDefaultFormatter</property>\n      </properties>\n    </widget>\n    <widget name=\"group_subgroups\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.groupManager.groupMembers</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field schema=\"group\">subGroups</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"template\">\n          /widgets/user_suggestion_widget_template.xhtml\n        </property>\n        <property name=\"userSuggestionSearchType\">GROUP_TYPE</property>\n        <property name=\"operationId\">UserGroup.Suggestion</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"suggestionFormatter\">userEntryDefaultFormatter</property>\n        <property name=\"selectionFormatter\">userEntryDefaultFormatter</property>\n      </properties>\n    </widget>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/widgets-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.LayoutStore--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.base/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.base--widgets",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.base--widgets",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "name": "org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\">\n\n    <widget name=\"displayObsoleteEntries\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display obsolete entries</label>\n      </labels>\n      <fields>\n        <field>displayObsoleteEntries</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_directory_name\" type=\"selectOneResource\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Directory Name</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the directory\n        </label>\n      </helpLabels>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <fields>\n        <field>directoryName</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"required\">true</property>\n      </properties>\n      <properties mode=\"any\">\n        <property name=\"resourceName\">vocabularies</property>\n        <property name=\"includel10nDirectories\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"select2_directory_fetch_mode\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Fetch Mode</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the fetch mode for directory entries.\n          Directory entries can either be fetched if they start with the\n          search term or if thery contain the search term.\n          Available since 5.9.2.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>contains</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Starts with (default)\" itemValue=\"false\"/>\n        <option itemLabel=\"Contains\" itemValue=\"true\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"select2_dbl10n\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Activate database localization</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Activate retrieval of localized labels in the\n          vocabulary database, when translations are held by the directory\n          itself, in fields with a label_[lang] pattern, and defaulting to\n          label_en. Available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>dbl10n</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_canSelectParent\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Can select parent</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Check this option to allow selection of\n          intermediate\n          groups.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>canSelectParent</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_filterParent\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Filter parent</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Check this option to apply filter on\n          intermediate\n          groups.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>filterParent</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_dropdownOnArrow\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Dropdown on Arrow </label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Check this option to dropdown the suggestions only when clicking the arrow on\n          the right of the single suggestion widget. By default the suggestions are\n          dropped down wherever you click.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>dropdownOnArrow</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_separator\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Select2 separator</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Separator character or string used to delimit ids\n          in value attribute of the multi-valued selects.\n          The default delimiter is the , character.\n        </label>\n      </helpLabels>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n      <fields>\n        <field>separator</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_frequency\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Select2 frequency</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Delay (in milliseconds) before sending a request\n          to the server after a character is typed.\n          Default value is 300ms.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>frequency</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_closeOnSelect\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Select2 closeOnSelect</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n         If set to false the dropdown is not closed after a selection is made,\n         allowing for rapid selection of multiple items.\n         By default this option is set to true.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>closeOnSelect</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_directory_labelFieldName\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Label field name</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the Directory field that should be\n          used to\n          define the Label of entry.\n          If not set 'label'\n          will be\n          used. In case of\n          localization with a directory field for\n          each supported language (see\n          dbl10n option), by default\n          fields with pattern like 'label_en',\n          'label_fr' or\n          'label_de' will\n          be searched. You can customize looked up\n          fields by\n          specifying\n          a pattern like\n          'label_{lang}' where the part {lang}\n          will be\n          replaced with\n          the current locale.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>labelFieldName</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestionSearchType\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Search type</label>\n      </labels>\n      <fields>\n        <field>userSuggestionSearchType</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Users and Groups\" itemValue=\"\"/>\n        <option itemLabel=\"Users\" itemValue=\"USER_TYPE\"/>\n        <option itemLabel=\"Groups\" itemValue=\"GROUP_TYPE\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"userSuggestion_groupRestriction\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Group id restriction</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Enter the id of a group to suggest only user from this\n          group.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>groupRestriction</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_prefixed\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Use prefixed reference</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Check this box if you want the references prefixed\n          with \"user:\" or \"group:\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>prefixed</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_firstLabelField\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">First label field</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Field to use as the first label when displaying the\n          selected user. Defaults to 'firstName'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>firstLabelField</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_secondLabelField\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Second label field</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Field to use as the second label when displaying the\n          selected user. Defaults to 'lastName'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>secondLabelField</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_thirdLabelField\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Third label field</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Field to use as the third label when displaying the\n          selected user. Defaults to 'email'. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>thirdLabelField</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_hideFirstLabel\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide first label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean indicating if the first label should be\n          hidden. Defaults to false.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideFirstLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_hideSecondLabel\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide second label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean indicating if the second label should be\n          hidden.Defaults to false.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideSecondLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_hideThirdLabel\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide third label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean indicating if the third label should be\n          hidden. Defaults to false. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideThirdLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_displayAction\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display action</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The display action to use when rendering the user or\n          group. Can be 'nothing' to just display text only, 'view' to have a\n          link going to the user or group view, or 'edit' to have a link going\n          to the user or group edition. The 'edit' action assumes the widget is\n          used in the Users and Groups management.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>displayAction</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"View\" itemValue=\"view\"/>\n        <option itemLabel=\"Edit\" itemValue=\"edit\"/>\n        <option itemLabel=\"Nothing\" itemValue=\"nothing\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"userSuggestion_displayEmailInSuggestion\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display email for users</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean indicating if the email should be displayed\n          for users. Defaults to false. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>displayEmailInSuggestion</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestionMaxSearchResults\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Max search results</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Number of maximum search results in the suggestion\n          (defaults to 0 that means no limit).\n        </label>\n      </helpLabels>\n      <fields>\n        <field>userSuggestionMaxSearchResults</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_minChars\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Minimum characters</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The minimal number of characters to type for the\n          suggestion to be active. Defaults to 3.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>minChars</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_resultLimit\" type=\"int\">\n      <sinceVersion>8.2</sinceVersion>\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Limit returned results</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The maximal number of result returned by the suggestion.\n          Defaults to unlimited.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>limit</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_frequency\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Frequency</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Delay (in seconds) before activating the suggestion\n          pop-up. Default value is 0.\n        </label>\n      </helpLabels>\n\n      <fields>\n        <field>frequency</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_requestDelay\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Request delay</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The requestDelay attribute specifies an amount of time\n          in milliseconds for the request to wait in the queue before being sent\n          to the server. If a similar request is added to the queue before the\n          delay is over, the original request is removed from the queue and not\n          sent.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>requestDelay</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_width\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Width</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">The suggestion width.</label>\n      </helpLabels>\n      <fields>\n        <field>width</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_helpLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Help Label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The help label is displayed below the\n          widget.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>helpLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_containerCssClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Container css class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Css class of the Select2 selection container\n        </label>\n      </helpLabels>\n      <fields>\n        <field>containerCssClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_dropdownCssClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Dropdown css class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Css class of the Select2 dropdown suggestion\n        </label>\n      </helpLabels>\n      <fields>\n        <field>dropdownCssClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_suggestionFormatter\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Suggestion Formatter</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the JavaScript function that\n          will be\n          called by select2 to do the formatting of the\n          suggestedentries.\n          The\n          target function should take as input\n          the javascript Document as\n          returned by Automation and should\n          return some Html.\n          Use the \"Inline Javascript\" property field to define your own\n          formatter.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>suggestionFormatter</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_selectionFormatter\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Selection Formatter</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the JavaScript function that\n          will be\n          called by the widget to do the formatting of the\n          selected entries.\n          The\n          target function should take as input\n          the javascript Document as\n          returned by Automation and should\n          return some Html.\n          Use the \"Inline Javascript\" property field to define your own\n          formatter.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>selectionFormatter</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_additionalParam\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Additional Operation Parameters</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the JavaScript function that\n          will be\n          called by select2 to pass additional parameters to\n          the automation operation. See https://doc.nuxeo.com/x/iQhvAQ.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>additionalOperationParameters</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_inlinejsDemoPreview\" type=\"textarea\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Inline Javascript</label>\n      </labels>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"edit_demo_preview\">#{layout.mode}</mode>\n      </widgetModes>\n      <helpLabels>\n        <label mode=\"any\">\n          Javascript to be injected in the page with\n          the Widget.\n          You can define here custom formatters\n          referenced in \"Selection\n          Formatter\" and\n          \"Suggestion Formatter\" fields. Example:\n          &lt;pre&gt;\n          function myFormatter(entry) {\n          var markup = entry.displayLabel;\n          return markup;\n          }\n          &lt;/pre&gt; </label>\n      </helpLabels>\n      <fields>\n        <field>inlinejs</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_inlinejs\" type=\"codearea\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Inline Javascript</label>\n      </labels>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <helpLabels>\n        <label mode=\"any\">\n          Javascript to be injected in the page with\n          the Widget.\n          You can define here custom formatters\n          referenced in \"Selection\n          Formatter\" and\n          \"Suggestion Formatter\" fields. Example:\n          &lt;pre&gt;\n          function myFormatter(entry) {\n          var markup = entry.displayLabel;\n          return markup;\n          }\n          &lt;/pre&gt; </label>\n      </helpLabels>\n      <fields>\n        <field>inlinejs</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"language\">javascript</property>\n      </properties>\n    </widget>\n\n    <widget name=\"select2_directorySuggestion_canAddNewEntry\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Can add new entry</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean stating if user should be able to add a new\n          entry on the directory from this widget. Available since 5.9.1,\n          defaults to \"false\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>canAddNewEntry</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_directorySuggestion_addNewEntryFilter\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Filter for adding a new entry</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action filter id used to check whether user should\n          be presented the 'add new entry' action on the suggestion widget.\n          The\n          variable 'directoryName' is available in context for this filter\n          evaluation. Available since 5.9.1, defaults to\n          'canAddEntryFromSuggestDirectoryWidget'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>addNewEntryFilter</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_tab\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Tab</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The tab to select when clicking on the document link.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>tab</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_subTab\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Sub Tab</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The sub tab to select when clicking on the document\n          link.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>subTab</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_pageProviderName\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Document page provider name</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The page provider that will be called to perform a\n          search for the suggestion. It must accept one parameter that will be\n          replaced by the suggestion input. Since 5.7, additional parameters set\n          on the page provider definition will also be taken into account (but\n          the suggestion input will still be used as the first implicit\n          parameter). If no name is defined, a default page provider is used.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pageProviderName</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_pageProviderPageSize\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Document page provider page size</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Page provider result's page size. Default value is 20.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pageSize</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_queryDemoPreview\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">NXQL Query</label>\n      </labels>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"edit_demo_preview\">#{layout.mode}</mode>\n      </widgetModes>\n      <helpLabels>\n        <label mode=\"any\">\n          NXQL Query to fetch the suggestions. This property is\n          ignored if a\n          Page Provider name is given.\n          The widget doesn't append a '%'\n          wildcard to the parameter passed to query.\n          &lt;p&gt;\n          Example: select *\n          from Document where dc:title LIKE '?%'\n          &lt;/p&gt;\n        </label>\n      </helpLabels>\n      <fields>\n        <field>query</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_query\" type=\"codearea\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">NXQL Query</label>\n      </labels>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <helpLabels>\n        <label mode=\"any\">\n          NXQL Query to fetch the suggestions. This property is\n          ignored if a\n          Page Provider name is given.\n          The widget doesn't append a '%'\n          wildcard to the parameter passed to query.\n          &lt;p&gt;\n          Example: select *\n          from Document where dc:title LIKE '?%'\n          &lt;/p&gt;\n        </label>\n      </helpLabels>\n      <fields>\n        <field>query</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"language\">nxql</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentSuggestion_documentSchemas\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Document Schemas</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Document Schemas that should be fetched and\n          sent to the\n          JS client side. You can enter comma separated values.\n          &lt;p&gt;\n          Example: dublincore,common\n          &lt;/p&gt; </label>\n      </helpLabels>\n      <fields>\n        <field>documentSchemas</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_repository\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Target Repository</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Id of the Nuxeo repositry that should be\n          accessed.\n          If\n          unsed, the default repository will be used.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>repository</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_orderable\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Orderable</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to order the\n          selected items. Available since 5.6.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>orderable</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_hideSearchTypeText\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide Search Type Label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to hide the\n          search type label. Available since 5.7.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideSearchTypeText</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_displaySuggestionOnTop\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display Suggestion On Top</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to display the\n          suggestion\n          box on top of the search results. Available since 5.7.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>displaySuggestionOnTop</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_hideHelpLabel\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide Help Label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to hide the\n          help label. Available since 5.7.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideHelpLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"ajaxReRender\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Ajax reRender</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Ajax rerender ids, separated by commas.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>ajaxReRender</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actionsDisplay\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Actions Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to 'buttons', actions will be displayed as\n          command\n          buttons. If set to 'links', actions will be displayed as\n          command links. If set to 'icons', actions will be displayed\n          as icons.\n          Else (default behaviour), actions will be\n          displayed as command links\n          and display their icons when\n          defined.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>actionsDisplay</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Icons and links (default)\" itemValue=\"icons_links\"/>\n        <option itemLabel=\"Icons\" itemValue=\"icons\"/>\n        <option itemLabel=\"Buttons\" itemValue=\"buttons\"/>\n        <option itemLabel=\"Links\" itemValue=\"links\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"formActionsDisplay\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Actions Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to 'buttons', actions will be displayed as\n          command\n          buttons. If set to 'links', actions will be displayed as\n          command links. If set to 'icons', actions will be displayed\n          as icons.\n          Else (default behaviour), actions will be\n          displayed as command links\n          and display their icons when\n          defined.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>actionsDisplay</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Buttons (default)\" itemValue=\"buttons\"/>\n        <option itemLabel=\"Icons and links\" itemValue=\"icons_links\"/>\n        <option itemLabel=\"Icons\" itemValue=\"icons\"/>\n        <option itemLabel=\"Links\" itemValue=\"links\"/>\n      </selectOptions>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.base/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.base--widgettypes",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.base--widgettypes",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"select_path_tree\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Path tree</title>\n        <description>\n          Widget allowing to select one or more values from a Tree\n          constructed\n          from the navigation tree.\n\n          Set 'showAllDomains' property to\n          true if you want to be able to select\n          a path from an other domain than\n          the current one.\n        </description>\n        <categories>\n          <category>search</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n            <type>path</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/select_path_tree_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"singleUserSuggestion\">\n      <configuration>\n        <title>Single user/group suggestion</title>\n        <sinceVersion>5.4.2</sinceVersion>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"minChars\">3</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"singleUserSuggestion_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_prefixed</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_firstLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_secondLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_thirdLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideFirstLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideSecondLabel\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideThirdLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayAction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayEmailInSuggestion\n                  </widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"singleUserSuggestion_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionSearchType</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_groupRestriction\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_prefixed</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionMaxSearchResults\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayEmailInSuggestion\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownOnArrow</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/single_user_suggestion_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"multipleUsersSuggestion\">\n      <configuration>\n        <title>Multiple users/groups suggestion</title>\n        <sinceVersion>5.4.2</sinceVersion>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"minChars\">3</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"multipleUsersSuggestion_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_prefixed</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionSearchType</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_firstLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_secondLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_thirdLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideFirstLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideSecondLabel\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideThirdLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayAction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayEmailInSuggestion\n                  </widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"multipleUsersSuggestion_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_closeOnSelect</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionSearchType</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_groupRestriction\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_prefixed</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionMaxSearchResults\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayEmailInSuggestion\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_separator</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/user_suggestion_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"suggestOneDirectory\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Single directory suggestion</title>\n        <description>\n          <p>Uses Select2 JS library to render a selection / suggestion widget\n            where suggestions are loaded from a given directory.\n          </p>\n        </description>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"minChars\">0</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"suggestOneDirectory_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_name</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_labelFieldName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"suggestOneDirectory_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_name</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_resultLimit</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_fetch_mode</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_labelFieldName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_canSelectParent</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_filterParent</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">displayObsoleteEntries</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownOnArrow</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directorySuggestion_canAddNewEntry</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directorySuggestion_addNewEntryFilter</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/suggest_one_directory_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"suggestManyDirectory\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Multiple directory suggestion</title>\n        <description>\n          <p>Uses Select2 JS library to render a selection / suggestion widget\n            where suggestions are loaded from a given directory.\n          </p>\n        </description>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"minChars\">0</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"suggestManyDirectory_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_name</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_labelFieldName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_separator</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"suggestManyDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_name</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_closeOnSelect</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_resultLimit</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_fetch_mode</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_labelFieldName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_canSelectParent</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_filterParent</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">displayObsoleteEntries</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directorySuggestion_canAddNewEntry</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directorySuggestion_addNewEntryFilter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_separator</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/suggest_many_directory_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <!-- deprecated since 5.7.3, use a multipleUsersSuggestion with \"prefixed\" property\n      = true now -->\n    <widgetType name=\"multiplePrefixedUsersSuggestion\">\n      <configuration>\n        <title>Multiple prefixed users/groups suggestion</title>\n        <sinceVersion>5.4.2</sinceVersion>\n        <deprecatedVersion>5.7.3</deprecatedVersion>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"multiplePrefixedUsersSuggestion_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionSearchType</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionMaxSearchResults\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_requestDelay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displaySuggestionOnTop\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideSearchTypeText\n                  </widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/user_prefixed_suggestion_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"multipleDocumentsSuggestion\">\n      <configuration>\n        <title>Multiple documents suggestion</title>\n        <sinceVersion>5.4.2</sinceVersion>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"pageProviderName\">default_document_suggestion</property>\n            <property name=\"documentSchemas\">dublincore,common</property>\n            <property name=\"minChars\">3</property>\n            <property name=\"restoreSeamCtx\">true</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"multipleDocumentsSuggestion_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_tab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_subTab</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"multipleDocumentsSuggestion_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_closeOnSelect</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_query</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_queryDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderPageSize\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_additionalParam</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_separator</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/multiple_document_suggestion_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"singleDocumentSuggestion\">\n      <configuration>\n        <title>Single document suggestion</title>\n        <sinceVersion>5.5</sinceVersion>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"pageProviderName\">default_document_suggestion</property>\n            <property name=\"documentSchemas\">dublincore,common</property>\n            <property name=\"minChars\">3</property>\n            <property name=\"restoreSeamCtx\">true</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"singleDocumentSuggestion_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_tab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_subTab</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"singleDocumentSuggestion_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_query</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_queryDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderPageSize\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_additionalParam</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownOnArrow</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/single_document_suggestion_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"title_link\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Title with link</title>\n        <description>\n          <p>\n            This widget type displays a link to navigate to a document, as well\n            as a download link for the document binary content.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, it will be used to\n                display the document link and its title\n              </li>\n              <li>\n                second field maps the unique id to be used for contextual menu\n                (e.g. the document model id)\n              </li>\n              <li>\n                third field maps the displayed link title (can be the document\n                model description)\n              </li>\n              <li>\n                fourth field maps the document model file to be used for\n                download link\n              </li>\n              <li>\n                fifth field maps the file name to be used for download link\n                (can be the document model file name property value)\n              </li>\n            </ul>\n          </p>\n          <p>\n            It also requires the following properties configuration:\n            <ul>\n              <li>\n                file_schema: the file schema name, used to check whether\n                download link should be displayed (e.g: file)\n              </li>\n              <li>\n                file_property_name: the file property name (e.g file:content)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"title_linkWidget\"/>\n        <confProperties>\n          <property name=\"sortPropertyName\">dc:title</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field/>\n            <field>ref</field>\n            <field>dc.description</field>\n            <field>file.content</field>\n            <field>file.content.filename</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>standalone</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"hideExternalLink\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"title_link_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>tab</widget>\n                </row>\n                <row>\n                  <widget>subTab</widget>\n                </row>\n                <row>\n                  <widget>target</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">localize</widget>\n                </row>\n                <row>\n                  <widget>hideExternalLink</widget>\n                </row>\n                <row>\n                  <widget>hideDownloadLink</widget>\n                </row>\n              </rows>\n              <widget name=\"tab\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Tab</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The tab to select when clicking on the\n                    document link.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>tab</field>\n                </fields>\n              </widget>\n              <widget name=\"subTab\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Sub Tab</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The sub tab to select when clicking on the\n                    document link.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>subTab</field>\n                </fields>\n              </widget>\n              <widget name=\"target\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Target</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The target attribute of the link.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>target</field>\n                </fields>\n              </widget>\n              <widget name=\"localize\" type=\"checkbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Localize</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Flag indicating that the title is localized.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>localize</field>\n                </fields>\n              </widget>\n              <widget name=\"hideExternalLink\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Hide External Link</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Flag indicating that the external link, opening the document\n                    in a new conversation, must be hidden.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideExternalLink</field>\n                </fields>\n              </widget>\n              <widget name=\"hideDownloadLink\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Hide Download Link</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Flag indicating that the download link must be hidden.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideDownloadLink</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_title_link_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"title_and_permlink\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <title>Title and permanent link</title>\n        <description>\n          This widgets displays the document title with a permlink icon. If the\n          document is a version, the major and minor are displayed in\n          parenthesis.\n\n          One field is required :\n          <ul>\n            <li>an empty field to map the document</li>\n          </ul>\n\n          Since 5.5, it also displays the document header related actions.\n          They\n          must be contributed in one of the following categories:\n          <ul>\n            <li>DOCUMENT_HEADER_ACTIONS_LIST</li>\n            <li>DOCUMENT_HEADER_ACTIONS_LIST_HREF</li>\n          </ul>\n\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field/>\n            <field>uid:major_version</field>\n            <field>uid:minor_version</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>standalone</category>\n        </categories>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"title_and_permlink_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">localize</widget>\n                </row>\n              </rows>\n              <widget name=\"localize\" type=\"checkbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Localize</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Available since 5.7.1. Flag indicating that\n                    the title is localized.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>localize</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/title_with_permlink_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"select_l10n_vocabulary_tree\">\n      <configuration>\n        <sinceVersion>5.5</sinceVersion>\n        <title>Localized vocabulary tree</title>\n        <description>\n          Widget allowing to select one or more values in a tree\n          constructed\n          from a l10nvocabulary or l10nxvocabulary directory.\n        </description>\n        <categories>\n          <category>search</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"select_l10n_vocabulary_tree_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>directoryName</widget>\n                </row>\n                <row>\n                  <widget>directoryNameDemoPreview</widget>\n                </row>\n                <row>\n                  <widget>selectIdOnly</widget>\n                </row>\n                <row>\n                  <widget>keySeparator</widget>\n                </row>\n              </rows>\n              <widget name=\"directoryName\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Vocabulary</label>\n                </labels>\n                <fields>\n                  <field>directoryName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">vocabularies</property>\n                </properties>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"directoryNameDemoPreview\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Vocabulary</label>\n                </labels>\n                <fields>\n                  <field>directoryName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"selectIdOnly\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Select id only</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, only the entries id are\n                    stored instead of\n                    their path.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>selectIdOnly</field>\n                </fields>\n              </widget>\n              <widget name=\"keySeparator\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Key separator</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The string used to separate directory keys\n                    in the value.\n                    Defaults to \"/\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>keySeparator</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"select_l10n_vocabulary_tree_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget>multiSelect</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">displayObsoleteEntries</widget>\n                </row>\n                <row>\n                  <widget>ordering</widget>\n                </row>\n              </rows>\n              <widget name=\"multiSelect\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Multiple selection</label>\n                </labels>\n                <fields>\n                  <field>multiSelect</field>\n                </fields>\n              </widget>\n              <widget name=\"ordering\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Sort criterion</label>\n                </labels>\n                <fields>\n                  <field>ordering</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Label (default)\" itemValue=\"label\"/>\n                  <option itemLabel=\"Ordering\" itemValue=\"ordering\"/>\n                  <option itemLabel=\"Id\" itemValue=\"id\"/>\n                </selectOptions>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/select_l10n_vocabulary_tree_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"contentViewWithForms\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>Content view</title>\n        <description>\n          This widget displays a content view, with forms inside it.\n\n          Note that usually layouts do not contain any forms, but are surrounded\n          by one, and nesting forms breaks the available actions. So you should\n          make sure there is no enclosing form around the layout, or around this\n          widget, when using it.\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <containingForm>true</containingForm>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"useAjaxPagination\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"contentView_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>contentViewName</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n                <row>\n                  <widget>useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget>useAjaxPagination</widget>\n                </row>\n                <row>\n                  <widget>ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget>hideTopPaginationControls</widget>\n                </row>\n                <row>\n                  <widget>defaultPageSize</widget>\n                </row>\n                <row>\n                  <widget>showPageSizeSelector</widget>\n                </row>\n                <row>\n                  <widget>showRefreshCommand</widget>\n                </row>\n                <row>\n                  <widget>showFilterForm</widget>\n                </row>\n                <row>\n                  <widget>showSyndicationLinks</widget>\n                </row>\n                <row>\n                  <widget>showCSVExport</widget>\n                </row>\n                <row>\n                  <widget>showPDFExport</widget>\n                </row>\n                <row>\n                  <widget>foldable</widget>\n                </row>\n                <row>\n                  <widget>foldedByDefault</widget>\n                </row>\n                <!-- not exposed in studio for now -->\n                <row>\n                  <widget>foldableBoxStyleClass</widget>\n                </row>\n                <row>\n                  <widget>foldedIfEmpty</widget>\n                </row>\n                <row>\n                  <widget>hideEmpty</widget>\n                </row>\n                <row>\n                  <widget>contentViewIconPath</widget>\n                </row>\n                <!-- not sure this is a good idea: there are other forms in the template -->\n                <!-- <row> <widget>removeForm</widget> </row> -->\n              </rows>\n              <widget name=\"contentViewName\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Content View name</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The content view to display.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>contentViewName</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">contentViews</property>\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given style class will be put in a \"div\"\n                    element around the content view.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"useAjaxForm\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Use ajax actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, selection actions will be\n                    performed using ajax. Note that sometimes, selection actions\n                    will require you to reload the whole page for other elements\n                    than the content view to be re-rendered, so using ajax will\n                    not be user friendly in these cases. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>useAjaxForm</field>\n                </fields>\n              </widget>\n              <widget name=\"useAjaxPagination\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Use ajax pagination</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, pagination actions (first,\n                    previous, next, last) actions will be performed using ajax.\n                    Defaults to true since version 7.10.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>useAjaxPagination</field>\n                </fields>\n              </widget>\n              <widget name=\"ajaxReRender\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Ajax reRender</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given ajax reRender ids will be added to\n                    the zones to\n                    reRender on some actions (page navigation,\n                    result layout\n                    selection, selection actions...). Available\n                    since 5.7.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>ajaxReRender</field>\n                </fields>\n              </widget>\n              <widget name=\"hideTopPaginationControls\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Show only bottom pagination controls</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, pagination actions (first,\n                    previous, next, last) actions will only be displayed below\n                    the results. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideTopPaginationControls</field>\n                </fields>\n              </widget>\n              <widget name=\"defaultPageSize\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Default page size</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The default page size to use instead of the\n                    value set on the content view definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>defaultPageSize</field>\n                </fields>\n              </widget>\n              <widget name=\"showPageSizeSelector\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show page size selector</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide the page size\n                    selector, overriding the value set on the content view\n                    definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showPageSizeSelector</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\" itemValue=\"\"/>\n                  <option itemLabel=\"No\" itemValue=\"false\"/>\n                  <option itemLabel=\"Yes\" itemValue=\"true\"/>\n                </selectOptions>\n              </widget>\n              <widget name=\"showRefreshCommand\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show refresh command</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide the refresh command,\n                    overriding the value set on the content view\n                    definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showRefreshCommand</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\" itemValue=\"\"/>\n                  <option itemLabel=\"No\" itemValue=\"false\"/>\n                  <option itemLabel=\"Yes\" itemValue=\"true\"/>\n                </selectOptions>\n              </widget>\n              <widget name=\"showFilterForm\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show filter form</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide the filter form,\n                    overriding the value set on the content view\n                    definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showFilterForm</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\" itemValue=\"\"/>\n                  <option itemLabel=\"No\" itemValue=\"false\"/>\n                  <option itemLabel=\"Yes\" itemValue=\"true\"/>\n                </selectOptions>\n              </widget>\n              <widget name=\"showSyndicationLinks\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show syndication links</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide syndication links,\n                    overriding the value set on the content view\n                    definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showSyndicationLinks</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\" itemValue=\"\"/>\n                  <option itemLabel=\"No\" itemValue=\"false\"/>\n                  <option itemLabel=\"Yes\" itemValue=\"true\"/>\n                </selectOptions>\n              </widget>\n              <widget name=\"showCSVExport\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show CSV export</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide the CSV export link,\n                    overriding the value set on the content view definition for\n                    every result layouts. Warning: the content view result\n                    layouts should be configured to handle a CSV export.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showCSVExport</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\" itemValue=\"\"/>\n                  <option itemLabel=\"No\" itemValue=\"false\"/>\n                  <option itemLabel=\"Yes\" itemValue=\"true\"/>\n                </selectOptions>\n              </widget>\n              <widget name=\"showPDFExport\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show PDF export</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide the PDF export link,\n                    overriding the value set on the content view definition for\n                    every result layouts. Warning: the content view result\n                    layouts should be configured to handle a CSV export.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showPDFExport</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\" itemValue=\"\"/>\n                  <option itemLabel=\"No\" itemValue=\"false\"/>\n                  <option itemLabel=\"Yes\" itemValue=\"true\"/>\n                </selectOptions>\n              </widget>\n              <widget name=\"foldable\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Foldable</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, the content view will be\n                    displayed in a box that can be folded/unfolded in\n                    javascript. Ignored if the widget is not marked as handling\n                    labels as the header will not be displayed in this case. If\n                    the widget label is empty, the content view title will be\n                    used. If this title is also empty, a default label will be\n                    shown. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldable</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"foldedByDefault\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Folded by default</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldedByDefault</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <!-- not exposed in studio for now -->\n              <widget name=\"foldableBoxStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Foldable Box Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given style class will be used on the\n                    foldable box.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldableBoxStyleClass</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"foldedIfEmpty\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Folded if empty</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldedIfEmpty</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"hideEmpty\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Hide if empty</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to hide the complete rendering when\n                    content view is empty\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideEmpty</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"contentViewIconPath\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Content icon path</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The icon to display instead of the value set\n                    on the content view definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>contentViewIconPath</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"removeForm\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Remove form on content listing</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>removeForm</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/content_view_with_forms_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"contentViewSearchLayout\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Content view search layout</title>\n        <description>\n          This widget displays the search layout of a content view.\n        </description>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"contentView_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>contentViewName</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n              </rows>\n              <widget name=\"contentViewName\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Content View name</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Displays the search layout of this content\n                    view.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>contentViewName</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">contentViews</property>\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given style class will be put in a \"div\"\n                    element around the search layout.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/content_view_search_layout_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"saveBox\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Save box</title>\n        <description>\n          <p>This widget displays a save box with one input for the title and\n            one button to save.\n          </p>\n\n          <p>The input is mapped to the field of the widget.</p>\n\n          <p>It needs the action id as property \"actionId\" for\n            the \"save\" button.\n          </p>\n        </description>\n        <categories>\n          <category>configuration_not_ready</category>\n          <!--\n            <category>tab_designer</category>\n          -->\n        </categories>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/save_box_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"toggleableLayoutWithForms\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>Toggleable form</title>\n        <description>\n          This widget displays a form layout which mode can be\n          toggled, with forms inside it.\n\n          Note that usually layouts do not contain\n          any forms, but are surrounded by one, and nesting forms breaks the\n          available actions. So you should make sure there is no enclosing form\n          around the layout, or around this widget, when using it.\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"toggleableLayoutViewWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>initialLayoutName</widget>\n                </row>\n                <row>\n                  <widget>initialLayoutNameDemoPreview</widget>\n                </row>\n                <row>\n                  <widget>toggledLayoutName</widget>\n                </row>\n                <row>\n                  <widget>toggledLayoutNameDemoPreview</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n                <row>\n                  <widget>canToggleMode</widget>\n                </row>\n                <row>\n                  <widget>hideDefaultActions</widget>\n                </row>\n                <row>\n                  <widget>additionalActionsCategory</widget>\n                </row>\n                <row>\n                  <widget>additionalActionsCategoryDemo</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">formActionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">widgetsDisplay</widget>\n                </row>\n                <row>\n                  <widget>showEditOptions</widget>\n                </row>\n                <row>\n                  <widget>useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget>foldable</widget>\n                </row>\n                <row>\n                  <widget>foldedByDefault</widget>\n                </row>\n                <row>\n                  <widget>displayToggleActionInHeader</widget>\n                </row>\n                <row>\n                  <widget>initialActionLabel</widget>\n                </row>\n                <row>\n                  <widget>cancelActionLabel</widget>\n                </row>\n                <row>\n                  <widget>template</widget>\n                </row>\n              </rows>\n              <widget name=\"initialLayoutName\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout to display before toggling the\n                    mode. Also accepts a list of multiple layout names,\n                    separated by commas.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>initialLayoutName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layouts</property>\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"initialLayoutNameDemoPreview\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout to display before toggling the\n                    mode. Also accepts a list of multiple layout names,\n                    separated by commas.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>initialLayoutName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"toggledLayoutName\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Toggled layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout to display after toggling the\n                    mode. Also accepts a list of multiple layout names,\n                    separated by commas. If not filled, defaults to the initial\n                    layout name(s).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>toggledLayoutName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layouts</property>\n                </properties>\n              </widget>\n              <widget name=\"toggledLayoutNameDemoPreview\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Toggled layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout to display after toggling the\n                    mode. Also accepts a list of multiple layout names,\n                    separated by commas. If not filled, defaults to the initial\n                    layout name(s).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>toggledLayoutName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"template\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout template to use instead of the\n                    one already set\n                    on the layout(s) definition(s).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layout_templates</property>\n                </properties>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given style class will be put in a \"div\"\n                    element around the layout.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"canToggleMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Can toggle mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean property to resolve when\n                    deciding whether the toggle button should be displayed or\n                    not. Defaults to an EL expression checking permission\n                    'Write' on the document. Examples: false,\n                    #{webActions.checkFilter('canToggleLayoutToEditMode') and\n                    currentUser.isMemberOf('togglers_groups')}.\n                    Default\n                    expression used (includes check for permission 'Write',\n                    check if document is in the trash, and check if document is\n                    mutable -- not a proxy nor a version):\n                    #{webActions.checkFilter('canToggleLayoutToEditMode')}\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>canToggleMode</field>\n                </fields>\n              </widget>\n              <widget name=\"hideDefaultActions\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Hide default actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, actions from the default\n                    category 'EDIT_DOCUMENT_FORM' will not be displayed on the\n                    layout in toggled mode. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideDefaultActions</field>\n                </fields>\n              </widget>\n              <widget name=\"additionalActionsCategory\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Additional actions category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The additional actions category to use when\n                    displaying the layout in toggled mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>additionalActionsCategory</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"additionalActionsCategoryDemo\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Additional actions category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The additional actions category to use when\n                    displaying the layout in toggled mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>additionalActionsCategory</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"showEditOptions\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Show edit options</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, additional edit options\n                    (like a textarea for comment to be visible in the document\n                    history) will be visible after the layout in toggled (edit)\n                    mode. Only visible if value bound to the layout is a\n                    document model. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showEditOptions</field>\n                </fields>\n              </widget>\n              <widget name=\"displayToggleActionInHeader\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Display toggle action in header</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true (and widget has a header,\n                    because it handles its label), actions will be displayed in\n                    the header. This includes the \"toggle\" action, as well as\n                    \"save\" actions. Only the \"toggle\" action is hidden from the\n                    rendering when it is displayed on top. \"Save\" actions are\n                    shown twice. Available since 5.7, defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>displayToggleActionInHeader</field>\n                </fields>\n              </widget>\n              <widget name=\"useAjaxForm\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Use ajax actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, actions will be performed\n                    using ajax. Note that sometimes, actions will require you to\n                    reload the whole page for other elements than the current\n                    zone to be re-rendered, so using ajax will not be user\n                    friendly in these cases. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>useAjaxForm</field>\n                </fields>\n              </widget>\n              <widget name=\"initialActionLabel\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Initial action label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The initial action label to display.\n                    Defaults to 'action.view.modification' (Edit), is translated\n                    when the widget is translated.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>initialActionLabel</field>\n                </fields>\n              </widget>\n              <widget name=\"cancelActionLabel\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Cancel action label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The toggled action label to display.\n                    Defaults to 'command.cancel' (Cancel), is translated when\n                    the widget is translated.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cancelActionLabel</field>\n                </fields>\n              </widget>\n              <widget name=\"foldable\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Foldable</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, the layout will be\n                    displayed\n                    in a box that can be folded/unfolded in\n                    javascript. Ignored\n                    if the widget is not marked as handling\n                    labels as the header\n                    will not be displayed in this case. If\n                    the widget label is\n                    empty, a default label will be\n                    shown. Available since 5.7,\n                    defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldable</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"foldedByDefault\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Folded by default</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Available since 5.7, defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldedByDefault</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/toggleable_layout_with_forms_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"toggleableDocumentLayoutWithForms\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Toggleable Document Form</title>\n        <description>\n          This widget displays the document layouts of a document\n          which mode\n          can be toggled, with forms inside it.\n\n          Note that usually\n          layouts do not contain\n          any forms, but are surrounded by one, and\n          nesting forms breaks the\n          available actions. So you should make sure\n          there is no enclosing form\n          around the layout, or around this widget,\n          when using it.\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"toggleableLayoutViewWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>initialDocumentMode</widget>\n                </row>\n                <row>\n                  <widget>toggledDocumentMode</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n                <row>\n                  <widget>canToggleMode</widget>\n                </row>\n                <row>\n                  <widget>hideDefaultActions</widget>\n                </row>\n                <row>\n                  <widget>additionalActionsCategory</widget>\n                </row>\n                <row>\n                  <widget>additionalActionsCategoryDemo</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">formActionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">widgetsDisplay</widget>\n                </row>\n                <row>\n                  <widget>showEditOptions</widget>\n                </row>\n                <row>\n                  <widget>useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget>foldable</widget>\n                </row>\n                <row>\n                  <widget>foldedByDefault</widget>\n                </row>\n                <row>\n                  <widget>displayToggleActionInHeader</widget>\n                </row>\n                <row>\n                  <widget>initialActionLabel</widget>\n                </row>\n                <row>\n                  <widget>cancelActionLabel</widget>\n                </row>\n                <row>\n                  <widget>defaultLayout</widget>\n                </row>\n                <row>\n                  <widget>template</widget>\n                </row>\n              </rows>\n              <widget name=\"initialDocumentMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Initial document mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The initial document mode to use.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>initialDocumentMode</field>\n                </fields>\n              </widget>\n              <widget name=\"toggledDocumentMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Toggled document mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The toggled document mode to use.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>toggledDocumentMode</field>\n                </fields>\n              </widget>\n              <widget name=\"defaultLayout\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Default layout</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The default layout to use if no layout are defined\n                    for the given document mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>defaultLayout</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layouts</property>\n                </properties>\n              </widget>\n              <widget name=\"template\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout template to use instead of the\n                    one already set\n                    on the layout(s) definition(s).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layout_templates</property>\n                </properties>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given style class will be put in a \"div\"\n                    element around the layout.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"canToggleMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Can toggle mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean property to resolve when\n                    deciding whether the toggle button should be displayed or\n                    not. Defaults to an EL expression checking permission\n                    'Write' on the document. Examples: false,\n                    #{nxd:hasPermission(value, 'Write') and\n                    currentUser.isMemberOf('togglers_groups')}.\n                    Default\n                    expression used:\n                    #{webActions.checkFilter('canToggleLayoutToEditMode')}\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>canToggleMode</field>\n                </fields>\n              </widget>\n              <widget name=\"hideDefaultActions\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Hide default actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, actions from the default\n                    category 'EDIT_DOCUMENT_FORM' will not be displayed on the\n                    layout in toggled mode. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideDefaultActions</field>\n                </fields>\n              </widget>\n              <widget name=\"additionalActionsCategory\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Additional actions category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The additional actions category to use when\n                    displaying the layout in toggled mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>additionalActionsCategory</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"additionalActionsCategoryDemo\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Additional actions category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The additional actions category to use when\n                    displaying the layout in toggled mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>additionalActionsCategory</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"showEditOptions\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Show edit options</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, additional edit options\n                    (like a textarea for comment to be visible in the document\n                    history) will be visible after the layout in toggled (edit)\n                    mode. Only visible if value bound to the layout is a\n                    document model. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showEditOptions</field>\n                </fields>\n              </widget>\n              <widget name=\"displayToggleActionInHeader\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Display toggle action in header</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true (and widget has a header,\n                    because it handles its label), actions will be displayed in\n                    the header. This includes the \"toggle\" action, as well as\n                    \"save\" actions. Only the \"toggle\" action is hidden from the\n                    rendering when it is displayed on top. \"Save\" actions are\n                    shown twice. Available since 5.7, defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>displayToggleActionInHeader</field>\n                </fields>\n              </widget>\n              <widget name=\"useAjaxForm\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Use ajax actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, actions will be performed\n                    using ajax. Note that sometimes, actions will require you to\n                    reload the whole page for other elements than the current\n                    zone to be re-rendered, so using ajax will not be user\n                    friendly in these cases. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>useAjaxForm</field>\n                </fields>\n              </widget>\n              <widget name=\"initialActionLabel\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Initial action label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The initial action label to display.\n                    Defaults to 'action.view.modification' (Edit), is translated\n                    when the widget is translated.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>initialActionLabel</field>\n                </fields>\n              </widget>\n              <widget name=\"cancelActionLabel\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Cancel action label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The toggled action label to display.\n                    Defaults to 'command.cancel' (Cancel), is translated when\n                    the widget is translated.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cancelActionLabel</field>\n                </fields>\n              </widget>\n              <widget name=\"foldable\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Foldable</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, the content view will be\n                    displayed in a box that can be folded if users would like to\n                    hide this content view content. Note that this state is not\n                    persisted. Available since 5.7, defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldable</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"foldedByDefault\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Folded by default</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Available since 5.7, defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldedByDefault</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/toggleable_document_layout_with_forms_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentLayout\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Document Layouts</title>\n        <description>\n          This widget displays the document layouts of a document\n          for the given mode.\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>false</containingForm>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"documentLayoutView_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>mode</widget>\n                </row>\n                <row>\n                  <widget>documentMode</widget>\n                </row>\n                <row>\n                  <widget>template</widget>\n                </row>\n                <row>\n                  <widget>defaultLayout</widget>\n                </row>\n                <row>\n                  <widget>canToggleMode</widget>\n                </row>\n              </rows>\n              <widget name=\"mode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout mode to use.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>mode</field>\n                </fields>\n              </widget>\n              <widget name=\"documentMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Document mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The document mode to use.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>documentMode</field>\n                </fields>\n              </widget>\n              <widget name=\"template\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout template to use instead of the\n                    one already set\n                    on the layout(s) definition(s).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layout_templates</property>\n                </properties>\n              </widget>\n              <widget name=\"defaultLayout\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Default layout</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The default layout to use if no layout are defined\n                    for the given document mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>defaultLayout</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layouts</property>\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"canToggleMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Can toggle mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean property to resolve when\n                    deciding whether the toggle button should be displayed or\n                    not. Defaults to an EL expression checking permission\n                    'Write' on the document. Examples: false,\n                    #{nxd:hasPermission(value, 'Write') and\n                    currentUser.isMemberOf('togglers_groups')}.\n                    Default\n                    expression used:\n                    #{webActions.checkFilter('canToggleLayoutToEditMode')}\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>canToggleMode</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/document_layout_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentActions\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Form actions</title>\n        <description>\n          <p>This widget displays actions filtered on the document given as\n            field mapping.\n          </p>\n          <p>\n            It will display actions in the category given in the 'category'\n            property. The widget label and help label will be displayed above\n            the actions.\n          </p>\n          <p>\n            This widget requires to be surrounded by a form, so if it displays\n            fancybox actions for instance, their popup content cannot contain\n            another form.\n          </p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>false</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"documentActions_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_category</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_moreMenuLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_actions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"currentDocumentActions\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <deprecatedVersion>5.7.3</deprecatedVersion>\n        <title>Form actions</title>\n        <description>\n          <p>This widget displays actions filtered on the current document.</p>\n          <p>Since 5.7.3, use \"documentActions\" instead.</p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>false</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"currentDocumentActions_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_category</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_moreMenuLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_actions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentActionsWithForms\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Toolbar actions</title>\n        <description>\n          <p>This widget displays actions filtered on the document given as\n            field mapping, and surrounds them by a form.\n          </p>\n          <p>\n            It will display actions in the category given in the 'category'\n            property. The widget label and help label will be displayed above\n            the actions.\n          </p>\n          <p>\n            The fact that actions are surrounded by their own form makes it\n            possible to use fancybox actions for instance, whose popup content\n            would use a different form.\n          </p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"documentActionsWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_category</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_moreMenuLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_actions_with_forms_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"currentDocumentActionsWithForms\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <deprecatedVersion>5.7.3</deprecatedVersion>\n        <title>Toolbar actions</title>\n        <description>\n          <p>This widget displays actions filtered on the current document, and\n            surrounds them by a form.\n          </p>\n          <p>Since 5.7.3, use \"documentActionsWithForms\" instead.</p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"currentDocumentActionsWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_category</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_moreMenuLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_actions_with_forms_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentAction\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Form action</title>\n        <description>\n          <p>This widget displays an action filtered on context using document\n            given as field mapping.\n          </p>\n          <p>\n            It needs the action id as property \"actionId\".\n            <br/>\n            Its bound value is used for actions with type \"widget\".\n          </p>\n          <p>\n            This widget requires to be surrounded by a form, so if it displays\n            fancybox actions for instance, their popup content cannot contain\n            another form.\n          </p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>false</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"documentAction_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_actionId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_action_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"currentDocumentAction\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <deprecatedVersion>5.7.3</deprecatedVersion>\n        <title>Form action</title>\n        <description>\n          <p>This widget displays an action filtered on current document context\n          </p>\n          <p>Since 5.7.3, use \"documentAction\" instead.</p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>false</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"currentDocumentAction_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_actionId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_addForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_action_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentActionWithForms\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Toolbar action</title>\n        <description>\n          <p>This widget displays an action filtered on current document context\n          </p>\n          <p>\n            It needs the action id as property \"actionId\".\n            <br/>\n            Its bound value is used for actions with type \"widget\".\n          </p>\n          <p>\n            The fact that action is surrounded by its own form makes it\n            possible to use fancybox actions for instance, whose popup content\n            would use a different form.\n          </p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"documentActionWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_actionId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_action_with_forms_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"currentDocumentActionWithForms\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <deprecatedVersion>5.7.3</deprecatedVersion>\n        <title>Toolbar action</title>\n        <description>\n          <p>This widget displays an action filtered on current document context\n          </p>\n          <p>Since 5.7.3, use \"documentActionWithForms\" instead.</p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"currentDocumentActionWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_actionId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_action_with_forms_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentTabsWithForms\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Tabs</title>\n        <description>\n          <p>This widget displays tabs filtered on current document context</p>\n          <p>\n            It needs the action id as property \"actionId\".\n            <br/>\n            Its bound value is used for actions with type \"widget\".\n          </p>\n          <p>\n            The fact that action is surrounded by its own form makes it\n            possible to use fancybox actions for instance, whose popup content\n            would use a different form.\n          </p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">false</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"documentTabsWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_category</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_hideSingleTab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_link_view</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_link_pattern</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_tabs_with_forms_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"userVirtualGroups\">\n      <configuration>\n        <sinceVersion>5.5</sinceVersion>\n        <title>User virtual groups</title>\n        <description>\n          This widget displays the user virtual groups.\n        </description>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/user_vgoups_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"datetimeRange\">\n      <configuration>\n        <title>Datetime range</title>\n        <documentation>\n          Widget used to search on a date range.\n          Two fields are required:\n          <ul>\n            <li>A field to map the min date</li>\n            <li>A field to map the max date</li>\n          </ul>\n        </documentation>\n        <sinceVersion>5.7</sinceVersion>\n        <categories>\n          <category>search</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>date</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"startDefaultTime\">00:00:00</property>\n            <property name=\"endDefaultTime\">23:59:59</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"daterange_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_pattern</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_timeZone</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"daterange_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_format</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_locale</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_timeZone</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerImg</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerStyleClass</widget>\n                </row>\n                <row>\n                  <widget>datetimeRange_startDefaultTime</widget>\n                </row>\n                <row>\n                  <widget>datetimeRange_endDefaultTime</widget>\n                </row>\n              </rows>\n              <widget name=\"datetimeRange_startDefaultTime\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Datetime Range Start Default Time</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The start default time, ignore if time is\n                    not taken into account in the date pattern/format. Defaults\n                    to 00:00:00, available since 7.1.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>startDefaultTime</field>\n                </fields>\n                <controls mode=\"any\">\n                  <control name=\"sinceVersion\">7.1</control>\n                </controls>\n              </widget>\n              <widget name=\"datetimeRange_endDefaultTime\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Datetime Range End Default Time</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The end default time, ignore if time is\n                    not taken into account in the date pattern/format. Defaults\n                    to 23:59:59, available since 7.1.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>endDefaultTime</field>\n                </fields>\n                <controls mode=\"any\">\n                  <control name=\"sinceVersion\">7.1</control>\n                </controls>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/date_range_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"path\">\n      <configuration>\n        <title>Path</title>\n        <documentation>\n          The path widget displays a popup browser in the document\n          hierarchy.\n        </documentation>\n        <sinceVersion>5.7</sinceVersion>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n            <type>path</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>path</type>\n          </defaultTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"path_widget_type_properties\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/search_path_widget.xhtml</property>\n    </widgetType>\n\n    <widgetType name=\"dropZone\">\n      <configuration>\n        <sinceVersion>5.8</sinceVersion>\n        <title>Drop zone</title>\n        <description>\n          <p>\n            The dropZone widget wraps its subwidgets with a div acting as\n            the\n            drop zone to be able to drop files inside it.\n          </p>\n          <p>\n            More information is available on the\n            <a href=\"http://doc.nuxeo.com/x/c4ao\" target=\"_blank\">Drag and\n              Drop Service\n              documentation</a>\n            .\n          </p>\n        </description>\n        <categories>\n          <category>decoration</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"dropZone_widget_type_properties\">\n              <rows>\n                <row>\n                  <widget>dropContext</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget>isEmpty</widget>\n                </row>\n                <row>\n                  <widget>emptyMessage</widget>\n                </row>\n                <row>\n                  <widget>cannotDrop</widget>\n                </row>\n                <row>\n                  <widget>cannotDropMessage</widget>\n                </row>\n              </rows>\n              <widget name=\"dropContext\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Drop context</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">The drop context is a marker used to\n                    identify which action will be called on drop. Actions with\n                    the given category will be be taken into account. Their id\n                    should correspond to the operation or automation chain\n                    identifier.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>dropContext</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"isEmpty\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Is empty</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">Expression resolving to a boolean stating if\n                    the drop zone is empty. If it resolves to true, subwidgets\n                    are not displayed.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>isEmpty</field>\n                </fields>\n              </widget>\n              <widget name=\"emptyMessage\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Empty message</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">Message to display if the drop zone is\n                    empty.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>emptyMessage</field>\n                </fields>\n              </widget>\n              <widget name=\"cannotDrop\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Cannot drop</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">Expression resolving to a boolean stating if\n                    user should not be able to drop elements inside the drop\n                    zone (because user does not have enough rights to create\n                    documents, for instance).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cannotDrop</field>\n                </fields>\n              </widget>\n              <widget name=\"cannotDropMessage\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Cannot drop message</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">Message to display if user cannot drop items\n                    in the drop zone.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cannotDropMessage</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/drop_zone_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"chainedDirectory\">\n      <configuration>\n        <title>Chained Vocabulary</title>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"chainedDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>childDirectory</widget>\n                </row>\n                <row>\n                  <widget>localize</widget>\n                </row>\n              </rows>\n              <widget name=\"childDirectory\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Vocabulary</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Select the child or hierarchical directory\n                    mapped.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>childDirectory</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">child_vocabularies</property>\n                </properties>\n                <properties widgetMode=\"edit\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"localize\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Localize</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">If true, labels will be localized.</label>\n                </helpLabels>\n                <fields>\n                  <field>localize</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"chainedDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget>required</widget>\n                </row>\n                <row>\n                  <widget>allowBranchSelection</widget>\n                </row>\n                <row>\n                  <widget>on2rows</widget>\n                </row>\n                <row>\n                  <widget>directory_ordering</widget>\n                </row>\n              </rows>\n              <widget name=\"required\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Required</label>\n                </labels>\n                <fields>\n                  <field>required</field>\n                </fields>\n              </widget>\n              <widget name=\"allowBranchSelection\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Allow incomplete selection</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, user cannot select only the\n                    first item in the selection, he will have to select a second\n                    item too. Defaults to false, available since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>allowBranchSelection</field>\n                </fields>\n              </widget>\n              <widget name=\"on2rows\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">On 2 rows</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If true, display the selectors on two rows.\n                    Defaults to\n                    false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>on2rows</field>\n                </fields>\n              </widget>\n              <widget name=\"directory_ordering\" type=\"selectOneListbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Sort criterion</label>\n                </labels>\n                <fields>\n                  <field>ordering</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Label (default)\" itemValue=\"label\"/>\n                  <option itemLabel=\"Ordering\" itemValue=\"ordering\"/>\n                  <option itemLabel=\"Id\" itemValue=\"id\"/>\n                </selectOptions>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/chain_monoselect_2levels_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"multiChainedDirectory\">\n      <configuration>\n        <title>Multiple chained Vocabulary</title>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"multiChainedDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>childDirectory</widget>\n                </row>\n                <row>\n                  <widget>localize</widget>\n                </row>\n              </rows>\n              <widget name=\"childDirectory\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Vocabulary</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Select the child or hierarchical directory\n                    mapped.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>childDirectory</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">child_vocabularies</property>\n                </properties>\n                <properties widgetMode=\"edit\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"localize\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Localize</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">If true, labels will be localized.</label>\n                </helpLabels>\n                <fields>\n                  <field>localize</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"multiChainedDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget>required</widget>\n                </row>\n                <row>\n                  <widget>allowBranchSelection</widget>\n                </row>\n                <row>\n                  <widget>on2rows</widget>\n                </row>\n                <row>\n                  <widget>directory_ordering</widget>\n                </row>\n              </rows>\n              <widget name=\"required\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Required</label>\n                </labels>\n                <fields>\n                  <field>required</field>\n                </fields>\n              </widget>\n              <widget name=\"allowBranchSelection\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Allow incomplete selection</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, user cannot select only the\n                    first item in the selection, he will have to select a second\n                    item too. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>allowBranchSelection</field>\n                </fields>\n              </widget>\n              <widget name=\"on2rows\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">On 2 rows</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If true, display the selectors on two rows.\n                    Defaults to\n                    false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>on2rows</field>\n                </fields>\n              </widget>\n              <widget name=\"directory_ordering\" type=\"selectOneListbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Sort criterion</label>\n                </labels>\n                <fields>\n                  <field>ordering</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Label (default)\" itemValue=\"label\"/>\n                  <option itemLabel=\"Ordering\" itemValue=\"ordering\"/>\n                  <option itemLabel=\"Id\" itemValue=\"id\"/>\n                </selectOptions>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/chain_multiselect_2levels_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"shuttle\">\n      <configuration>\n        <title>Shuttle widget</title>\n        <sinceVersion>6.0</sinceVersion>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/shuttle_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.base/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.base--widgets1",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.base--widgets1",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"document_edit_comment\" type=\"textarea\">\n      <labels>\n        <label mode=\"any\">label.editComment</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">label.editComment.tooltip</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>contextData['comment']</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"create\">hidden</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"document_edit_current_version\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.version</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">label.versioning.currentVersion.tooltip</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>#{versioningManager.getVersionLabel(layoutValue)}</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"create\">hidden</mode>\n        <mode value=\"any\">\n          #{nxu:test(layoutValue.versionable and\n          !layoutValue.folder, 'view', 'hidden')}\n        </mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"document_edit_versioning_options\" type=\"setVariable\">\n      <labels>\n        <label mode=\"any\">label.versioning.selectVersioningOption</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">label.versioning.changeVersion.tooltip</label>\n      </helpLabels>\n      <translated>true</translated>\n      <widgetModes>\n        <mode value=\"create\">hidden</mode>\n        <mode value=\"any\">\n          #{nxu:test(layoutValue.versionable and not\n          layoutValue.folder and\n          versioningManager.getVersionIncEditOptions(layoutValue).hasOptions(),\n          mode, 'hidden')}\n        </mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"var\">incOptions</property>\n        <property name=\"value\">\n          #{versioningManager.getVersionIncEditOptions(layoutValue)}\n        </property>\n        <property name=\"cache\">true</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"versioning_options\" type=\"selectOneRadio\">\n          <fields>\n            <field>contextData['VersioningOption']</field>\n          </fields>\n          <properties widgetMode=\"edit\">\n            <property name=\"defaultValue\">\n              #{incOptions.defaultVersioningAction.name()}\n            </property>\n            <property name=\"converter\">documentVersioningConverter</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"required\">true</property>\n            <property name=\"requiredMessage\">\n              #{messages['error.versioning.none_selected']}\n            </property>\n          </properties>\n          <selectOptions>\n            <options itemLabel=\"#{messages[item.getValue()]}\" itemValue=\"#{item.getKey()}\" value=\"#{incOptions.optionsForDisplay}\" var=\"item\"/>\n          </selectOptions>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"userPanelTop\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">USER_PANEL_TOP</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"gridStyleClass\">gridStyle12</control>\n      </controls>\n    </widget>\n\n    <widget name=\"userPanelLeft\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">USER_PANEL_LEFT</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"gridStyleClass\">gridStyle5</control>\n      </controls>\n    </widget>\n\n    <widget name=\"userPanelRight\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">USER_PANEL_RIGHT</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"gridStyleClass\">gridStyle7</control>\n      </controls>\n    </widget>\n\n    <widget name=\"userPanelBottom\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">USER_PANEL_BOTTOM</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"gridStyleClass\">gridStyle12</control>\n      </controls>\n    </widget>\n\n    <widget name=\"userLayout\" type=\"layout\">\n      <properties widgetMode=\"any\">\n        <property name=\"name\">user</property>\n      </properties>\n    </widget>\n\n\n    <widget name=\"userAdditionalWidgets\" type=\"documentActions\">\n      <properties widgetMode=\"any\">\n        <property name=\"category\">USER_ADDITIONAL_WIDGETS</property>\n        <property name=\"widgetMode\">#{layout.mode}</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.base/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.base--actions",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.base--actions",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"userLayout\" order=\"100\" type=\"widget\">\n      <category>USER_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">userLayout</property>\n      </properties>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.base/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.base--layouts",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.base--layouts",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"gridUserLayout\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_grid_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>userPanelTop</widget>\n        </row>\n        <row>\n          <widget>userPanelLeft</widget>\n          <widget>userPanelRight</widget>\n        </row>\n        <row>\n          <widget>userPanelBottom</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"user\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>username</widget>\n        </row>\n        <row>\n          <widget>firstname</widget>\n        </row>\n        <row>\n          <widget>lastname</widget>\n        </row>\n        <row>\n          <widget>company</widget>\n        </row>\n        <row>\n          <widget>email</widget>\n        </row>\n        <row>\n          <widget>groups</widget>\n        </row>\n        <row>\n          <widget>groupsValidator</widget>\n        </row>\n        <row>\n          <widget>vgroups</widget>\n        </row>\n        <row>\n          <widget>passwordMatcher</widget>\n        </row>\n        <row>\n          <widget>userAdditionalWidgets</widget>\n        </row>\n      </rows>\n      <widget name=\"username\" type=\"text\">\n        <labels>\n          <label mode=\"any\">username</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">username</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n          <mode value=\"editPassword\">********</mode>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"validator\">\n            #{userManagementActions.validateUserName}\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"firstname\" type=\"text\">\n        <labels>\n          <label mode=\"any\">firstName</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">firstName</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"lastname\" type=\"text\">\n        <labels>\n          <label mode=\"any\">lastName</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">lastName</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"company\" type=\"text\">\n        <labels>\n          <label mode=\"any\">company</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">company</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"email\" type=\"text\">\n        <labels>\n          <label mode=\"any\">email</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">email</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"groups\" type=\"multipleUsersSuggestion\">\n        <labels>\n          <label mode=\"any\">label.userManager.userGroups</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">groups</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"edit\">\n            #{nxu:test(webActions.checkFilter('usersGroupsManagementAccess'),\n            'edit', 'view')}\n          </mode>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"any\">\n          <property name=\"hideVirtualGroups\">true</property>\n          <property name=\"userSuggestionSearchType\">GROUP_TYPE</property>\n        </properties>\n      </widget>\n\n      <widget name=\"groupsValidator\" type=\"template\">\n        <labels>\n          <label mode=\"any\"/>\n        </labels>\n        <translated>true</translated>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n          <mode value=\"editPassword\">********</mode>\n          <mode value=\"view\">hidden</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <!-- XXX: depends on firstPassword and secondPassword widget names -->\n          <property name=\"template\">\n            /widgets/user_groups_validation_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n\n      <widget name=\"vgroups\" type=\"userVirtualGroups\">\n        <labels>\n          <label mode=\"any\">label.userManager.userVirtualGroups</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">username</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"create\">hidden</mode>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n      </widget>\n       <widget name=\"passwordMatcher\" type=\"template\">\n        <labels>\n          <label mode=\"create\">label.immediateCreation</label>\n          <label mode=\"any\"/>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">password</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n          <mode value=\"editPassword\">********</mode>\n          <mode value=\"any\">hidden</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"template\">\n            /widgets/user_password_widget_template.xhtml\n          </property>\n        </properties>\n        <properties widgetMode=\"editPassword\">********<property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"template\">\n            /widgets/user_password_validation_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"profile_password\">********<templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>profilePasswordMatcher</widget>\n        </row>\n      </rows>\n      <widget name=\"profilePasswordMatcher\" type=\"template\">\n        <labels>\n          <label mode=\"any\"/>\n        </labels>\n        <fields>\n          <field schema=\"user\">password</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editProfilePassword\">********</mode>\n          <mode value=\"any\">hidden</mode>\n        </widgetModes>\n        <properties widgetMode=\"editProfilePassword\">********<property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"template\">\n            /widgets/user_profile_password_validation_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"user_registration\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>username</widget>\n        </row>\n        <row>\n          <widget>firstname</widget>\n        </row>\n        <row>\n          <widget>lastname</widget>\n        </row>\n        <row>\n          <widget>company</widget>\n        </row>\n        <row>\n          <widget>email</widget>\n        </row>\n        <row>\n          <widget>groups</widget>\n        </row>\n        <row>\n          <widget>groupsValidator</widget>\n        </row>\n        <row>\n          <widget>vgroups</widget>\n        </row>\n      </rows>\n      <widget name=\"username\" type=\"text\">\n        <labels>\n          <label mode=\"any\">username</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">login</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n          <mode value=\"editPassword\">********</mode>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"validator\">\n            #{userManagementActions.validateUserName}\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"firstname\" type=\"text\">\n        <labels>\n          <label mode=\"any\">firstName</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">firstName</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"lastname\" type=\"text\">\n        <labels>\n          <label mode=\"any\">lastName</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">lastName</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"company\" type=\"text\">\n        <labels>\n          <label mode=\"any\">company</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">company</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"email\" type=\"text\">\n        <labels>\n          <label mode=\"any\">email</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">email</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"groups\" type=\"multipleUsersSuggestion\">\n        <labels>\n          <label mode=\"any\">label.userManager.userGroups</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">groups</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"edit\">\n            #{nxu:test(webActions.checkFilter('usersGroupsManagementAccess'),\n            'edit', 'view')}\n          </mode>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"any\">\n          <property name=\"hideVirtualGroups\">true</property>\n          <property name=\"userSuggestionSearchType\">GROUP_TYPE</property>\n        </properties>\n      </widget>\n      <widget name=\"groupsValidator\" type=\"template\">\n        <labels>\n          <label mode=\"any\"/>\n        </labels>\n        <translated>true</translated>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n          <mode value=\"editPassword\">********</mode>\n          <mode value=\"view\">hidden</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <!-- XXX: depends on firstPassword and secondPassword widget names -->\n          <property name=\"template\">\n            /widgets/user_groups_validation_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"vgroups\" type=\"userVirtualGroups\">\n        <labels>\n          <label mode=\"any\">label.userManager.userVirtualGroups</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">login</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"create\">hidden</mode>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n      </widget>\n    </layout>\n\n    <layout name=\"group\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>group_name</widget>\n        </row>\n        <row>\n          <widget>group_label</widget>\n        </row>\n        <row>\n          <widget>group_members</widget>\n        </row>\n        <row>\n          <widget>group_subgroups</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"user_group_suggestion\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>selection</widget>\n        </row>\n      </rows>\n      <widget name=\"selection\" type=\"multipleUsersSuggestion\">\n        <!-- add empty field to map layout value directly -->\n        <fields>\n          <field/>\n        </fields>\n        <labels>\n          <label mode=\"any\">label.security.usersOrGroups</label>\n        </labels>\n        <properties widgetMode=\"edit\">\n          <property name=\"hideHelpLabel\">true</property>\n          <property name=\"placeholder\">label.security.search</property>\n        </properties>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n        </widgetModes>\n      </widget>\n    </layout>\n\n    <layout name=\"user_group_prefixed_suggestion\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>selection</widget>\n        </row>\n      </rows>\n      <widget name=\"selection\" type=\"multipleUsersSuggestion\">\n        <!-- add empty field to map layout value directly -->\n        <fields>\n          <field/>\n        </fields>\n        <labels>\n          <label mode=\"any\">label.security.usersOrGroups</label>\n        </labels>\n        <properties widgetMode=\"edit\">\n          <property name=\"prefixed\">true</property>\n          <property name=\"hideHelpLabel\">true</property>\n          <property name=\"placeholder\">label.security.search</property>\n        </properties>\n        <properties widgetMode=\"view\">\n          <property name=\"prefixed\">true</property>\n        </properties>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n        </widgetModes>\n      </widget>\n    </layout>\n\n    <layout name=\"document_content_filter\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>search_title</widget>\n        </row>\n        <row>\n          <widget>search_modified_min</widget>\n          <widget>search_modified_max</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"document_edit_form_options\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>document_edit_comment</widget>\n        </row>\n        <row>\n          <widget>document_edit_current_version</widget>\n        </row>\n        <row>\n          <widget>document_edit_versioning_options</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.base",
          "name": "org.nuxeo.ecm.platform.forms.layouts.webapp.base",
          "requirements": [],
          "resolutionOrder": 633,
          "services": [],
          "startOrder": 330,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.forms.layouts.webapp.base\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n    point=\"widgets\">\n\n    <widget name=\"displayObsoleteEntries\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display obsolete entries</label>\n      </labels>\n      <fields>\n        <field>displayObsoleteEntries</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_directory_name\" type=\"selectOneResource\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Directory Name</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the directory\n        </label>\n      </helpLabels>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <fields>\n        <field>directoryName</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"required\">true</property>\n      </properties>\n      <properties mode=\"any\">\n        <property name=\"resourceName\">vocabularies</property>\n        <property name=\"includel10nDirectories\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"select2_directory_fetch_mode\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Fetch Mode</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the fetch mode for directory entries.\n          Directory entries can either be fetched if they start with the\n          search term or if thery contain the search term.\n          Available since 5.9.2.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>contains</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Starts with (default)\" itemValue=\"false\" />\n        <option itemLabel=\"Contains\" itemValue=\"true\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"select2_dbl10n\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Activate database localization</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Activate retrieval of localized labels in the\n          vocabulary database, when translations are held by the directory\n          itself, in fields with a label_[lang] pattern, and defaulting to\n          label_en. Available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>dbl10n</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_canSelectParent\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Can select parent</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Check this option to allow selection of\n          intermediate\n          groups.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>canSelectParent</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_filterParent\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Filter parent</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Check this option to apply filter on\n          intermediate\n          groups.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>filterParent</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_dropdownOnArrow\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Dropdown on Arrow </label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Check this option to dropdown the suggestions only when clicking the arrow on\n          the right of the single suggestion widget. By default the suggestions are\n          dropped down wherever you click.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>dropdownOnArrow</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_separator\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Select2 separator</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Separator character or string used to delimit ids\n          in value attribute of the multi-valued selects.\n          The default delimiter is the , character.\n        </label>\n      </helpLabels>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n      <fields>\n        <field>separator</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_frequency\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Select2 frequency</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Delay (in milliseconds) before sending a request\n          to the server after a character is typed.\n          Default value is 300ms.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>frequency</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_closeOnSelect\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Select2 closeOnSelect</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n         If set to false the dropdown is not closed after a selection is made,\n         allowing for rapid selection of multiple items.\n         By default this option is set to true.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>closeOnSelect</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_directory_labelFieldName\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Label field name</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the Directory field that should be\n          used to\n          define the Label of entry.\n          If not set 'label'\n          will be\n          used. In case of\n          localization with a directory field for\n          each supported language (see\n          dbl10n option), by default\n          fields with pattern like 'label_en',\n          'label_fr' or\n          'label_de' will\n          be searched. You can customize looked up\n          fields by\n          specifying\n          a pattern like\n          'label_{lang}' where the part {lang}\n          will be\n          replaced with\n          the current locale.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>labelFieldName</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestionSearchType\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Search type</label>\n      </labels>\n      <fields>\n        <field>userSuggestionSearchType</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Users and Groups\" itemValue=\"\" />\n        <option itemLabel=\"Users\" itemValue=\"USER_TYPE\" />\n        <option itemLabel=\"Groups\" itemValue=\"GROUP_TYPE\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"userSuggestion_groupRestriction\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Group id restriction</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Enter the id of a group to suggest only user from this\n          group.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>groupRestriction</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_prefixed\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Use prefixed reference</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Check this box if you want the references prefixed\n          with \"user:\" or \"group:\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>prefixed</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_firstLabelField\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">First label field</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Field to use as the first label when displaying the\n          selected user. Defaults to 'firstName'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>firstLabelField</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_secondLabelField\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Second label field</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Field to use as the second label when displaying the\n          selected user. Defaults to 'lastName'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>secondLabelField</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_thirdLabelField\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Third label field</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Field to use as the third label when displaying the\n          selected user. Defaults to 'email'. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>thirdLabelField</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_hideFirstLabel\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide first label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean indicating if the first label should be\n          hidden. Defaults to false.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideFirstLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_hideSecondLabel\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide second label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean indicating if the second label should be\n          hidden.Defaults to false.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideSecondLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_hideThirdLabel\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide third label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean indicating if the third label should be\n          hidden. Defaults to false. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideThirdLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_displayAction\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display action</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The display action to use when rendering the user or\n          group. Can be 'nothing' to just display text only, 'view' to have a\n          link going to the user or group view, or 'edit' to have a link going\n          to the user or group edition. The 'edit' action assumes the widget is\n          used in the Users and Groups management.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>displayAction</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"View\" itemValue=\"view\" />\n        <option itemLabel=\"Edit\" itemValue=\"edit\" />\n        <option itemLabel=\"Nothing\" itemValue=\"nothing\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"userSuggestion_displayEmailInSuggestion\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display email for users</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean indicating if the email should be displayed\n          for users. Defaults to false. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>displayEmailInSuggestion</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestionMaxSearchResults\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Max search results</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Number of maximum search results in the suggestion\n          (defaults to 0 that means no limit).\n        </label>\n      </helpLabels>\n      <fields>\n        <field>userSuggestionMaxSearchResults</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_minChars\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Minimum characters</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The minimal number of characters to type for the\n          suggestion to be active. Defaults to 3.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>minChars</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_resultLimit\" type=\"int\">\n      <sinceVersion>8.2</sinceVersion>\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Limit returned results</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The maximal number of result returned by the suggestion.\n          Defaults to unlimited.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>limit</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_frequency\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Frequency</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Delay (in seconds) before activating the suggestion\n          pop-up. Default value is 0.\n        </label>\n      </helpLabels>\n\n      <fields>\n        <field>frequency</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_requestDelay\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Request delay</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The requestDelay attribute specifies an amount of time\n          in milliseconds for the request to wait in the queue before being sent\n          to the server. If a similar request is added to the queue before the\n          delay is over, the original request is removed from the queue and not\n          sent.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>requestDelay</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_width\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Width</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">The suggestion width.</label>\n      </helpLabels>\n      <fields>\n        <field>width</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_helpLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Help Label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The help label is displayed below the\n          widget.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>helpLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_containerCssClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Container css class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Css class of the Select2 selection container\n        </label>\n      </helpLabels>\n      <fields>\n        <field>containerCssClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_dropdownCssClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Dropdown css class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Css class of the Select2 dropdown suggestion\n        </label>\n      </helpLabels>\n      <fields>\n        <field>dropdownCssClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_suggestionFormatter\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Suggestion Formatter</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the JavaScript function that\n          will be\n          called by select2 to do the formatting of the\n          suggestedentries.\n          The\n          target function should take as input\n          the javascript Document as\n          returned by Automation and should\n          return some Html.\n          Use the \"Inline Javascript\" property field to define your own\n          formatter.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>suggestionFormatter</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_selectionFormatter\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Selection Formatter</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the JavaScript function that\n          will be\n          called by the widget to do the formatting of the\n          selected entries.\n          The\n          target function should take as input\n          the javascript Document as\n          returned by Automation and should\n          return some Html.\n          Use the \"Inline Javascript\" property field to define your own\n          formatter.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>selectionFormatter</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_additionalParam\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Additional Operation Parameters</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the JavaScript function that\n          will be\n          called by select2 to pass additional parameters to\n          the automation operation. See https://doc.nuxeo.com/x/iQhvAQ.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>additionalOperationParameters</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_inlinejsDemoPreview\" type=\"textarea\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Inline Javascript</label>\n      </labels>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"edit_demo_preview\">#{layout.mode}</mode>\n      </widgetModes>\n      <helpLabels>\n        <label mode=\"any\">\n          Javascript to be injected in the page with\n          the Widget.\n          You can define here custom formatters\n          referenced in \"Selection\n          Formatter\" and\n          \"Suggestion Formatter\" fields. Example:\n          &lt;pre&gt;\n          function myFormatter(entry) {\n          var markup = entry.displayLabel;\n          return markup;\n          }\n          &lt;/pre&gt; </label>\n      </helpLabels>\n      <fields>\n        <field>inlinejs</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_inlinejs\" type=\"codearea\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Inline Javascript</label>\n      </labels>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <helpLabels>\n        <label mode=\"any\">\n          Javascript to be injected in the page with\n          the Widget.\n          You can define here custom formatters\n          referenced in \"Selection\n          Formatter\" and\n          \"Suggestion Formatter\" fields. Example:\n          &lt;pre&gt;\n          function myFormatter(entry) {\n          var markup = entry.displayLabel;\n          return markup;\n          }\n          &lt;/pre&gt; </label>\n      </helpLabels>\n      <fields>\n        <field>inlinejs</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"language\">javascript</property>\n      </properties>\n    </widget>\n\n    <widget name=\"select2_directorySuggestion_canAddNewEntry\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Can add new entry</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean stating if user should be able to add a new\n          entry on the directory from this widget. Available since 5.9.1,\n          defaults to \"false\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>canAddNewEntry</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_directorySuggestion_addNewEntryFilter\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Filter for adding a new entry</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action filter id used to check whether user should\n          be presented the 'add new entry' action on the suggestion widget.\n          The\n          variable 'directoryName' is available in context for this filter\n          evaluation. Available since 5.9.1, defaults to\n          'canAddEntryFromSuggestDirectoryWidget'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>addNewEntryFilter</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_tab\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Tab</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The tab to select when clicking on the document link.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>tab</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_subTab\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Sub Tab</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The sub tab to select when clicking on the document\n          link.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>subTab</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_pageProviderName\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Document page provider name</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The page provider that will be called to perform a\n          search for the suggestion. It must accept one parameter that will be\n          replaced by the suggestion input. Since 5.7, additional parameters set\n          on the page provider definition will also be taken into account (but\n          the suggestion input will still be used as the first implicit\n          parameter). If no name is defined, a default page provider is used.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pageProviderName</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_pageProviderPageSize\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Document page provider page size</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Page provider result's page size. Default value is 20.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pageSize</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_queryDemoPreview\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">NXQL Query</label>\n      </labels>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"edit_demo_preview\">#{layout.mode}</mode>\n      </widgetModes>\n      <helpLabels>\n        <label mode=\"any\">\n          NXQL Query to fetch the suggestions. This property is\n          ignored if a\n          Page Provider name is given.\n          The widget doesn't append a '%'\n          wildcard to the parameter passed to query.\n          &lt;p&gt;\n          Example: select *\n          from Document where dc:title LIKE '?%'\n          &lt;/p&gt;\n        </label>\n      </helpLabels>\n      <fields>\n        <field>query</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_query\" type=\"codearea\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">NXQL Query</label>\n      </labels>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <helpLabels>\n        <label mode=\"any\">\n          NXQL Query to fetch the suggestions. This property is\n          ignored if a\n          Page Provider name is given.\n          The widget doesn't append a '%'\n          wildcard to the parameter passed to query.\n          &lt;p&gt;\n          Example: select *\n          from Document where dc:title LIKE '?%'\n          &lt;/p&gt;\n        </label>\n      </helpLabels>\n      <fields>\n        <field>query</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"language\">nxql</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentSuggestion_documentSchemas\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Document Schemas</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Document Schemas that should be fetched and\n          sent to the\n          JS client side. You can enter comma separated values.\n          &lt;p&gt;\n          Example: dublincore,common\n          &lt;/p&gt; </label>\n      </helpLabels>\n      <fields>\n        <field>documentSchemas</field>\n      </fields>\n    </widget>\n\n    <widget name=\"documentSuggestion_repository\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Target Repository</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Id of the Nuxeo repositry that should be\n          accessed.\n          If\n          unsed, the default repository will be used.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>repository</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_orderable\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Orderable</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to order the\n          selected items. Available since 5.6.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>orderable</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_hideSearchTypeText\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide Search Type Label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to hide the\n          search type label. Available since 5.7.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideSearchTypeText</field>\n      </fields>\n    </widget>\n\n    <widget name=\"userSuggestion_displaySuggestionOnTop\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display Suggestion On Top</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to display the\n          suggestion\n          box on top of the search results. Available since 5.7.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>displaySuggestionOnTop</field>\n      </fields>\n    </widget>\n\n    <widget name=\"suggestion_hideHelpLabel\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide Help Label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to hide the\n          help label. Available since 5.7.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideHelpLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"ajaxReRender\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Ajax reRender</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Ajax rerender ids, separated by commas.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>ajaxReRender</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actionsDisplay\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Actions Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to 'buttons', actions will be displayed as\n          command\n          buttons. If set to 'links', actions will be displayed as\n          command links. If set to 'icons', actions will be displayed\n          as icons.\n          Else (default behaviour), actions will be\n          displayed as command links\n          and display their icons when\n          defined.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>actionsDisplay</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Icons and links (default)\" itemValue=\"icons_links\" />\n        <option itemLabel=\"Icons\" itemValue=\"icons\" />\n        <option itemLabel=\"Buttons\" itemValue=\"buttons\" />\n        <option itemLabel=\"Links\" itemValue=\"links\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"formActionsDisplay\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Actions Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to 'buttons', actions will be displayed as\n          command\n          buttons. If set to 'links', actions will be displayed as\n          command links. If set to 'icons', actions will be displayed\n          as icons.\n          Else (default behaviour), actions will be\n          displayed as command links\n          and display their icons when\n          defined.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>actionsDisplay</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Buttons (default)\" itemValue=\"buttons\" />\n        <option itemLabel=\"Icons and links\" itemValue=\"icons_links\" />\n        <option itemLabel=\"Icons\" itemValue=\"icons\" />\n        <option itemLabel=\"Links\" itemValue=\"links\" />\n      </selectOptions>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"select_path_tree\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Path tree</title>\n        <description>\n          Widget allowing to select one or more values from a Tree\n          constructed\n          from the navigation tree.\n\n          Set 'showAllDomains' property to\n          true if you want to be able to select\n          a path from an other domain than\n          the current one.\n        </description>\n        <categories>\n          <category>search</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n            <type>path</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/select_path_tree_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"singleUserSuggestion\">\n      <configuration>\n        <title>Single user/group suggestion</title>\n        <sinceVersion>5.4.2</sinceVersion>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"minChars\">3</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"singleUserSuggestion_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_prefixed</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_firstLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_secondLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_thirdLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideFirstLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideSecondLabel\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideThirdLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayAction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayEmailInSuggestion\n                  </widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"singleUserSuggestion_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionSearchType</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_groupRestriction\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_prefixed</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionMaxSearchResults\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayEmailInSuggestion\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownOnArrow</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/single_user_suggestion_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"multipleUsersSuggestion\">\n      <configuration>\n        <title>Multiple users/groups suggestion</title>\n        <sinceVersion>5.4.2</sinceVersion>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"minChars\">3</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"multipleUsersSuggestion_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_prefixed</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionSearchType</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_firstLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_secondLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_thirdLabelField\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideFirstLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideSecondLabel\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideThirdLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayAction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayEmailInSuggestion\n                  </widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"multipleUsersSuggestion_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_closeOnSelect</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionSearchType</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_groupRestriction\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_prefixed</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionMaxSearchResults\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displayEmailInSuggestion\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_separator</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/user_suggestion_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"suggestOneDirectory\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Single directory suggestion</title>\n        <description>\n          <p>Uses Select2 JS library to render a selection / suggestion widget\n            where suggestions are loaded from a given directory.\n          </p>\n        </description>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"minChars\">0</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"suggestOneDirectory_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_name</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_labelFieldName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"suggestOneDirectory_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_name</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_resultLimit</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_fetch_mode</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_labelFieldName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_canSelectParent</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_filterParent</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">displayObsoleteEntries</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownOnArrow</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directorySuggestion_canAddNewEntry</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directorySuggestion_addNewEntryFilter</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/suggest_one_directory_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"suggestManyDirectory\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Multiple directory suggestion</title>\n        <description>\n          <p>Uses Select2 JS library to render a selection / suggestion widget\n            where suggestions are loaded from a given directory.\n          </p>\n        </description>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"minChars\">0</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"suggestManyDirectory_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_name</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_labelFieldName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_separator</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"suggestManyDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_name</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_closeOnSelect</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_resultLimit</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_fetch_mode</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directory_labelFieldName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_canSelectParent</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_filterParent</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">displayObsoleteEntries</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directorySuggestion_canAddNewEntry</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_directorySuggestion_addNewEntryFilter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_separator</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/suggest_many_directory_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <!-- deprecated since 5.7.3, use a multipleUsersSuggestion with \"prefixed\" property\n      = true now -->\n    <widgetType name=\"multiplePrefixedUsersSuggestion\">\n      <configuration>\n        <title>Multiple prefixed users/groups suggestion</title>\n        <sinceVersion>5.4.2</sinceVersion>\n        <deprecatedVersion>5.7.3</deprecatedVersion>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout\n              name=\"multiplePrefixedUsersSuggestion_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionSearchType</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestionMaxSearchResults\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_requestDelay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_displaySuggestionOnTop\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">userSuggestion_hideSearchTypeText\n                  </widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/user_prefixed_suggestion_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"multipleDocumentsSuggestion\">\n      <configuration>\n        <title>Multiple documents suggestion</title>\n        <sinceVersion>5.4.2</sinceVersion>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"pageProviderName\">default_document_suggestion</property>\n            <property name=\"documentSchemas\">dublincore,common</property>\n            <property name=\"minChars\">3</property>\n            <property name=\"restoreSeamCtx\">true</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"multipleDocumentsSuggestion_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_tab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_subTab</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"multipleDocumentsSuggestion_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_closeOnSelect</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_query</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_queryDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderPageSize\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_additionalParam</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_separator</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/multiple_document_suggestion_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"singleDocumentSuggestion\">\n      <configuration>\n        <title>Single document suggestion</title>\n        <sinceVersion>5.5</sinceVersion>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"pageProviderName\">default_document_suggestion</property>\n            <property name=\"documentSchemas\">dublincore,common</property>\n            <property name=\"minChars\">3</property>\n            <property name=\"restoreSeamCtx\">true</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"singleDocumentSuggestion_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_tab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_subTab</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"singleDocumentSuggestion_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_query</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_queryDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderPageSize\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_additionalParam</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownOnArrow</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/single_document_suggestion_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"title_link\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Title with link</title>\n        <description>\n          <p>\n            This widget type displays a link to navigate to a document, as well\n            as a download link for the document binary content.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, it will be used to\n                display the document link and its title\n              </li>\n              <li>\n                second field maps the unique id to be used for contextual menu\n                (e.g. the document model id)\n              </li>\n              <li>\n                third field maps the displayed link title (can be the document\n                model description)\n              </li>\n              <li>\n                fourth field maps the document model file to be used for\n                download link\n              </li>\n              <li>\n                fifth field maps the file name to be used for download link\n                (can be the document model file name property value)\n              </li>\n            </ul>\n          </p>\n          <p>\n            It also requires the following properties configuration:\n            <ul>\n              <li>\n                file_schema: the file schema name, used to check whether\n                download link should be displayed (e.g: file)\n              </li>\n              <li>\n                file_property_name: the file property name (e.g file:content)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"title_linkWidget\" />\n        <confProperties>\n          <property name=\"sortPropertyName\">dc:title</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field></field>\n            <field>ref</field>\n            <field>dc.description</field>\n            <field>file.content</field>\n            <field>file.content.filename</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>standalone</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"hideExternalLink\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"title_link_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>tab</widget>\n                </row>\n                <row>\n                  <widget>subTab</widget>\n                </row>\n                <row>\n                  <widget>target</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">localize</widget>\n                </row>\n                <row>\n                  <widget>hideExternalLink</widget>\n                </row>\n                <row>\n                  <widget>hideDownloadLink</widget>\n                </row>\n              </rows>\n              <widget name=\"tab\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Tab</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The tab to select when clicking on the\n                    document link.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>tab</field>\n                </fields>\n              </widget>\n              <widget name=\"subTab\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Sub Tab</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The sub tab to select when clicking on the\n                    document link.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>subTab</field>\n                </fields>\n              </widget>\n              <widget name=\"target\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Target</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The target attribute of the link.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>target</field>\n                </fields>\n              </widget>\n              <widget name=\"localize\" type=\"checkbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Localize</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Flag indicating that the title is localized.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>localize</field>\n                </fields>\n              </widget>\n              <widget name=\"hideExternalLink\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Hide External Link</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Flag indicating that the external link, opening the document\n                    in a new conversation, must be hidden.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideExternalLink</field>\n                </fields>\n              </widget>\n              <widget name=\"hideDownloadLink\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Hide Download Link</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Flag indicating that the download link must be hidden.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideDownloadLink</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_title_link_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"title_and_permlink\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <title>Title and permanent link</title>\n        <description>\n          This widgets displays the document title with a permlink icon. If the\n          document is a version, the major and minor are displayed in\n          parenthesis.\n\n          One field is required :\n          <ul>\n            <li>an empty field to map the document</li>\n          </ul>\n\n          Since 5.5, it also displays the document header related actions.\n          They\n          must be contributed in one of the following categories:\n          <ul>\n            <li>DOCUMENT_HEADER_ACTIONS_LIST</li>\n            <li>DOCUMENT_HEADER_ACTIONS_LIST_HREF</li>\n          </ul>\n\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field></field>\n            <field>uid:major_version</field>\n            <field>uid:minor_version</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>standalone</category>\n        </categories>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"title_and_permlink_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">localize</widget>\n                </row>\n              </rows>\n              <widget name=\"localize\" type=\"checkbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Localize</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Available since 5.7.1. Flag indicating that\n                    the title is localized.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>localize</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/title_with_permlink_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"select_l10n_vocabulary_tree\">\n      <configuration>\n        <sinceVersion>5.5</sinceVersion>\n        <title>Localized vocabulary tree</title>\n        <description>\n          Widget allowing to select one or more values in a tree\n          constructed\n          from a l10nvocabulary or l10nxvocabulary directory.\n        </description>\n        <categories>\n          <category>search</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"select_l10n_vocabulary_tree_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>directoryName</widget>\n                </row>\n                <row>\n                  <widget>directoryNameDemoPreview</widget>\n                </row>\n                <row>\n                  <widget>selectIdOnly</widget>\n                </row>\n                <row>\n                  <widget>keySeparator</widget>\n                </row>\n              </rows>\n              <widget name=\"directoryName\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Vocabulary</label>\n                </labels>\n                <fields>\n                  <field>directoryName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">vocabularies</property>\n                </properties>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"directoryNameDemoPreview\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Vocabulary</label>\n                </labels>\n                <fields>\n                  <field>directoryName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"selectIdOnly\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Select id only</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, only the entries id are\n                    stored instead of\n                    their path.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>selectIdOnly</field>\n                </fields>\n              </widget>\n              <widget name=\"keySeparator\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Key separator</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The string used to separate directory keys\n                    in the value.\n                    Defaults to \"/\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>keySeparator</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"select_l10n_vocabulary_tree_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget>multiSelect</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">displayObsoleteEntries</widget>\n                </row>\n                <row>\n                  <widget>ordering</widget>\n                </row>\n              </rows>\n              <widget name=\"multiSelect\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Multiple selection</label>\n                </labels>\n                <fields>\n                  <field>multiSelect</field>\n                </fields>\n              </widget>\n              <widget name=\"ordering\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Sort criterion</label>\n                </labels>\n                <fields>\n                  <field>ordering</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Label (default)\" itemValue=\"label\" />\n                  <option itemLabel=\"Ordering\" itemValue=\"ordering\" />\n                  <option itemLabel=\"Id\" itemValue=\"id\" />\n                </selectOptions>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/select_l10n_vocabulary_tree_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"contentViewWithForms\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>Content view</title>\n        <description>\n          This widget displays a content view, with forms inside it.\n\n          Note that usually layouts do not contain any forms, but are surrounded\n          by one, and nesting forms breaks the available actions. So you should\n          make sure there is no enclosing form around the layout, or around this\n          widget, when using it.\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <containingForm>true</containingForm>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"useAjaxPagination\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"contentView_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>contentViewName</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n                <row>\n                  <widget>useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget>useAjaxPagination</widget>\n                </row>\n                <row>\n                  <widget>ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget>hideTopPaginationControls</widget>\n                </row>\n                <row>\n                  <widget>defaultPageSize</widget>\n                </row>\n                <row>\n                  <widget>showPageSizeSelector</widget>\n                </row>\n                <row>\n                  <widget>showRefreshCommand</widget>\n                </row>\n                <row>\n                  <widget>showFilterForm</widget>\n                </row>\n                <row>\n                  <widget>showSyndicationLinks</widget>\n                </row>\n                <row>\n                  <widget>showCSVExport</widget>\n                </row>\n                <row>\n                  <widget>showPDFExport</widget>\n                </row>\n                <row>\n                  <widget>foldable</widget>\n                </row>\n                <row>\n                  <widget>foldedByDefault</widget>\n                </row>\n                <!-- not exposed in studio for now -->\n                <row>\n                  <widget>foldableBoxStyleClass</widget>\n                </row>\n                <row>\n                  <widget>foldedIfEmpty</widget>\n                </row>\n                <row>\n                  <widget>hideEmpty</widget>\n                </row>\n                <row>\n                  <widget>contentViewIconPath</widget>\n                </row>\n                <!-- not sure this is a good idea: there are other forms in the template -->\n                <!-- <row> <widget>removeForm</widget> </row> -->\n              </rows>\n              <widget name=\"contentViewName\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Content View name</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The content view to display.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>contentViewName</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">contentViews</property>\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given style class will be put in a \"div\"\n                    element around the content view.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"useAjaxForm\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Use ajax actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, selection actions will be\n                    performed using ajax. Note that sometimes, selection actions\n                    will require you to reload the whole page for other elements\n                    than the content view to be re-rendered, so using ajax will\n                    not be user friendly in these cases. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>useAjaxForm</field>\n                </fields>\n              </widget>\n              <widget name=\"useAjaxPagination\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Use ajax pagination</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, pagination actions (first,\n                    previous, next, last) actions will be performed using ajax.\n                    Defaults to true since version 7.10.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>useAjaxPagination</field>\n                </fields>\n              </widget>\n              <widget name=\"ajaxReRender\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Ajax reRender</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given ajax reRender ids will be added to\n                    the zones to\n                    reRender on some actions (page navigation,\n                    result layout\n                    selection, selection actions...). Available\n                    since 5.7.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>ajaxReRender</field>\n                </fields>\n              </widget>\n              <widget name=\"hideTopPaginationControls\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Show only bottom pagination controls</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, pagination actions (first,\n                    previous, next, last) actions will only be displayed below\n                    the results. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideTopPaginationControls</field>\n                </fields>\n              </widget>\n              <widget name=\"defaultPageSize\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Default page size</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The default page size to use instead of the\n                    value set on the content view definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>defaultPageSize</field>\n                </fields>\n              </widget>\n              <widget name=\"showPageSizeSelector\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show page size selector</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide the page size\n                    selector, overriding the value set on the content view\n                    definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showPageSizeSelector</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\"\n                    itemValue=\"\" />\n                  <option itemLabel=\"No\" itemValue=\"false\" />\n                  <option itemLabel=\"Yes\" itemValue=\"true\" />\n                </selectOptions>\n              </widget>\n              <widget name=\"showRefreshCommand\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show refresh command</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide the refresh command,\n                    overriding the value set on the content view\n                    definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showRefreshCommand</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\"\n                    itemValue=\"\" />\n                  <option itemLabel=\"No\" itemValue=\"false\" />\n                  <option itemLabel=\"Yes\" itemValue=\"true\" />\n                </selectOptions>\n              </widget>\n              <widget name=\"showFilterForm\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show filter form</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide the filter form,\n                    overriding the value set on the content view\n                    definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showFilterForm</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\"\n                    itemValue=\"\" />\n                  <option itemLabel=\"No\" itemValue=\"false\" />\n                  <option itemLabel=\"Yes\" itemValue=\"true\" />\n                </selectOptions>\n              </widget>\n              <widget name=\"showSyndicationLinks\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show syndication links</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide syndication links,\n                    overriding the value set on the content view\n                    definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showSyndicationLinks</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\"\n                    itemValue=\"\" />\n                  <option itemLabel=\"No\" itemValue=\"false\" />\n                  <option itemLabel=\"Yes\" itemValue=\"true\" />\n                </selectOptions>\n              </widget>\n              <widget name=\"showCSVExport\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show CSV export</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide the CSV export link,\n                    overriding the value set on the content view definition for\n                    every result layouts. Warning: the content view result\n                    layouts should be configured to handle a CSV export.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showCSVExport</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\"\n                    itemValue=\"\" />\n                  <option itemLabel=\"No\" itemValue=\"false\" />\n                  <option itemLabel=\"Yes\" itemValue=\"true\" />\n                </selectOptions>\n              </widget>\n              <widget name=\"showPDFExport\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Show PDF export</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to show or hide the PDF export link,\n                    overriding the value set on the content view definition for\n                    every result layouts. Warning: the content view result\n                    layouts should be configured to handle a CSV export.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showPDFExport</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"(Default value from content view configuration)\"\n                    itemValue=\"\" />\n                  <option itemLabel=\"No\" itemValue=\"false\" />\n                  <option itemLabel=\"Yes\" itemValue=\"true\" />\n                </selectOptions>\n              </widget>\n              <widget name=\"foldable\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Foldable</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, the content view will be\n                    displayed in a box that can be folded/unfolded in\n                    javascript. Ignored if the widget is not marked as handling\n                    labels as the header will not be displayed in this case. If\n                    the widget label is empty, the content view title will be\n                    used. If this title is also empty, a default label will be\n                    shown. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldable</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"foldedByDefault\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Folded by default</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldedByDefault</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <!-- not exposed in studio for now -->\n              <widget name=\"foldableBoxStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Foldable Box Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given style class will be used on the\n                    foldable box.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldableBoxStyleClass</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"foldedIfEmpty\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Folded if empty</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldedIfEmpty</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"hideEmpty\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Hide if empty</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean to hide the complete rendering when\n                    content view is empty\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideEmpty</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"contentViewIconPath\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Content icon path</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The icon to display instead of the value set\n                    on the content view definition.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>contentViewIconPath</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"removeForm\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Remove form on content listing</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>removeForm</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/content_view_with_forms_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"contentViewSearchLayout\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Content view search layout</title>\n        <description>\n          This widget displays the search layout of a content view.\n        </description>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"contentView_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>contentViewName</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n              </rows>\n              <widget name=\"contentViewName\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Content View name</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Displays the search layout of this content\n                    view.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>contentViewName</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">contentViews</property>\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given style class will be put in a \"div\"\n                    element around the search layout.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/content_view_search_layout_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"saveBox\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Save box</title>\n        <description>\n          <p>This widget displays a save box with one input for the title and\n            one button to save.\n          </p>\n\n          <p>The input is mapped to the field of the widget.</p>\n\n          <p>It needs the action id as property \"actionId\" for\n            the \"save\" button.\n          </p>\n        </description>\n        <categories>\n          <category>configuration_not_ready</category>\n          <!--\n            <category>tab_designer</category>\n          -->\n        </categories>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/save_box_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"toggleableLayoutWithForms\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>Toggleable form</title>\n        <description>\n          This widget displays a form layout which mode can be\n          toggled, with forms inside it.\n\n          Note that usually layouts do not contain\n          any forms, but are surrounded by one, and nesting forms breaks the\n          available actions. So you should make sure there is no enclosing form\n          around the layout, or around this widget, when using it.\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"toggleableLayoutViewWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>initialLayoutName</widget>\n                </row>\n                <row>\n                  <widget>initialLayoutNameDemoPreview</widget>\n                </row>\n                <row>\n                  <widget>toggledLayoutName</widget>\n                </row>\n                <row>\n                  <widget>toggledLayoutNameDemoPreview</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n                <row>\n                  <widget>canToggleMode</widget>\n                </row>\n                <row>\n                  <widget>hideDefaultActions</widget>\n                </row>\n                <row>\n                  <widget>additionalActionsCategory</widget>\n                </row>\n                <row>\n                  <widget>additionalActionsCategoryDemo</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">formActionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">widgetsDisplay</widget>\n                </row>\n                <row>\n                  <widget>showEditOptions</widget>\n                </row>\n                <row>\n                  <widget>useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget>foldable</widget>\n                </row>\n                <row>\n                  <widget>foldedByDefault</widget>\n                </row>\n                <row>\n                  <widget>displayToggleActionInHeader</widget>\n                </row>\n                <row>\n                  <widget>initialActionLabel</widget>\n                </row>\n                <row>\n                  <widget>cancelActionLabel</widget>\n                </row>\n                <row>\n                  <widget>template</widget>\n                </row>\n              </rows>\n              <widget name=\"initialLayoutName\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout to display before toggling the\n                    mode. Also accepts a list of multiple layout names,\n                    separated by commas.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>initialLayoutName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layouts</property>\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"initialLayoutNameDemoPreview\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout to display before toggling the\n                    mode. Also accepts a list of multiple layout names,\n                    separated by commas.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>initialLayoutName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"toggledLayoutName\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Toggled layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout to display after toggling the\n                    mode. Also accepts a list of multiple layout names,\n                    separated by commas. If not filled, defaults to the initial\n                    layout name(s).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>toggledLayoutName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layouts</property>\n                </properties>\n              </widget>\n              <widget name=\"toggledLayoutNameDemoPreview\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Toggled layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout to display after toggling the\n                    mode. Also accepts a list of multiple layout names,\n                    separated by commas. If not filled, defaults to the initial\n                    layout name(s).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>toggledLayoutName</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"template\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout template to use instead of the\n                    one already set\n                    on the layout(s) definition(s).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layout_templates</property>\n                </properties>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given style class will be put in a \"div\"\n                    element around the layout.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"canToggleMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Can toggle mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean property to resolve when\n                    deciding whether the toggle button should be displayed or\n                    not. Defaults to an EL expression checking permission\n                    'Write' on the document. Examples: false,\n                    #{webActions.checkFilter('canToggleLayoutToEditMode') and\n                    currentUser.isMemberOf('togglers_groups')}.\n                    Default\n                    expression used (includes check for permission 'Write',\n                    check if document is in the trash, and check if document is\n                    mutable -- not a proxy nor a version):\n                    #{webActions.checkFilter('canToggleLayoutToEditMode')}\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>canToggleMode</field>\n                </fields>\n              </widget>\n              <widget name=\"hideDefaultActions\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Hide default actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, actions from the default\n                    category 'EDIT_DOCUMENT_FORM' will not be displayed on the\n                    layout in toggled mode. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideDefaultActions</field>\n                </fields>\n              </widget>\n              <widget name=\"additionalActionsCategory\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Additional actions category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The additional actions category to use when\n                    displaying the layout in toggled mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>additionalActionsCategory</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"additionalActionsCategoryDemo\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Additional actions category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The additional actions category to use when\n                    displaying the layout in toggled mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>additionalActionsCategory</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"showEditOptions\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Show edit options</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, additional edit options\n                    (like a textarea for comment to be visible in the document\n                    history) will be visible after the layout in toggled (edit)\n                    mode. Only visible if value bound to the layout is a\n                    document model. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showEditOptions</field>\n                </fields>\n              </widget>\n              <widget name=\"displayToggleActionInHeader\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Display toggle action in header</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true (and widget has a header,\n                    because it handles its label), actions will be displayed in\n                    the header. This includes the \"toggle\" action, as well as\n                    \"save\" actions. Only the \"toggle\" action is hidden from the\n                    rendering when it is displayed on top. \"Save\" actions are\n                    shown twice. Available since 5.7, defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>displayToggleActionInHeader</field>\n                </fields>\n              </widget>\n              <widget name=\"useAjaxForm\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Use ajax actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, actions will be performed\n                    using ajax. Note that sometimes, actions will require you to\n                    reload the whole page for other elements than the current\n                    zone to be re-rendered, so using ajax will not be user\n                    friendly in these cases. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>useAjaxForm</field>\n                </fields>\n              </widget>\n              <widget name=\"initialActionLabel\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Initial action label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The initial action label to display.\n                    Defaults to 'action.view.modification' (Edit), is translated\n                    when the widget is translated.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>initialActionLabel</field>\n                </fields>\n              </widget>\n              <widget name=\"cancelActionLabel\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Cancel action label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The toggled action label to display.\n                    Defaults to 'command.cancel' (Cancel), is translated when\n                    the widget is translated.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cancelActionLabel</field>\n                </fields>\n              </widget>\n              <widget name=\"foldable\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Foldable</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, the layout will be\n                    displayed\n                    in a box that can be folded/unfolded in\n                    javascript. Ignored\n                    if the widget is not marked as handling\n                    labels as the header\n                    will not be displayed in this case. If\n                    the widget label is\n                    empty, a default label will be\n                    shown. Available since 5.7,\n                    defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldable</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"foldedByDefault\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Folded by default</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Available since 5.7, defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldedByDefault</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/toggleable_layout_with_forms_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"toggleableDocumentLayoutWithForms\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Toggleable Document Form</title>\n        <description>\n          This widget displays the document layouts of a document\n          which mode\n          can be toggled, with forms inside it.\n\n          Note that usually\n          layouts do not contain\n          any forms, but are surrounded by one, and\n          nesting forms breaks the\n          available actions. So you should make sure\n          there is no enclosing form\n          around the layout, or around this widget,\n          when using it.\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"toggleableLayoutViewWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>initialDocumentMode</widget>\n                </row>\n                <row>\n                  <widget>toggledDocumentMode</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n                <row>\n                  <widget>canToggleMode</widget>\n                </row>\n                <row>\n                  <widget>hideDefaultActions</widget>\n                </row>\n                <row>\n                  <widget>additionalActionsCategory</widget>\n                </row>\n                <row>\n                  <widget>additionalActionsCategoryDemo</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">formActionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">widgetsDisplay</widget>\n                </row>\n                <row>\n                  <widget>showEditOptions</widget>\n                </row>\n                <row>\n                  <widget>useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget>foldable</widget>\n                </row>\n                <row>\n                  <widget>foldedByDefault</widget>\n                </row>\n                <row>\n                  <widget>displayToggleActionInHeader</widget>\n                </row>\n                <row>\n                  <widget>initialActionLabel</widget>\n                </row>\n                <row>\n                  <widget>cancelActionLabel</widget>\n                </row>\n                <row>\n                  <widget>defaultLayout</widget>\n                </row>\n                <row>\n                  <widget>template</widget>\n                </row>\n              </rows>\n              <widget name=\"initialDocumentMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Initial document mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The initial document mode to use.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>initialDocumentMode</field>\n                </fields>\n              </widget>\n              <widget name=\"toggledDocumentMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Toggled document mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The toggled document mode to use.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>toggledDocumentMode</field>\n                </fields>\n              </widget>\n              <widget name=\"defaultLayout\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Default layout</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The default layout to use if no layout are defined\n                    for the given document mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>defaultLayout</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layouts</property>\n                </properties>\n              </widget>\n              <widget name=\"template\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout template to use instead of the\n                    one already set\n                    on the layout(s) definition(s).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layout_templates</property>\n                </properties>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The given style class will be put in a \"div\"\n                    element around the layout.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"canToggleMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Can toggle mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean property to resolve when\n                    deciding whether the toggle button should be displayed or\n                    not. Defaults to an EL expression checking permission\n                    'Write' on the document. Examples: false,\n                    #{nxd:hasPermission(value, 'Write') and\n                    currentUser.isMemberOf('togglers_groups')}.\n                    Default\n                    expression used:\n                    #{webActions.checkFilter('canToggleLayoutToEditMode')}\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>canToggleMode</field>\n                </fields>\n              </widget>\n              <widget name=\"hideDefaultActions\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Hide default actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, actions from the default\n                    category 'EDIT_DOCUMENT_FORM' will not be displayed on the\n                    layout in toggled mode. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>hideDefaultActions</field>\n                </fields>\n              </widget>\n              <widget name=\"additionalActionsCategory\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Additional actions category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The additional actions category to use when\n                    displaying the layout in toggled mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>additionalActionsCategory</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"additionalActionsCategoryDemo\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Additional actions category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The additional actions category to use when\n                    displaying the layout in toggled mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>additionalActionsCategory</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"showEditOptions\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Show edit options</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, additional edit options\n                    (like a textarea for comment to be visible in the document\n                    history) will be visible after the layout in toggled (edit)\n                    mode. Only visible if value bound to the layout is a\n                    document model. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showEditOptions</field>\n                </fields>\n              </widget>\n              <widget name=\"displayToggleActionInHeader\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Display toggle action in header</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true (and widget has a header,\n                    because it handles its label), actions will be displayed in\n                    the header. This includes the \"toggle\" action, as well as\n                    \"save\" actions. Only the \"toggle\" action is hidden from the\n                    rendering when it is displayed on top. \"Save\" actions are\n                    shown twice. Available since 5.7, defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>displayToggleActionInHeader</field>\n                </fields>\n              </widget>\n              <widget name=\"useAjaxForm\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Use ajax actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, actions will be performed\n                    using ajax. Note that sometimes, actions will require you to\n                    reload the whole page for other elements than the current\n                    zone to be re-rendered, so using ajax will not be user\n                    friendly in these cases. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>useAjaxForm</field>\n                </fields>\n              </widget>\n              <widget name=\"initialActionLabel\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Initial action label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The initial action label to display.\n                    Defaults to 'action.view.modification' (Edit), is translated\n                    when the widget is translated.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>initialActionLabel</field>\n                </fields>\n              </widget>\n              <widget name=\"cancelActionLabel\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Cancel action label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The toggled action label to display.\n                    Defaults to 'command.cancel' (Cancel), is translated when\n                    the widget is translated.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cancelActionLabel</field>\n                </fields>\n              </widget>\n              <widget name=\"foldable\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Foldable</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, the content view will be\n                    displayed in a box that can be folded if users would like to\n                    hide this content view content. Note that this state is not\n                    persisted. Available since 5.7, defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldable</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n              <widget name=\"foldedByDefault\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Folded by default</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Available since 5.7, defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldedByDefault</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"view_reference\">view</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/toggleable_document_layout_with_forms_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentLayout\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Document Layouts</title>\n        <description>\n          This widget displays the document layouts of a document\n          for the given mode.\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>false</containingForm>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"documentLayoutView_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>mode</widget>\n                </row>\n                <row>\n                  <widget>documentMode</widget>\n                </row>\n                <row>\n                  <widget>template</widget>\n                </row>\n                <row>\n                  <widget>defaultLayout</widget>\n                </row>\n                <row>\n                  <widget>canToggleMode</widget>\n                </row>\n              </rows>\n              <widget name=\"mode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout mode to use.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>mode</field>\n                </fields>\n              </widget>\n              <widget name=\"documentMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Document mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The document mode to use.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>documentMode</field>\n                </fields>\n              </widget>\n              <widget name=\"template\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout template to use instead of the\n                    one already set\n                    on the layout(s) definition(s).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layout_templates</property>\n                </properties>\n              </widget>\n              <widget name=\"defaultLayout\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Default layout</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The default layout to use if no layout are defined\n                    for the given document mode.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>defaultLayout</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layouts</property>\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"canToggleMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Can toggle mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean property to resolve when\n                    deciding whether the toggle button should be displayed or\n                    not. Defaults to an EL expression checking permission\n                    'Write' on the document. Examples: false,\n                    #{nxd:hasPermission(value, 'Write') and\n                    currentUser.isMemberOf('togglers_groups')}.\n                    Default\n                    expression used:\n                    #{webActions.checkFilter('canToggleLayoutToEditMode')}\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>canToggleMode</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/document_layout_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentActions\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Form actions</title>\n        <description>\n          <p>This widget displays actions filtered on the document given as\n            field mapping.\n          </p>\n          <p>\n            It will display actions in the category given in the 'category'\n            property. The widget label and help label will be displayed above\n            the actions.\n          </p>\n          <p>\n            This widget requires to be surrounded by a form, so if it displays\n            fancybox actions for instance, their popup content cannot contain\n            another form.\n          </p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>false</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"documentActions_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_category</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_moreMenuLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_actions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"currentDocumentActions\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <deprecatedVersion>5.7.3</deprecatedVersion>\n        <title>Form actions</title>\n        <description>\n          <p>This widget displays actions filtered on the current document.</p>\n          <p>Since 5.7.3, use \"documentActions\" instead.</p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>false</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"currentDocumentActions_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_category</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_moreMenuLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_actions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentActionsWithForms\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Toolbar actions</title>\n        <description>\n          <p>This widget displays actions filtered on the document given as\n            field mapping, and surrounds them by a form.\n          </p>\n          <p>\n            It will display actions in the category given in the 'category'\n            property. The widget label and help label will be displayed above\n            the actions.\n          </p>\n          <p>\n            The fact that actions are surrounded by their own form makes it\n            possible to use fancybox actions for instance, whose popup content\n            would use a different form.\n          </p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"documentActionsWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_category</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_moreMenuLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_actions_with_forms_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"currentDocumentActionsWithForms\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <deprecatedVersion>5.7.3</deprecatedVersion>\n        <title>Toolbar actions</title>\n        <description>\n          <p>This widget displays actions filtered on the current document, and\n            surrounds them by a form.\n          </p>\n          <p>Since 5.7.3, use \"documentActionsWithForms\" instead.</p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"currentDocumentActionsWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_category</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_moreMenuLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_actions_with_forms_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentAction\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Form action</title>\n        <description>\n          <p>This widget displays an action filtered on context using document\n            given as field mapping.\n          </p>\n          <p>\n            It needs the action id as property \"actionId\".\n            <br />\n            Its bound value is used for actions with type \"widget\".\n          </p>\n          <p>\n            This widget requires to be surrounded by a form, so if it displays\n            fancybox actions for instance, their popup content cannot contain\n            another form.\n          </p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>false</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"documentAction_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_actionId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_action_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"currentDocumentAction\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <deprecatedVersion>5.7.3</deprecatedVersion>\n        <title>Form action</title>\n        <description>\n          <p>This widget displays an action filtered on current document context\n          </p>\n          <p>Since 5.7.3, use \"documentAction\" instead.</p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>false</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"currentDocumentAction_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_actionId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_addForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_action_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentActionWithForms\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Toolbar action</title>\n        <description>\n          <p>This widget displays an action filtered on current document context\n          </p>\n          <p>\n            It needs the action id as property \"actionId\".\n            <br />\n            Its bound value is used for actions with type \"widget\".\n          </p>\n          <p>\n            The fact that action is surrounded by its own form makes it\n            possible to use fancybox actions for instance, whose popup content\n            would use a different form.\n          </p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"documentActionWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_actionId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_action_with_forms_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"currentDocumentActionWithForms\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <deprecatedVersion>5.7.3</deprecatedVersion>\n        <title>Toolbar action</title>\n        <description>\n          <p>This widget displays an action filtered on current document context\n          </p>\n          <p>Since 5.7.3, use \"documentActionWithForms\" instead.</p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"currentDocumentActionWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_actionId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_disableFiltered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_action_with_forms_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"documentTabsWithForms\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Tabs</title>\n        <description>\n          <p>This widget displays tabs filtered on current document context</p>\n          <p>\n            It needs the action id as property \"actionId\".\n            <br />\n            Its bound value is used for actions with type \"widget\".\n          </p>\n          <p>\n            The fact that action is surrounded by its own form makes it\n            possible to use fancybox actions for instance, whose popup content\n            would use a different form.\n          </p>\n        </description>\n        <categories>\n          <category>tab_designer</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <containingForm>true</containingForm>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">false</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"documentTabsWithForms_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_category</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_hideSingleTab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_link_view</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_link_pattern</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/document_tabs_with_forms_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"userVirtualGroups\">\n      <configuration>\n        <sinceVersion>5.5</sinceVersion>\n        <title>User virtual groups</title>\n        <description>\n          This widget displays the user virtual groups.\n        </description>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/user_vgoups_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"datetimeRange\">\n      <configuration>\n        <title>Datetime range</title>\n        <documentation>\n          Widget used to search on a date range.\n          Two fields are required:\n          <ul>\n            <li>A field to map the min date</li>\n            <li>A field to map the max date</li>\n          </ul>\n        </documentation>\n        <sinceVersion>5.7</sinceVersion>\n        <categories>\n          <category>search</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>date</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"startDefaultTime\">00:00:00</property>\n            <property name=\"endDefaultTime\">23:59:59</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"daterange_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_pattern</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_timeZone</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"daterange_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_format</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_locale</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_timeZone</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerImg</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerStyleClass</widget>\n                </row>\n                <row>\n                  <widget>datetimeRange_startDefaultTime</widget>\n                </row>\n                <row>\n                  <widget>datetimeRange_endDefaultTime</widget>\n                </row>\n              </rows>\n              <widget name=\"datetimeRange_startDefaultTime\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Datetime Range Start Default Time</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The start default time, ignore if time is\n                    not taken into account in the date pattern/format. Defaults\n                    to 00:00:00, available since 7.1.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>startDefaultTime</field>\n                </fields>\n                <controls mode=\"any\">\n                  <control name=\"sinceVersion\">7.1</control>\n                </controls>\n              </widget>\n              <widget name=\"datetimeRange_endDefaultTime\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Datetime Range End Default Time</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The end default time, ignore if time is\n                    not taken into account in the date pattern/format. Defaults\n                    to 23:59:59, available since 7.1.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>endDefaultTime</field>\n                </fields>\n                <controls mode=\"any\">\n                  <control name=\"sinceVersion\">7.1</control>\n                </controls>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/date_range_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"path\">\n      <configuration>\n        <title>Path</title>\n        <documentation>\n          The path widget displays a popup browser in the document\n          hierarchy.\n        </documentation>\n        <sinceVersion>5.7</sinceVersion>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n            <type>path</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>path</type>\n          </defaultTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"path_widget_type_properties\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/search_path_widget.xhtml</property>\n    </widgetType>\n\n    <widgetType name=\"dropZone\">\n      <configuration>\n        <sinceVersion>5.8</sinceVersion>\n        <title>Drop zone</title>\n        <description>\n          <p>\n            The dropZone widget wraps its subwidgets with a div acting as\n            the\n            drop zone to be able to drop files inside it.\n          </p>\n          <p>\n            More information is available on the\n            <a href=\"http://doc.nuxeo.com/x/c4ao\" target=\"_blank\">Drag and\n              Drop Service\n              documentation</a>\n            .\n          </p>\n        </description>\n        <categories>\n          <category>decoration</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"dropZone_widget_type_properties\">\n              <rows>\n                <row>\n                  <widget>dropContext</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget>isEmpty</widget>\n                </row>\n                <row>\n                  <widget>emptyMessage</widget>\n                </row>\n                <row>\n                  <widget>cannotDrop</widget>\n                </row>\n                <row>\n                  <widget>cannotDropMessage</widget>\n                </row>\n              </rows>\n              <widget name=\"dropContext\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Drop context</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">The drop context is a marker used to\n                    identify which action will be called on drop. Actions with\n                    the given category will be be taken into account. Their id\n                    should correspond to the operation or automation chain\n                    identifier.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>dropContext</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"isEmpty\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Is empty</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">Expression resolving to a boolean stating if\n                    the drop zone is empty. If it resolves to true, subwidgets\n                    are not displayed.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>isEmpty</field>\n                </fields>\n              </widget>\n              <widget name=\"emptyMessage\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Empty message</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">Message to display if the drop zone is\n                    empty.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>emptyMessage</field>\n                </fields>\n              </widget>\n              <widget name=\"cannotDrop\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Cannot drop</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">Expression resolving to a boolean stating if\n                    user should not be able to drop elements inside the drop\n                    zone (because user does not have enough rights to create\n                    documents, for instance).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cannotDrop</field>\n                </fields>\n              </widget>\n              <widget name=\"cannotDropMessage\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Cannot drop message</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">Message to display if user cannot drop items\n                    in the drop zone.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cannotDropMessage</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/drop_zone_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"chainedDirectory\">\n      <configuration>\n        <title>Chained Vocabulary</title>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"chainedDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>childDirectory</widget>\n                </row>\n                <row>\n                  <widget>localize</widget>\n                </row>\n              </rows>\n              <widget name=\"childDirectory\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Vocabulary</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Select the child or hierarchical directory\n                    mapped.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>childDirectory</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">child_vocabularies</property>\n                </properties>\n                <properties widgetMode=\"edit\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"localize\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Localize</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">If true, labels will be localized.</label>\n                </helpLabels>\n                <fields>\n                  <field>localize</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"chainedDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget>required</widget>\n                </row>\n                <row>\n                  <widget>allowBranchSelection</widget>\n                </row>\n                <row>\n                  <widget>on2rows</widget>\n                </row>\n                <row>\n                  <widget>directory_ordering</widget>\n                </row>\n              </rows>\n              <widget name=\"required\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Required</label>\n                </labels>\n                <fields>\n                  <field>required</field>\n                </fields>\n              </widget>\n              <widget name=\"allowBranchSelection\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Allow incomplete selection</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, user cannot select only the\n                    first item in the selection, he will have to select a second\n                    item too. Defaults to false, available since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>allowBranchSelection</field>\n                </fields>\n              </widget>\n              <widget name=\"on2rows\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">On 2 rows</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If true, display the selectors on two rows.\n                    Defaults to\n                    false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>on2rows</field>\n                </fields>\n              </widget>\n              <widget name=\"directory_ordering\" type=\"selectOneListbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Sort criterion</label>\n                </labels>\n                <fields>\n                  <field>ordering</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Label (default)\" itemValue=\"label\" />\n                  <option itemLabel=\"Ordering\" itemValue=\"ordering\" />\n                  <option itemLabel=\"Id\" itemValue=\"id\" />\n                </selectOptions>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/chain_monoselect_2levels_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"multiChainedDirectory\">\n      <configuration>\n        <title>Multiple chained Vocabulary</title>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"multiChainedDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>childDirectory</widget>\n                </row>\n                <row>\n                  <widget>localize</widget>\n                </row>\n              </rows>\n              <widget name=\"childDirectory\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Vocabulary</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Select the child or hierarchical directory\n                    mapped.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>childDirectory</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">child_vocabularies</property>\n                </properties>\n                <properties widgetMode=\"edit\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"localize\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Localize</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">If true, labels will be localized.</label>\n                </helpLabels>\n                <fields>\n                  <field>localize</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"multiChainedDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget>required</widget>\n                </row>\n                <row>\n                  <widget>allowBranchSelection</widget>\n                </row>\n                <row>\n                  <widget>on2rows</widget>\n                </row>\n                <row>\n                  <widget>directory_ordering</widget>\n                </row>\n              </rows>\n              <widget name=\"required\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Required</label>\n                </labels>\n                <fields>\n                  <field>required</field>\n                </fields>\n              </widget>\n              <widget name=\"allowBranchSelection\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Allow incomplete selection</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, user cannot select only the\n                    first item in the selection, he will have to select a second\n                    item too. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>allowBranchSelection</field>\n                </fields>\n              </widget>\n              <widget name=\"on2rows\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">On 2 rows</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If true, display the selectors on two rows.\n                    Defaults to\n                    false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>on2rows</field>\n                </fields>\n              </widget>\n              <widget name=\"directory_ordering\" type=\"selectOneListbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Sort criterion</label>\n                </labels>\n                <fields>\n                  <field>ordering</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Label (default)\" itemValue=\"label\" />\n                  <option itemLabel=\"Ordering\" itemValue=\"ordering\" />\n                  <option itemLabel=\"Id\" itemValue=\"id\" />\n                </selectOptions>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/chain_multiselect_2levels_widget.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"shuttle\">\n      <configuration>\n        <title>Shuttle widget</title>\n        <sinceVersion>6.0</sinceVersion>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/shuttle_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"document_edit_comment\" type=\"textarea\">\n      <labels>\n        <label mode=\"any\">label.editComment</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">label.editComment.tooltip</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>contextData['comment']</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"create\">hidden</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"document_edit_current_version\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.version</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">label.versioning.currentVersion.tooltip</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>#{versioningManager.getVersionLabel(layoutValue)}</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"create\">hidden</mode>\n        <mode value=\"any\">\n          #{nxu:test(layoutValue.versionable and\n          !layoutValue.folder, 'view', 'hidden')}\n        </mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"document_edit_versioning_options\" type=\"setVariable\">\n      <labels>\n        <label mode=\"any\">label.versioning.selectVersioningOption</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">label.versioning.changeVersion.tooltip</label>\n      </helpLabels>\n      <translated>true</translated>\n      <widgetModes>\n        <mode value=\"create\">hidden</mode>\n        <mode value=\"any\">\n          #{nxu:test(layoutValue.versionable and not\n          layoutValue.folder and\n          versioningManager.getVersionIncEditOptions(layoutValue).hasOptions(),\n          mode, 'hidden')}\n        </mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"var\">incOptions</property>\n        <property name=\"value\">\n          #{versioningManager.getVersionIncEditOptions(layoutValue)}\n        </property>\n        <property name=\"cache\">true</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"versioning_options\" type=\"selectOneRadio\">\n          <fields>\n            <field>contextData['VersioningOption']</field>\n          </fields>\n          <properties widgetMode=\"edit\">\n            <property name=\"defaultValue\">\n              #{incOptions.defaultVersioningAction.name()}\n            </property>\n            <property name=\"converter\">documentVersioningConverter</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"required\">true</property>\n            <property name=\"requiredMessage\">\n              #{messages['error.versioning.none_selected']}\n            </property>\n          </properties>\n          <selectOptions>\n            <options value=\"#{incOptions.optionsForDisplay}\" var=\"item\"\n              itemLabel=\"#{messages[item.getValue()]}\" itemValue=\"#{item.getKey()}\" />\n          </selectOptions>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"userPanelTop\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">USER_PANEL_TOP</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"gridStyleClass\">gridStyle12</control>\n      </controls>\n    </widget>\n\n    <widget name=\"userPanelLeft\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">USER_PANEL_LEFT</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"gridStyleClass\">gridStyle5</control>\n      </controls>\n    </widget>\n\n    <widget name=\"userPanelRight\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">USER_PANEL_RIGHT</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"gridStyleClass\">gridStyle7</control>\n      </controls>\n    </widget>\n\n    <widget name=\"userPanelBottom\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">USER_PANEL_BOTTOM</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"gridStyleClass\">gridStyle12</control>\n      </controls>\n    </widget>\n\n    <widget name=\"userLayout\" type=\"layout\">\n      <properties widgetMode=\"any\">\n        <property name=\"name\">user</property>\n      </properties>\n    </widget>\n\n\n    <widget name=\"userAdditionalWidgets\" type=\"documentActions\">\n      <properties widgetMode=\"any\">\n        <property name=\"category\">USER_ADDITIONAL_WIDGETS</property>\n        <property name=\"widgetMode\">#{layout.mode}</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"userLayout\" type=\"widget\" order=\"100\">\n      <category>USER_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">userLayout</property>\n      </properties>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"gridUserLayout\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_grid_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>userPanelTop</widget>\n        </row>\n        <row>\n          <widget>userPanelLeft</widget>\n          <widget>userPanelRight</widget>\n        </row>\n        <row>\n          <widget>userPanelBottom</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"user\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>username</widget>\n        </row>\n        <row>\n          <widget>firstname</widget>\n        </row>\n        <row>\n          <widget>lastname</widget>\n        </row>\n        <row>\n          <widget>company</widget>\n        </row>\n        <row>\n          <widget>email</widget>\n        </row>\n        <row>\n          <widget>groups</widget>\n        </row>\n        <row>\n          <widget>groupsValidator</widget>\n        </row>\n        <row>\n          <widget>vgroups</widget>\n        </row>\n        <row>\n          <widget>passwordMatcher</widget>\n        </row>\n        <row>\n          <widget>userAdditionalWidgets</widget>\n        </row>\n      </rows>\n      <widget name=\"username\" type=\"text\">\n        <labels>\n          <label mode=\"any\">username</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">username</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n          <mode value=\"editPassword\">********</mode>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"validator\">\n            #{userManagementActions.validateUserName}\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"firstname\" type=\"text\">\n        <labels>\n          <label mode=\"any\">firstName</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">firstName</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"lastname\" type=\"text\">\n        <labels>\n          <label mode=\"any\">lastName</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">lastName</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"company\" type=\"text\">\n        <labels>\n          <label mode=\"any\">company</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">company</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"email\" type=\"text\">\n        <labels>\n          <label mode=\"any\">email</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">email</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"groups\" type=\"multipleUsersSuggestion\">\n        <labels>\n          <label mode=\"any\">label.userManager.userGroups</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">groups</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"edit\">\n            #{nxu:test(webActions.checkFilter('usersGroupsManagementAccess'),\n            'edit', 'view')}\n          </mode>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"any\">\n          <property name=\"hideVirtualGroups\">true</property>\n          <property name=\"userSuggestionSearchType\">GROUP_TYPE</property>\n        </properties>\n      </widget>\n\n      <widget name=\"groupsValidator\" type=\"template\">\n        <labels>\n          <label mode=\"any\"></label>\n        </labels>\n        <translated>true</translated>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n          <mode value=\"editPassword\">********</mode>\n          <mode value=\"view\">hidden</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <!-- XXX: depends on firstPassword and secondPassword widget names -->\n          <property name=\"template\">\n            /widgets/user_groups_validation_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n\n      <widget name=\"vgroups\" type=\"userVirtualGroups\">\n        <labels>\n          <label mode=\"any\">label.userManager.userVirtualGroups</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">username</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"create\">hidden</mode>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n      </widget>\n       <widget name=\"passwordMatcher\" type=\"template\">\n        <labels>\n          <label mode=\"create\">label.immediateCreation</label>\n          <label mode=\"any\"></label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"user\">password</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n          <mode value=\"editPassword\">********</mode>\n          <mode value=\"any\">hidden</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"template\">\n            /widgets/user_password_widget_template.xhtml\n          </property>\n        </properties>\n        <properties widgetMode=\"editPassword\">********<property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"template\">\n            /widgets/user_password_validation_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"profile_password\">********<templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>profilePasswordMatcher</widget>\n        </row>\n      </rows>\n      <widget name=\"profilePasswordMatcher\" type=\"template\">\n        <labels>\n          <label mode=\"any\"></label>\n        </labels>\n        <fields>\n          <field schema=\"user\">password</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editProfilePassword\">********</mode>\n          <mode value=\"any\">hidden</mode>\n        </widgetModes>\n        <properties widgetMode=\"editProfilePassword\">********<property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"template\">\n            /widgets/user_profile_password_validation_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"user_registration\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>username</widget>\n        </row>\n        <row>\n          <widget>firstname</widget>\n        </row>\n        <row>\n          <widget>lastname</widget>\n        </row>\n        <row>\n          <widget>company</widget>\n        </row>\n        <row>\n          <widget>email</widget>\n        </row>\n        <row>\n          <widget>groups</widget>\n        </row>\n        <row>\n          <widget>groupsValidator</widget>\n        </row>\n        <row>\n          <widget>vgroups</widget>\n        </row>\n      </rows>\n      <widget name=\"username\" type=\"text\">\n        <labels>\n          <label mode=\"any\">username</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">login</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n          <mode value=\"editPassword\">********</mode>\n          <mode value=\"any\">view</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n          <property name=\"validator\">\n            #{userManagementActions.validateUserName}\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"firstname\" type=\"text\">\n        <labels>\n          <label mode=\"any\">firstName</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">firstName</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"lastname\" type=\"text\">\n        <labels>\n          <label mode=\"any\">lastName</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">lastName</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"company\" type=\"text\">\n        <labels>\n          <label mode=\"any\">company</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">company</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"email\" type=\"text\">\n        <labels>\n          <label mode=\"any\">email</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">email</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"groups\" type=\"multipleUsersSuggestion\">\n        <labels>\n          <label mode=\"any\">label.userManager.userGroups</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">groups</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"edit\">\n            #{nxu:test(webActions.checkFilter('usersGroupsManagementAccess'),\n            'edit', 'view')}\n          </mode>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n        <properties widgetMode=\"any\">\n          <property name=\"hideVirtualGroups\">true</property>\n          <property name=\"userSuggestionSearchType\">GROUP_TYPE</property>\n        </properties>\n      </widget>\n      <widget name=\"groupsValidator\" type=\"template\">\n        <labels>\n          <label mode=\"any\"></label>\n        </labels>\n        <translated>true</translated>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n          <mode value=\"editPassword\">********</mode>\n          <mode value=\"view\">hidden</mode>\n        </widgetModes>\n        <properties widgetMode=\"edit\">\n          <!-- XXX: depends on firstPassword and secondPassword widget names -->\n          <property name=\"template\">\n            /widgets/user_groups_validation_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"vgroups\" type=\"userVirtualGroups\">\n        <labels>\n          <label mode=\"any\">label.userManager.userVirtualGroups</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field schema=\"userinfo\">login</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"create\">hidden</mode>\n          <mode value=\"editPassword\">********</mode>\n        </widgetModes>\n      </widget>\n    </layout>\n\n    <layout name=\"group\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>group_name</widget>\n        </row>\n        <row>\n          <widget>group_label</widget>\n        </row>\n        <row>\n          <widget>group_members</widget>\n        </row>\n        <row>\n          <widget>group_subgroups</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"user_group_suggestion\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>selection</widget>\n        </row>\n      </rows>\n      <widget name=\"selection\" type=\"multipleUsersSuggestion\">\n        <!-- add empty field to map layout value directly -->\n        <fields>\n          <field></field>\n        </fields>\n        <labels>\n          <label mode=\"any\">label.security.usersOrGroups</label>\n        </labels>\n        <properties widgetMode=\"edit\">\n          <property name=\"hideHelpLabel\">true</property>\n          <property name=\"placeholder\">label.security.search</property>\n        </properties>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n        </widgetModes>\n      </widget>\n    </layout>\n\n    <layout name=\"user_group_prefixed_suggestion\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>selection</widget>\n        </row>\n      </rows>\n      <widget name=\"selection\" type=\"multipleUsersSuggestion\">\n        <!-- add empty field to map layout value directly -->\n        <fields>\n          <field></field>\n        </fields>\n        <labels>\n          <label mode=\"any\">label.security.usersOrGroups</label>\n        </labels>\n        <properties widgetMode=\"edit\">\n          <property name=\"prefixed\">true</property>\n          <property name=\"hideHelpLabel\">true</property>\n          <property name=\"placeholder\">label.security.search</property>\n        </properties>\n        <properties widgetMode=\"view\">\n          <property name=\"prefixed\">true</property>\n        </properties>\n        <widgetModes>\n          <mode value=\"create\">edit</mode>\n        </widgetModes>\n      </widget>\n    </layout>\n\n    <layout name=\"document_content_filter\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>search_title</widget>\n        </row>\n        <row>\n          <widget>search_modified_min</widget>\n          <widget>search_modified_max</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"document_edit_form_options\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>document_edit_comment</widget>\n        </row>\n        <row>\n          <widget>document_edit_current_version</widget>\n        </row>\n        <row>\n          <widget>document_edit_versioning_options</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouts-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.LayoutStore--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.listing/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.listing--widgets",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.listing--widgets",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "name": "org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\">\n\n    <widget name=\"listing_link_tab\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Tab</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The tab to select when clicking on the\n          document link. Available since 5.4.2.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>tab</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_subTab\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Sub Tab</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The sub tab to select when clicking on the\n          document link. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>subTab</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_tabs\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Tabs</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Combination of tabs to select when clicking\n          on the\n          document link. Sample value: MAIN_TABS:document.\n          Available since 7.3.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>tabs</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_target\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Target</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Available since 6.0. The target attribute\n          of\n          the link.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>target</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_pattern\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Link Pattern</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The document pattern to use for this link (optional). Available since 8.1.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pattern</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_view\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Link View</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The document view to use for this link (optional). Available since 8.1.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>view</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_hideExternalLink\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide External Link</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Available since 5.7.2. Flag indicating that\n          the external link, opening the document in a new\n          conversation, must be hidden.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideExternalLink</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_hideDownloadLink\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide Download Link</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Available since 6.0. Flag indicating that\n          the download link must be hidden.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideDownloadLink</field>\n      </fields>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      The widget types from this contribution are intended to be used within a\n      layout displaying a table line. They can be configured to match metadata\n      from a table iteration item.\n      <br/>\n\n\n      The template \"/layouts/layout_listing_template.xhtml\" handles specific\n      configuration for lists of documents rendering. It applies to an item\n      instance of SelectDataModel named \"documents\" in the EL context.\n      <br/>\n\n\n      It also requires the following variables to be present in the EL context:\n      <ul>\n    <li>\n          provider: result provider used to get the list of items, its name\n          will\n          be used, as well as sort and pagination features it provides.\n        </li>\n    <li>\n          layoutListingStatus: iteration status as provided by the \"c:forEach\"\n          tag, used to print table header matching widget label.\n        </li>\n</ul>\n\n\n      It accepts the the following properties configuration:\n      <ul>\n    <li>\n          showListingHeader: true or false, used to define whether the table\n          header should be displayed. This property can also be passed in the EL\n          context, using the table iteration status. Defaults to false.\n        </li>\n    <li>\n          showRowEvenOddClass: true or false, used to define if a style class\n          should be set on table rows depending on the layoutListingStatus index\n          variable (row or odd). Defaults to false.\n        </li>\n</ul>\n\n      Its layout columns accept the following properties configuration:\n      <ul>\n    <li>\n          useFirstWidgetLabelAsColumnHeader: true or false, used to define if\n          first widget label should be used as column header label. Will use\n          translation settings from the widget configuration. Defaults to false.\n        </li>\n    <li>\n          sortPropertyName: name of the property that will be used by the\n          result provider when clicking on the table header. If not set, the\n          sort link will not be displayed. Defaults to null.\n        </li>\n    <li>\n          defaultSortAscending: define the initial sort order of the column\n          (true : ascending, false : descending) Defaults to null (will be\n          interpreted as ascending=true).\n        </li>\n    <li>\n          columnStyleClass: name of the style class that will be used for the\n          given column. Defaults to null.\n        </li>\n</ul>\n",
              "documentationHtml": "<p>\nThe widget types from this contribution are intended to be used within a\nlayout displaying a table line. They can be configured to match metadata\nfrom a table iteration item.\n</p><p>\nThe template &#34;/layouts/layout_listing_template.xhtml&#34; handles specific\nconfiguration for lists of documents rendering. It applies to an item\ninstance of SelectDataModel named &#34;documents&#34; in the EL context.\n</p><p>\nIt also requires the following variables to be present in the EL context:\n</p><ul><li>\nprovider: result provider used to get the list of items, its name\nwill\nbe used, as well as sort and pagination features it provides.\n</li><li>\nlayoutListingStatus: iteration status as provided by the &#34;c:forEach&#34;\ntag, used to print table header matching widget label.\n</li></ul>\n<p>\nIt accepts the the following properties configuration:\n</p><ul><li>\nshowListingHeader: true or false, used to define whether the table\nheader should be displayed. This property can also be passed in the EL\ncontext, using the table iteration status. Defaults to false.\n</li><li>\nshowRowEvenOddClass: true or false, used to define if a style class\nshould be set on table rows depending on the layoutListingStatus index\nvariable (row or odd). Defaults to false.\n</li></ul>\n<p>\nIts layout columns accept the following properties configuration:\n</p><ul><li>\nuseFirstWidgetLabelAsColumnHeader: true or false, used to define if\nfirst widget label should be used as column header label. Will use\ntranslation settings from the widget configuration. Defaults to false.\n</li><li>\nsortPropertyName: name of the property that will be used by the\nresult provider when clicking on the table header. If not set, the\nsort link will not be displayed. Defaults to null.\n</li><li>\ndefaultSortAscending: define the initial sort order of the column\n(true : ascending, false : descending) Defaults to null (will be\ninterpreted as ascending&#61;true).\n</li><li>\ncolumnStyleClass: name of the style class that will be used for the\ngiven column. Defaults to null.\n</li></ul>",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.listing/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.listing--widgettypes",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.listing--widgettypes",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <documentation>\n      The widget types from this contribution are intended to be used within a\n      layout displaying a table line. They can be configured to match metadata\n      from a table iteration item.\n      <br/>\n\n      The template \"/layouts/layout_listing_template.xhtml\" handles specific\n      configuration for lists of documents rendering. It applies to an item\n      instance of SelectDataModel named \"documents\" in the EL context.\n      <br/>\n\n      It also requires the following variables to be present in the EL context:\n      <ul>\n        <li>\n          provider: result provider used to get the list of items, its name\n          will\n          be used, as well as sort and pagination features it provides.\n        </li>\n        <li>\n          layoutListingStatus: iteration status as provided by the \"c:forEach\"\n          tag, used to print table header matching widget label.\n        </li>\n      </ul>\n\n      It accepts the the following properties configuration:\n      <ul>\n        <li>\n          showListingHeader: true or false, used to define whether the table\n          header should be displayed. This property can also be passed in the EL\n          context, using the table iteration status. Defaults to false.\n        </li>\n        <li>\n          showRowEvenOddClass: true or false, used to define if a style class\n          should be set on table rows depending on the layoutListingStatus index\n          variable (row or odd). Defaults to false.\n        </li>\n      </ul>\n      Its layout columns accept the following properties configuration:\n      <ul>\n        <li>\n          useFirstWidgetLabelAsColumnHeader: true or false, used to define if\n          first widget label should be used as column header label. Will use\n          translation settings from the widget configuration. Defaults to false.\n        </li>\n        <li>\n          sortPropertyName: name of the property that will be used by the\n          result provider when clicking on the table header. If not set, the\n          sort link will not be displayed. Defaults to null.\n        </li>\n        <li>\n          defaultSortAscending: define the initial sort order of the column\n          (true : ascending, false : descending) Defaults to null (will be\n          interpreted as ascending=true).\n        </li>\n        <li>\n          columnStyleClass: name of the style class that will be used for the\n          given column. Defaults to null.\n        </li>\n      </ul>\n    </documentation>\n\n    <widgetType name=\"listing_ajax_selection_box_with_current_document\">\n      <aliases>\n        <alias>listing_selection_box_with_current_document</alias>\n      </aliases>\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Ajax selection checkbox with current document</title>\n        <description>\n          <p>\n            This widget type displays a selection checkbox, that will perform\n            ajax selection of given item. The current document information is\n            also provided to restore current context when clicking on the link.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps a boolean representing the selection state\n              </li>\n              <li>\n                second field maps the string identifier used to perform\n                selection\n              </li>\n            </ul>\n          </p>\n          <p>\n            It also requires the following variables to be present in the EL\n            context:\n            <ul>\n              <li>\n                provider: result provider used to get the list of items, its\n                name will be used.\n              </li>\n              <li>\n                listName: the name of the list that will hold selected items\n              </li>\n              <li>currentDocument: the current document</li>\n            </ul>\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>selected</field>\n            <field>data.ref</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>hidden_listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_ajax_selection_box_with_current_document_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_ajax_selection_box\">\n      <aliases>\n        <alias>listing_selection_box</alias>\n      </aliases>\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Ajax selection checkbox</title>\n        <description>\n          <p>\n            This widget type displays a selection checkbox, that will perform\n            ajax selection of given item.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps a boolean representing the selection state\n              </li>\n              <li>\n                second field maps the string identifier used to perform\n                selection\n              </li>\n            </ul>\n          </p>\n          <p>\n            It also requires the following variables to be present in the EL\n            context:\n            <ul>\n              <li>\n                provider: result provider used to get the list of items, its\n                name will be used.\n              </li>\n              <li>\n                listName: the name of the list that will hold selected items\n              </li>\n            </ul>\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>selected</field>\n            <field>data.ref</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>hidden_listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_ajax_selection_box_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_icon_type\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Icon and document type</title>\n        <description>\n          <p>\n            This widget type displays a draggable icon corresponding to a\n            document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, the jsf method\n                nxd:iconPath will be used to provide its icon\n              </li>\n              <li>\n                second field maps the unique id to be used as drag/drop\n                identified (e.g. the document model id)\n              </li>\n              <li>\n                third field maps the icon title (can be the document model\n                type)\n              </li>\n              <li>\n                fourth field maps a boolean stating whether the widget\n                displays a droppable zone (e.g. if document is folderish)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_icon_typeWidget\"/>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n            <field>data.ref</field>\n            <field>data.type</field>\n            <field>data.folder</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_icon_type_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_big_icon_type\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Big icon and document type</title>\n        <description>\n          <p>\n            This widget type displays a big draggable icon corresponding to a\n            document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, the jsf method\n                nxd:bigIconPath will be used to provide its icon\n              </li>\n              <li>\n                second field maps the unique id to be used as drag/drop\n                identified (e.g. the document model id)\n              </li>\n              <li>\n                third field maps the displayed icon title (can be the document\n                model type)\n              </li>\n              <li>\n                fourth field maps a boolean stating whether the widget\n                displays\n                a droppable zone (e.g. if document is folderish)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_big_icon_typeWidget\"/>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n            <field>data.ref</field>\n            <field>data.type</field>\n            <field>data.folder</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_big_icon_type_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_big_icon_type_link\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Big icon and document type with link</title>\n        <description>\n          <p>\n            This widget type displays a big draggable icon corresponding to a\n            document with a link to the document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, the jsf method\n                nxd:bigIconPath will be used to provide its icon and to display\n                the document link\n              </li>\n              <li>\n                second field maps the unique id to be used as drag/drop\n                identified (e.g. the document model id)\n              </li>\n              <li>\n                third field maps the displayed icon title (can be the document\n                model type)\n              </li>\n              <li>\n                fourth field maps a boolean stating whether the widget\n                displays\n                a droppable zone (e.g. if document is folderish)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_big_icon_type_linkWidget\"/>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n            <field>data.ref</field>\n            <field>data.type</field>\n            <field>data.folder</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_big_icon_type_link_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_title_link\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Title with link</title>\n        <description>\n          <p>\n            This widget type displays a link to navigate to a document, as well\n            as a download link for the document binary content.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, it will be used to\n                display the document link and its title\n              </li>\n              <li>\n                second field maps the unique id to be used for contextual menu\n                (e.g. the document model id)\n              </li>\n              <li>\n                third field maps the displayed link title (can be the document\n                model description)\n              </li>\n              <li>\n                fourth field maps the document model file to be used for\n                download link\n              </li>\n              <li>\n                fifth field maps the file name to be used for download link\n                (can be the document model file name property value)\n              </li>\n            </ul>\n          </p>\n          <p>\n            It also requires the following properties configuration:\n            <ul>\n              <li>\n                file_schema: the file schema name, used to check whether\n                download link should be displayed (e.g: file)\n              </li>\n              <li>\n                file_property_name: the file property name (e.g file:content)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_title_linkWidget\"/>\n        <confProperties>\n          <property name=\"sortPropertyName\">dc:title</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n            <field>data.ref</field>\n            <field>data.dc.description</field>\n            <field>data.file.content</field>\n            <field>data.file.content.filename</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"hideExternalLink\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"listing_title_link_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_tab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_subTab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_tabs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_target</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_pattern</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_view</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_hideExternalLink</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_hideDownloadLink</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_title_link_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_id_title_link\">\n      <configuration>\n        <sinceVersion>7.4</sinceVersion>\n        <title>Document id title with link</title>\n        <description>\n          <p>\n            This widget type displays a link to navigate to a document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document id, it will be used to\n                display the document link\n              </li>\n              <li>\n                second field maps the repository name, it will be used to\n                display the document link\n              </li>\n              <li>\n                third field maps the displayed link title\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_id_title_linkWidget\"/>\n        <confProperties>\n          <property name=\"sortPropertyName\">dc:title</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data.id</field>\n            <field>data.repositoryName</field>\n            <field>data.dc.title</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"view\">view_documents</property>\n            <property name=\"pattern\">id</property>\n            <property name=\"hideExternalLink\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"listing_id_title_link_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_tab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_subTab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_tabs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_target</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_pattern</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_view</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_hideExternalLink</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_id_title_link_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_lock_icon\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Lock icon</title>\n        <description>\n          <p>This widget type displays a lock icon.</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps a property stating that lock icon should be\n                displayed if not empty (e.g. the document model lock state)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_lock_iconWidget\"/>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data.lock</field>\n            <field>data.lockInfo</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_lock_icon_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_author\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Author</title>\n        <description>\n          <p>This widget type displays a user name.</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>first field mapping the user identifier</li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_authorWidget\"/>\n        <confProperties>\n          <property name=\"sortPropertyName\">dc:creator</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data.dc.creator</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/single_user_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_last_contributor\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <title>Last contributor</title>\n        <description>\n          <p>This widget type displays the last contributor name</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>first field mapping the lastContributor field</li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_last_contributorWidget\"/>\n        <confProperties>\n          <property name=\"sortPropertyName\">dc:lastContributor</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data.dc.lastContributor</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/single_user_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <!-- Deprecated since NXP-6825 is fixed but still useful for Studio configuration -->\n    <widgetType name=\"listing_lifecycle\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Lifecycle state</title>\n        <description>\n          <p>This widget type displays a life cycle state name.</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>first field mapping the life cycle state name</li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_lifecycleWidget\"/>\n        <confProperties>\n          <property name=\"sortPropertyName\">ecm:currentLifeCycleState</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data.currentLifeCycleState</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_lifecycle_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_livedit_link\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Live edit link</title>\n        <description>\n          <p>This widget type displays a live edit link.</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field mapping the document model to be used for live\n                edit link\n              </li>\n            </ul>\n          </p>\n          <p>\n            It also requires the following properties configuration:\n            <ul>\n              <li>file_schema: the file schema name</li>\n              <li>file_field_name: the file field name</li>\n              <li>filename_field_name: the file name field name</li>\n            </ul>\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_livedit_link_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_version\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Version</title>\n        <description>\n          <p>This widget type displays a document model version label</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field mapping the document model, its version label will\n                be retrieved querying the versioning service\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_versionWidget\"/>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_version_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_thumbnail\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Thumbnail</title>\n        <description>\n          <p>This widget type displays the document thumbnail.</p>\n          <p>\n            It requires the following fields configuration: first field maps\n            the document model.\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_thumbnail_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_main_file_size\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Main File Size</title>\n        <description>\n          <p>\n            This widget type displays the size of the main blob of the\n            document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, it will be used to\n                display the size.\n              </li>\n            </ul>\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_main_file_size_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_main_file_format\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Main File Format</title>\n        <description>\n          <p>\n            This widget type displays the format of the main file of the\n            document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, it will be used to\n                display the format.\n              </li>\n            </ul>\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_main_file_format_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_manage_document\">\n      <configuration>\n        <sinceVersion>5.9.3</sinceVersion>\n        <title>Manage Document</title>\n        <description>\n          <p>This widget type displays a clickable icon when the document can be\n            managed by the current user. Clicking the icon goes directly to the\n            manage\n            tab.\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_manage_document.xhtml\n      </property>\n\n    </widgetType>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.listing/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.listing--widgets1",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.listing--widgets1",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"listing_ajax_selection_box_with_current_document\" type=\"listing_ajax_selection_box_with_current_document\">\n      <aliases>\n        <alias>listing_selection_box_with_current_document</alias>\n      </aliases>\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <fields>\n        <field>selected</field>\n        <field>data.ref</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_ajax_selection_box\" type=\"listing_ajax_selection_box\">\n      <aliases>\n        <alias>listing_selection_box</alias>\n      </aliases>\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <fields>\n        <field>selected</field>\n        <field>data.ref</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_icon_type\" type=\"listing_icon_type\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <fields>\n        <field>data</field>\n        <field>data.ref</field>\n        <field>data.type</field>\n        <field>data.folder</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_big_icon_type\" type=\"listing_big_icon_type\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <fields>\n        <field>data</field>\n        <field>data.ref</field>\n        <field>data.type</field>\n        <field>data.folder</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_big_icon_type_link\" type=\"listing_big_icon_type_link\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <fields>\n        <field>data</field>\n        <field>data.ref</field>\n        <field>data.type</field>\n        <field>data.folder</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_title_link\" type=\"listing_title_link\">\n      <labels>\n        <label mode=\"any\">label.content.header.title</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data</field>\n        <field>data.ref</field>\n        <field>data.dc.description</field>\n        <field>data.file.content</field>\n        <field>data.file.content.filename</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"tabs\">MAIN_TABS:documents</property>\n        <property name=\"file_property_name\">file:content</property>\n        <property name=\"file_schema\">file</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_lock_icon\" type=\"listing_lock_icon\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <fields>\n        <field>data.lock</field>\n        <field>data.lockInfo</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_modification_date\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.content.header.modified</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.modified</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n      <properties mode=\"csv\">\n        <property name=\"csv_formatMask\">#{nxu:basicDateFormatter()}</property>\n        <property name=\"csv_forceType\">date</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_issued_date\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.content.header.issued</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.issued</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n      <properties mode=\"csv\">\n        <property name=\"csv_formatMask\">#{nxu:basicDateFormatter()}</property>\n        <property name=\"csv_forceType\">date</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_author\" type=\"listing_author\">\n      <labels>\n        <label mode=\"any\">label.content.header.author</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dublincore.creator</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_lifecycle\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.content.header.currentLifecycleState</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.currentLifeCycleState</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"localize\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_livedit_link\" type=\"listing_livedit_link\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <fields>\n        <field>data</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"file_schema\">file</property>\n        <property name=\"file_field_name\">content</property>\n        <property name=\"filename_field_name\">filename</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_version\" type=\"listing_version\">\n      <labels>\n        <label mode=\"any\">label.version</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_description\" type=\"textarea\">\n      <labels>\n        <label mode=\"any\">label.dublincore.description</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.description</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_nature\" type=\"selectOneDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.nature</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.nature</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"directoryName\">nature</property>\n        <property name=\"localize\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_subjects\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.subject</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.subjects</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/subjects_widget.xhtml</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_rights\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.rights</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.rights</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_source\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.source</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.source</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_coverage\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.coverage</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.coverage</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/coverage_widget.xhtml</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_creation_date\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.created</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.created</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n      <properties mode=\"csv\">\n        <property name=\"csv_formatMask\">#{nxu:basicDateFormatter()}</property>\n        <property name=\"csv_forceType\">date</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_format\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.format</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.format</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_language\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.language</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.language</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_expiration_date\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.expired</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.expired</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n      <properties mode=\"csv\">\n        <property name=\"csv_formatMask\">#{nxu:basicDateFormatter()}</property>\n        <property name=\"csv_forceType\">date</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_contributors\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.contributors</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.contributors</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/contributors_widget.xhtml</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_last_contributor\" type=\"listing_last_contributor\">\n      <labels>\n        <label mode=\"any\">label.dublincore.lastContributor</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.lastContributor</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_thumbnail\" type=\"listing_thumbnail\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <fields>\n        <field>data</field>\n      </fields>\n    </widget>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.listing/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.listing--layouts",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.listing--layouts",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"document_listing_table\" type=\"listingTable\">\n      <aliases>\n        <alias>search_listing_ajax</alias>\n        <alias>document_listing_ajax</alias>\n        <alias>document_listing</alias>\n      </aliases>\n      <columns>\n        <column alwaysSelected=\"true\" name=\"selection\">\n          <properties mode=\"any\">\n            <property name=\"isListingSelectionBoxWithCurrentDocument\">\n              true\n            </property>\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n            <property name=\"label\">label.selection.column.checkbox</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box_with_current_document</widget>\n        </column>\n        <column name=\"icon_type\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n            <property name=\"label\">label.selection.column.icon_type</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column name=\"title_link\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:title</property>\n            <property name=\"label\">label.selection.column.title_link</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_title_link</widget>\n        </column>\n        <column name=\"lock\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n            <property name=\"label\">label.selection.column.lock</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_lock_icon</widget>\n        </column>\n        <column name=\"modification_date\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:modified</property>\n            <property name=\"label\">label.dublincore.modificationDate</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_modification_date</widget>\n        </column>\n        <column name=\"lastContributor\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:lastContributor</property>\n            <property name=\"label\">label.dublincore.lastContributor</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_last_contributor</widget>\n        </column>\n        <column name=\"version\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"isSortable\">false</property>\n            <property name=\"label\">label.version</property>\n          </properties>\n          <widget>listing_version</widget>\n        </column>\n        <column name=\"lifecycle\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">\n              ecm:currentLifeCycleState\n            </property>\n            <property name=\"label\">label.lifecycle</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_lifecycle</widget>\n        </column>\n        <column name=\"livedit_link\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n            <property name=\"label\">\n              label.selection.column.livedit_link\n            </property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_livedit_link</widget>\n        </column>\n        <column name=\"description\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:description</property>\n            <property name=\"label\">description</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_description</widget>\n        </column>\n        <column name=\"nature\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:nature</property>\n            <property name=\"label\">label.dublincore.nature</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_nature</widget>\n        </column>\n        <column name=\"subjects\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"label\">label.dublincore.subject</property>\n          </properties>\n          <widget>listing_subjects</widget>\n        </column>\n        <column name=\"rights\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:rights</property>\n            <property name=\"label\">label.dublincore.rights</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_rights</widget>\n        </column>\n        <column name=\"source\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:source</property>\n            <property name=\"label\">label.dublincore.source</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_source</widget>\n        </column>\n        <column name=\"coverage\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:coverage</property>\n            <property name=\"label\">label.dublincore.coverage</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_coverage</widget>\n        </column>\n        <column name=\"creation_date\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:created</property>\n            <property name=\"label\">label.dublincore.created</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_creation_date</widget>\n        </column>\n        <column name=\"format\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:format</property>\n            <property name=\"label\">label.dublincore.format</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_format</widget>\n        </column>\n        <column name=\"language\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:language</property>\n            <property name=\"label\">label.dublincore.language</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_language</widget>\n        </column>\n        <column name=\"expired_date\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:expired</property>\n            <property name=\"label\">label.dublincore.expired</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_expiration_date</widget>\n        </column>\n        <column name=\"contributors\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"label\">label.dublincore.contributors</property>\n          </properties>\n          <widget>listing_contributors</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_listing_thumbnail\" type=\"listingThumbnail\">\n      <columns>\n        <column name=\"last_contributor\">\n          <properties mode=\"any\">\n            <property name=\"label\">label.dublincore.lastContributor</property>\n          </properties>\n          <widget>listing_last_contributor</widget>\n        </column>\n        <column name=\"size_and_format\">\n          <properties mode=\"any\">\n            <property name=\"label\">\n              label.selection.column.size_and_format\n            </property>\n          </properties>\n          <widget>listing_size_and_format</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_virtual_navigation_listing_ajax\">\n      <aliases>\n        <alias>document_virtual_navigation_listing</alias>\n      </aliases>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"showListingHeader\">true</property>\n        <property name=\"showRowEvenOddClass\">true</property>\n      </properties>\n      <columns>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"isListingSelectionBox\">true</property>\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:title</property>\n          </properties>\n          <widget>listing_title_link</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_lock_icon</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:modified</property>\n          </properties>\n          <widget>listing_modification_date</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:lastContributor</property>\n          </properties>\n          <widget>listing_last_contributor</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_version</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">\n              ecm:currentLifeCycleState\n            </property>\n          </properties>\n          <widget>listing_lifecycle</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_livedit_link</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_listing_ajax_compact_2_columns\">\n      <aliases>\n        <alias>document_listing_compact_2_columns</alias>\n      </aliases>\n      <properties mode=\"any\">\n        <property name=\"display\">table_2_columns</property>\n      </properties>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box_with_current_document</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_title_link</widget>\n          <widget>listing_modification_date</widget>\n          <widget>listing_author</widget>\n          <widget>listing_lifecycle</widget>\n          <widget>listing_version</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_virtual_navigation_listing_ajax_compact_2_columns\">\n      <properties mode=\"any\">\n        <property name=\"display\">table_2_columns</property>\n      </properties>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_title_link</widget>\n          <widget>listing_modification_date</widget>\n          <widget>listing_author</widget>\n          <widget>listing_lifecycle</widget>\n          <widget>listing_version</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_listing_icon_2_columns\">\n      <properties mode=\"any\">\n        <property name=\"display\">table_2_columns</property>\n      </properties>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_selection_box_with_current_document</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_big_icon_type_link</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_title_link</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_listing_ajax_icon_2_columns\">\n      <properties mode=\"any\">\n        <property name=\"display\">table_2_columns</property>\n      </properties>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box_with_current_document</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_thumbnail</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_title_link</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_virtual_navigation_listing_ajax_icon_2_columns\">\n      <properties mode=\"any\">\n        <property name=\"display\">table_2_columns</property>\n      </properties>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_thumbnail</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_title_link</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"listing_thumbnail_header\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_div_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\" name=\"selection\">\n          <widget>listing_ajax_selection_box</widget>\n        </column>\n        <column>\n          <widget>listing_thumbnail</widget>\n        </column>\n        <column>\n          <widget>listing_title_link</widget>\n        </column>\n      </columns>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.listing",
          "name": "org.nuxeo.ecm.platform.forms.layouts.webapp.listing",
          "requirements": [],
          "resolutionOrder": 635,
          "services": [],
          "startOrder": 331,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.forms.layouts.webapp.listing\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n    point=\"widgets\">\n\n    <widget name=\"listing_link_tab\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Tab</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The tab to select when clicking on the\n          document link. Available since 5.4.2.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>tab</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_subTab\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Sub Tab</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The sub tab to select when clicking on the\n          document link. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>subTab</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_tabs\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Tabs</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Combination of tabs to select when clicking\n          on the\n          document link. Sample value: MAIN_TABS:document.\n          Available since 7.3.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>tabs</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_target\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Target</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Available since 6.0. The target attribute\n          of\n          the link.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>target</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_pattern\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Link Pattern</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The document pattern to use for this link (optional). Available since 8.1.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pattern</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_view\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Link View</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The document view to use for this link (optional). Available since 8.1.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>view</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_hideExternalLink\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide External Link</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Available since 5.7.2. Flag indicating that\n          the external link, opening the document in a new\n          conversation, must be hidden.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideExternalLink</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_link_hideDownloadLink\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide Download Link</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Available since 6.0. Flag indicating that\n          the download link must be hidden.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideDownloadLink</field>\n      </fields>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <documentation>\n      The widget types from this contribution are intended to be used within a\n      layout displaying a table line. They can be configured to match metadata\n      from a table iteration item.\n      <br />\n\n      The template \"/layouts/layout_listing_template.xhtml\" handles specific\n      configuration for lists of documents rendering. It applies to an item\n      instance of SelectDataModel named \"documents\" in the EL context.\n      <br />\n\n      It also requires the following variables to be present in the EL context:\n      <ul>\n        <li>\n          provider: result provider used to get the list of items, its name\n          will\n          be used, as well as sort and pagination features it provides.\n        </li>\n        <li>\n          layoutListingStatus: iteration status as provided by the \"c:forEach\"\n          tag, used to print table header matching widget label.\n        </li>\n      </ul>\n\n      It accepts the the following properties configuration:\n      <ul>\n        <li>\n          showListingHeader: true or false, used to define whether the table\n          header should be displayed. This property can also be passed in the EL\n          context, using the table iteration status. Defaults to false.\n        </li>\n        <li>\n          showRowEvenOddClass: true or false, used to define if a style class\n          should be set on table rows depending on the layoutListingStatus index\n          variable (row or odd). Defaults to false.\n        </li>\n      </ul>\n      Its layout columns accept the following properties configuration:\n      <ul>\n        <li>\n          useFirstWidgetLabelAsColumnHeader: true or false, used to define if\n          first widget label should be used as column header label. Will use\n          translation settings from the widget configuration. Defaults to false.\n        </li>\n        <li>\n          sortPropertyName: name of the property that will be used by the\n          result provider when clicking on the table header. If not set, the\n          sort link will not be displayed. Defaults to null.\n        </li>\n        <li>\n          defaultSortAscending: define the initial sort order of the column\n          (true : ascending, false : descending) Defaults to null (will be\n          interpreted as ascending=true).\n        </li>\n        <li>\n          columnStyleClass: name of the style class that will be used for the\n          given column. Defaults to null.\n        </li>\n      </ul>\n    </documentation>\n\n    <widgetType name=\"listing_ajax_selection_box_with_current_document\">\n      <aliases>\n        <alias>listing_selection_box_with_current_document</alias>\n      </aliases>\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Ajax selection checkbox with current document</title>\n        <description>\n          <p>\n            This widget type displays a selection checkbox, that will perform\n            ajax selection of given item. The current document information is\n            also provided to restore current context when clicking on the link.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps a boolean representing the selection state\n              </li>\n              <li>\n                second field maps the string identifier used to perform\n                selection\n              </li>\n            </ul>\n          </p>\n          <p>\n            It also requires the following variables to be present in the EL\n            context:\n            <ul>\n              <li>\n                provider: result provider used to get the list of items, its\n                name will be used.\n              </li>\n              <li>\n                listName: the name of the list that will hold selected items\n              </li>\n              <li>currentDocument: the current document</li>\n            </ul>\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>selected</field>\n            <field>data.ref</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>hidden_listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_ajax_selection_box_with_current_document_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_ajax_selection_box\">\n      <aliases>\n        <alias>listing_selection_box</alias>\n      </aliases>\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Ajax selection checkbox</title>\n        <description>\n          <p>\n            This widget type displays a selection checkbox, that will perform\n            ajax selection of given item.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps a boolean representing the selection state\n              </li>\n              <li>\n                second field maps the string identifier used to perform\n                selection\n              </li>\n            </ul>\n          </p>\n          <p>\n            It also requires the following variables to be present in the EL\n            context:\n            <ul>\n              <li>\n                provider: result provider used to get the list of items, its\n                name will be used.\n              </li>\n              <li>\n                listName: the name of the list that will hold selected items\n              </li>\n            </ul>\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>selected</field>\n            <field>data.ref</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>hidden_listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_ajax_selection_box_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_icon_type\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Icon and document type</title>\n        <description>\n          <p>\n            This widget type displays a draggable icon corresponding to a\n            document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, the jsf method\n                nxd:iconPath will be used to provide its icon\n              </li>\n              <li>\n                second field maps the unique id to be used as drag/drop\n                identified (e.g. the document model id)\n              </li>\n              <li>\n                third field maps the icon title (can be the document model\n                type)\n              </li>\n              <li>\n                fourth field maps a boolean stating whether the widget\n                displays a droppable zone (e.g. if document is folderish)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_icon_typeWidget\" />\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n            <field>data.ref</field>\n            <field>data.type</field>\n            <field>data.folder</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_icon_type_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_big_icon_type\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Big icon and document type</title>\n        <description>\n          <p>\n            This widget type displays a big draggable icon corresponding to a\n            document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, the jsf method\n                nxd:bigIconPath will be used to provide its icon\n              </li>\n              <li>\n                second field maps the unique id to be used as drag/drop\n                identified (e.g. the document model id)\n              </li>\n              <li>\n                third field maps the displayed icon title (can be the document\n                model type)\n              </li>\n              <li>\n                fourth field maps a boolean stating whether the widget\n                displays\n                a droppable zone (e.g. if document is folderish)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_big_icon_typeWidget\" />\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n            <field>data.ref</field>\n            <field>data.type</field>\n            <field>data.folder</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_big_icon_type_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_big_icon_type_link\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Big icon and document type with link</title>\n        <description>\n          <p>\n            This widget type displays a big draggable icon corresponding to a\n            document with a link to the document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, the jsf method\n                nxd:bigIconPath will be used to provide its icon and to display\n                the document link\n              </li>\n              <li>\n                second field maps the unique id to be used as drag/drop\n                identified (e.g. the document model id)\n              </li>\n              <li>\n                third field maps the displayed icon title (can be the document\n                model type)\n              </li>\n              <li>\n                fourth field maps a boolean stating whether the widget\n                displays\n                a droppable zone (e.g. if document is folderish)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_big_icon_type_linkWidget\" />\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n            <field>data.ref</field>\n            <field>data.type</field>\n            <field>data.folder</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_big_icon_type_link_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_title_link\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Title with link</title>\n        <description>\n          <p>\n            This widget type displays a link to navigate to a document, as well\n            as a download link for the document binary content.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, it will be used to\n                display the document link and its title\n              </li>\n              <li>\n                second field maps the unique id to be used for contextual menu\n                (e.g. the document model id)\n              </li>\n              <li>\n                third field maps the displayed link title (can be the document\n                model description)\n              </li>\n              <li>\n                fourth field maps the document model file to be used for\n                download link\n              </li>\n              <li>\n                fifth field maps the file name to be used for download link\n                (can be the document model file name property value)\n              </li>\n            </ul>\n          </p>\n          <p>\n            It also requires the following properties configuration:\n            <ul>\n              <li>\n                file_schema: the file schema name, used to check whether\n                download link should be displayed (e.g: file)\n              </li>\n              <li>\n                file_property_name: the file property name (e.g file:content)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_title_linkWidget\" />\n        <confProperties>\n          <property name=\"sortPropertyName\">dc:title</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n            <field>data.ref</field>\n            <field>data.dc.description</field>\n            <field>data.file.content</field>\n            <field>data.file.content.filename</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"hideExternalLink\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"listing_title_link_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_tab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_subTab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_tabs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_target</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_pattern</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_view</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_hideExternalLink</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_hideDownloadLink</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_title_link_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_id_title_link\">\n      <configuration>\n        <sinceVersion>7.4</sinceVersion>\n        <title>Document id title with link</title>\n        <description>\n          <p>\n            This widget type displays a link to navigate to a document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document id, it will be used to\n                display the document link\n              </li>\n              <li>\n                second field maps the repository name, it will be used to\n                display the document link\n              </li>\n              <li>\n                third field maps the displayed link title\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_id_title_linkWidget\" />\n        <confProperties>\n          <property name=\"sortPropertyName\">dc:title</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data.id</field>\n            <field>data.repositoryName</field>\n            <field>data.dc.title</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"view\">view_documents</property>\n            <property name=\"pattern\">id</property>\n            <property name=\"hideExternalLink\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"listing_id_title_link_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_tab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_subTab</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_tabs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_target</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_pattern</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_view</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">listing_link_hideExternalLink</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_id_title_link_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_lock_icon\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Lock icon</title>\n        <description>\n          <p>This widget type displays a lock icon.</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps a property stating that lock icon should be\n                displayed if not empty (e.g. the document model lock state)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_lock_iconWidget\" />\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data.lock</field>\n            <field>data.lockInfo</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_lock_icon_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_author\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Author</title>\n        <description>\n          <p>This widget type displays a user name.</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>first field mapping the user identifier</li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_authorWidget\" />\n        <confProperties>\n          <property name=\"sortPropertyName\">dc:creator</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data.dc.creator</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/single_user_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_last_contributor\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <title>Last contributor</title>\n        <description>\n          <p>This widget type displays the last contributor name</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>first field mapping the lastContributor field</li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_last_contributorWidget\" />\n        <confProperties>\n          <property name=\"sortPropertyName\">dc:lastContributor</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data.dc.lastContributor</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/single_user_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <!-- Deprecated since NXP-6825 is fixed but still useful for Studio configuration -->\n    <widgetType name=\"listing_lifecycle\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Lifecycle state</title>\n        <description>\n          <p>This widget type displays a life cycle state name.</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>first field mapping the life cycle state name</li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_lifecycleWidget\" />\n        <confProperties>\n          <property name=\"sortPropertyName\">ecm:currentLifeCycleState</property>\n        </confProperties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data.currentLifeCycleState</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_lifecycle_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_livedit_link\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Live edit link</title>\n        <description>\n          <p>This widget type displays a live edit link.</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field mapping the document model to be used for live\n                edit link\n              </li>\n            </ul>\n          </p>\n          <p>\n            It also requires the following properties configuration:\n            <ul>\n              <li>file_schema: the file schema name</li>\n              <li>file_field_name: the file field name</li>\n              <li>filename_field_name: the file name field name</li>\n            </ul>\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_livedit_link_widget_template.xhtml\n      </property>\n\n    </widgetType>\n\n    <widgetType name=\"listing_version\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Version</title>\n        <description>\n          <p>This widget type displays a document model version label</p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field mapping the document model, its version label will\n                be retrieved querying the versioning service\n              </li>\n            </ul>\n          </p>\n        </description>\n        <demo id=\"listing_versionWidget\" />\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_version_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_thumbnail\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Thumbnail</title>\n        <description>\n          <p>This widget type displays the document thumbnail.</p>\n          <p>\n            It requires the following fields configuration: first field maps\n            the document model.\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_thumbnail_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_main_file_size\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Main File Size</title>\n        <description>\n          <p>\n            This widget type displays the size of the main blob of the\n            document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, it will be used to\n                display the size.\n              </li>\n            </ul>\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_main_file_size_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_main_file_format\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Main File Format</title>\n        <description>\n          <p>\n            This widget type displays the format of the main file of the\n            document.\n          </p>\n          <p>\n            It requires the following fields configuration:\n            <ul>\n              <li>\n                first field maps the document model, it will be used to\n                display the format.\n              </li>\n            </ul>\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_main_file_format_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"listing_manage_document\">\n      <configuration>\n        <sinceVersion>5.9.3</sinceVersion>\n        <title>Manage Document</title>\n        <description>\n          <p>This widget type displays a clickable icon when the document can be\n            managed by the current user. Clicking the icon goes directly to the\n            manage\n            tab.\n          </p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>listing</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/listing/listing_manage_document.xhtml\n      </property>\n\n    </widgetType>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"listing_ajax_selection_box_with_current_document\" type=\"listing_ajax_selection_box_with_current_document\">\n      <aliases>\n        <alias>listing_selection_box_with_current_document</alias>\n      </aliases>\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <fields>\n        <field>selected</field>\n        <field>data.ref</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_ajax_selection_box\" type=\"listing_ajax_selection_box\">\n      <aliases>\n        <alias>listing_selection_box</alias>\n      </aliases>\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <fields>\n        <field>selected</field>\n        <field>data.ref</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_icon_type\" type=\"listing_icon_type\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <fields>\n        <field>data</field>\n        <field>data.ref</field>\n        <field>data.type</field>\n        <field>data.folder</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_big_icon_type\" type=\"listing_big_icon_type\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <fields>\n        <field>data</field>\n        <field>data.ref</field>\n        <field>data.type</field>\n        <field>data.folder</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_big_icon_type_link\" type=\"listing_big_icon_type_link\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <fields>\n        <field>data</field>\n        <field>data.ref</field>\n        <field>data.type</field>\n        <field>data.folder</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_title_link\" type=\"listing_title_link\">\n      <labels>\n        <label mode=\"any\">label.content.header.title</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data</field>\n        <field>data.ref</field>\n        <field>data.dc.description</field>\n        <field>data.file.content</field>\n        <field>data.file.content.filename</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"tabs\">MAIN_TABS:documents</property>\n        <property name=\"file_property_name\">file:content</property>\n        <property name=\"file_schema\">file</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_lock_icon\" type=\"listing_lock_icon\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <fields>\n        <field>data.lock</field>\n        <field>data.lockInfo</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_modification_date\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.content.header.modified</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.modified</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n      <properties mode=\"csv\">\n        <property name=\"csv_formatMask\">#{nxu:basicDateFormatter()}</property>\n        <property name=\"csv_forceType\">date</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_issued_date\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.content.header.issued</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.issued</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n      <properties mode=\"csv\">\n        <property name=\"csv_formatMask\">#{nxu:basicDateFormatter()}</property>\n        <property name=\"csv_forceType\">date</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_author\" type=\"listing_author\">\n      <labels>\n        <label mode=\"any\">label.content.header.author</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dublincore.creator</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_lifecycle\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.content.header.currentLifecycleState</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.currentLifeCycleState</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"localize\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_livedit_link\" type=\"listing_livedit_link\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <fields>\n        <field>data</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"file_schema\">file</property>\n        <property name=\"file_field_name\">content</property>\n        <property name=\"filename_field_name\">filename</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_version\" type=\"listing_version\">\n      <labels>\n        <label mode=\"any\">label.version</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_description\" type=\"textarea\">\n      <labels>\n        <label mode=\"any\">label.dublincore.description</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.description</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_nature\" type=\"selectOneDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.nature</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.nature</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"directoryName\">nature</property>\n        <property name=\"localize\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_subjects\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.subject</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.subjects</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/subjects_widget.xhtml</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_rights\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.rights</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.rights</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_source\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.source</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.source</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_coverage\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.coverage</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.coverage</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/coverage_widget.xhtml</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_creation_date\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.created</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.created</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n      <properties mode=\"csv\">\n        <property name=\"csv_formatMask\">#{nxu:basicDateFormatter()}</property>\n        <property name=\"csv_forceType\">date</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_format\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.format</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.format</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_language\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.language</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.language</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_expiration_date\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.expired</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.expired</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n      <properties mode=\"csv\">\n        <property name=\"csv_formatMask\">#{nxu:basicDateFormatter()}</property>\n        <property name=\"csv_forceType\">date</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_contributors\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.contributors</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.contributors</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/contributors_widget.xhtml</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_last_contributor\" type=\"listing_last_contributor\">\n      <labels>\n        <label mode=\"any\">label.dublincore.lastContributor</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data.dc.lastContributor</field>\n      </fields>\n    </widget>\n\n    <widget name=\"listing_thumbnail\" type=\"listing_thumbnail\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <fields>\n        <field>data</field>\n      </fields>\n    </widget>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"document_listing_table\" type=\"listingTable\">\n      <aliases>\n        <alias>search_listing_ajax</alias>\n        <alias>document_listing_ajax</alias>\n        <alias>document_listing</alias>\n      </aliases>\n      <columns>\n        <column alwaysSelected=\"true\" name=\"selection\">\n          <properties mode=\"any\">\n            <property name=\"isListingSelectionBoxWithCurrentDocument\">\n              true\n            </property>\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n            <property name=\"label\">label.selection.column.checkbox</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box_with_current_document</widget>\n        </column>\n        <column name=\"icon_type\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n            <property name=\"label\">label.selection.column.icon_type</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column name=\"title_link\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:title</property>\n            <property name=\"label\">label.selection.column.title_link</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_title_link</widget>\n        </column>\n        <column name=\"lock\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n            <property name=\"label\">label.selection.column.lock</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_lock_icon</widget>\n        </column>\n        <column name=\"modification_date\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:modified</property>\n            <property name=\"label\">label.dublincore.modificationDate</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_modification_date</widget>\n        </column>\n        <column name=\"lastContributor\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:lastContributor</property>\n            <property name=\"label\">label.dublincore.lastContributor</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_last_contributor</widget>\n        </column>\n        <column name=\"version\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"isSortable\">false</property>\n            <property name=\"label\">label.version</property>\n          </properties>\n          <widget>listing_version</widget>\n        </column>\n        <column name=\"lifecycle\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">\n              ecm:currentLifeCycleState\n            </property>\n            <property name=\"label\">label.lifecycle</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_lifecycle</widget>\n        </column>\n        <column name=\"livedit_link\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n            <property name=\"label\">\n              label.selection.column.livedit_link\n            </property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_livedit_link</widget>\n        </column>\n        <column name=\"description\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:description</property>\n            <property name=\"label\">description</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_description</widget>\n        </column>\n        <column name=\"nature\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:nature</property>\n            <property name=\"label\">label.dublincore.nature</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_nature</widget>\n        </column>\n        <column name=\"subjects\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"label\">label.dublincore.subject</property>\n          </properties>\n          <widget>listing_subjects</widget>\n        </column>\n        <column name=\"rights\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:rights</property>\n            <property name=\"label\">label.dublincore.rights</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_rights</widget>\n        </column>\n        <column name=\"source\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:source</property>\n            <property name=\"label\">label.dublincore.source</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_source</widget>\n        </column>\n        <column name=\"coverage\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:coverage</property>\n            <property name=\"label\">label.dublincore.coverage</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_coverage</widget>\n        </column>\n        <column name=\"creation_date\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:created</property>\n            <property name=\"label\">label.dublincore.created</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_creation_date</widget>\n        </column>\n        <column name=\"format\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:format</property>\n            <property name=\"label\">label.dublincore.format</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_format</widget>\n        </column>\n        <column name=\"language\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:language</property>\n            <property name=\"label\">label.dublincore.language</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_language</widget>\n        </column>\n        <column name=\"expired_date\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:expired</property>\n            <property name=\"label\">label.dublincore.expired</property>\n          </properties>\n          <properties mode=\"edit_sort_infos\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <properties mode=\"edit_sort_infos_map\">\n            <property name=\"showInSortInfoSelection\">true</property>\n          </properties>\n          <widget>listing_expiration_date</widget>\n        </column>\n        <column name=\"contributors\" selectedByDefault=\"false\">\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"label\">label.dublincore.contributors</property>\n          </properties>\n          <widget>listing_contributors</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_listing_thumbnail\" type=\"listingThumbnail\">\n      <columns>\n        <column name=\"last_contributor\">\n          <properties mode=\"any\">\n            <property name=\"label\">label.dublincore.lastContributor</property>\n          </properties>\n          <widget>listing_last_contributor</widget>\n        </column>\n        <column name=\"size_and_format\">\n          <properties mode=\"any\">\n            <property name=\"label\">\n              label.selection.column.size_and_format\n            </property>\n          </properties>\n          <widget>listing_size_and_format</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_virtual_navigation_listing_ajax\">\n      <aliases>\n        <alias>document_virtual_navigation_listing</alias>\n      </aliases>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"showListingHeader\">true</property>\n        <property name=\"showRowEvenOddClass\">true</property>\n      </properties>\n      <columns>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"isListingSelectionBox\">true</property>\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:title</property>\n          </properties>\n          <widget>listing_title_link</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_lock_icon</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:modified</property>\n          </properties>\n          <widget>listing_modification_date</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:lastContributor</property>\n          </properties>\n          <widget>listing_last_contributor</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_version</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">\n              ecm:currentLifeCycleState\n            </property>\n          </properties>\n          <widget>listing_lifecycle</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_livedit_link</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_listing_ajax_compact_2_columns\">\n      <aliases>\n        <alias>document_listing_compact_2_columns</alias>\n      </aliases>\n      <properties mode=\"any\">\n        <property name=\"display\">table_2_columns</property>\n      </properties>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box_with_current_document</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_title_link</widget>\n          <widget>listing_modification_date</widget>\n          <widget>listing_author</widget>\n          <widget>listing_lifecycle</widget>\n          <widget>listing_version</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_virtual_navigation_listing_ajax_compact_2_columns\">\n      <properties mode=\"any\">\n        <property name=\"display\">table_2_columns</property>\n      </properties>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_title_link</widget>\n          <widget>listing_modification_date</widget>\n          <widget>listing_author</widget>\n          <widget>listing_lifecycle</widget>\n          <widget>listing_version</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_listing_icon_2_columns\">\n      <properties mode=\"any\">\n        <property name=\"display\">table_2_columns</property>\n      </properties>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_selection_box_with_current_document</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_big_icon_type_link</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_title_link</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_listing_ajax_icon_2_columns\">\n      <properties mode=\"any\">\n        <property name=\"display\">table_2_columns</property>\n      </properties>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box_with_current_document</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_thumbnail</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_title_link</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"document_virtual_navigation_listing_ajax_icon_2_columns\">\n      <properties mode=\"any\">\n        <property name=\"display\">table_2_columns</property>\n      </properties>\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\">\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_thumbnail</widget>\n        </column>\n        <column alwaysSelected=\"true\">\n          <widget>listing_title_link</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"listing_thumbnail_header\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_div_template.xhtml\n        </template>\n      </templates>\n      <columns>\n        <column alwaysSelected=\"true\" name=\"selection\">\n          <widget>listing_ajax_selection_box</widget>\n        </column>\n        <column>\n          <widget>listing_thumbnail</widget>\n        </column>\n        <column>\n          <widget>listing_title_link</widget>\n        </column>\n      </columns>\n    </layout>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouts-listing-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouttypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.types/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.types--layouttypes",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.types--layouttypes",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouttypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layoutType name=\"listingTable\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n        <template mode=\"edit_columns\">\n          /layouts/layout_column_selection_template.xhtml\n        </template>\n        <template mode=\"edit_sort_infos\">\n          /layouts/layout_sort_infos_template.xhtml\n        </template>\n        <template mode=\"edit_sort_infos_map\">\n          /layouts/layout_sort_infos_template.xhtml\n        </template>\n      </templates>\n      <configuration>\n        <title>Layout listing displayed as table.</title>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"showListingHeader\">true</property>\n            <property name=\"showRowEvenOddClass\">true</property>\n          </defaultValues>\n        </properties>\n      </configuration>\n    </layoutType>\n\n    <layoutType name=\"listingThumbnail\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_thumbnail_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n        <template mode=\"edit_columns\">\n          /layouts/layout_column_selection_template.xhtml\n        </template>\n        <template mode=\"edit_sort_infos\">\n          /layouts/layout_sort_infos_template.xhtml\n        </template>\n        <template mode=\"edit_sort_infos_map\">\n          /layouts/layout_sort_infos_template.xhtml\n        </template>\n      </templates>\n      <configuration>\n        <title>Layout listing displayed as thumbnail.</title>\n        <description>\n          <p>This layout type displays the layout in a box style using another layout for the box heading.</p>\n        </description>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"display\">block</property>\n            <property name=\"thumbnailHeaderLayout\">listing_thumbnail_header</property>\n            <property name=\"before_template\">/layouts/layout_listing_thumbnail_infoview.xhtml</property>\n          </defaultValues>\n        </properties>\n      </configuration>\n    </layoutType>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.forms.layouts.webapp.types",
          "name": "org.nuxeo.ecm.platform.forms.layouts.webapp.types",
          "requirements": [],
          "resolutionOrder": 639,
          "services": [],
          "startOrder": 333,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.forms.layouts.webapp.types\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouttypes\">\n\n    <layoutType name=\"listingTable\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_ajax_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n        <template mode=\"edit_columns\">\n          /layouts/layout_column_selection_template.xhtml\n        </template>\n        <template mode=\"edit_sort_infos\">\n          /layouts/layout_sort_infos_template.xhtml\n        </template>\n        <template mode=\"edit_sort_infos_map\">\n          /layouts/layout_sort_infos_template.xhtml\n        </template>\n      </templates>\n      <configuration>\n        <title>Layout listing displayed as table.</title>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"showListingHeader\">true</property>\n            <property name=\"showRowEvenOddClass\">true</property>\n          </defaultValues>\n        </properties>\n      </configuration>\n    </layoutType>\n\n    <layoutType name=\"listingThumbnail\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_thumbnail_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n        <template mode=\"edit_columns\">\n          /layouts/layout_column_selection_template.xhtml\n        </template>\n        <template mode=\"edit_sort_infos\">\n          /layouts/layout_sort_infos_template.xhtml\n        </template>\n        <template mode=\"edit_sort_infos_map\">\n          /layouts/layout_sort_infos_template.xhtml\n        </template>\n      </templates>\n      <configuration>\n        <title>Layout listing displayed as thumbnail.</title>\n        <description>\n          <p>This layout type displays the layout in a box style using another layout for the box heading.</p>\n        </description>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"display\">block</property>\n            <property name=\"thumbnailHeaderLayout\">listing_thumbnail_header</property>\n            <property name=\"before_template\">/layouts/layout_listing_thumbnail_infoview.xhtml</property>\n          </defaultValues>\n        </properties>\n      </configuration>\n    </layoutType>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouttypes-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.ContentViewService--contentViews",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.contentview.contrib/Contributions/org.nuxeo.ecm.webapp.contentview.contrib--contentViews",
              "id": "org.nuxeo.ecm.webapp.contentview.contrib--contentViews",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "name": "org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"contentViews\" target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\">\n\n    <contentView name=\"document_content\">\n\n      <title>label.contentview.document_content</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>false</showTitle>\n\n      <pageProvider name=\"document_content\">\n        <property name=\"coreSession\">#{documentManager}</property>\n        <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n        <parameter>#{currentDocument.id}</parameter>\n      </pageProvider>\n\n      <searchLayout filterDisplayType=\"quick\" name=\"document_content_filter\"/>\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>#{currentDocument.id}</cacheKey>\n      <cacheSize>10</cacheSize>\n\n      <resultLayouts>\n        <layout iconPath=\"/icons/document_listing_icon.png\" name=\"document_listing_table\" showCSVExport=\"true\" showEditColumns=\"true\" showSpreadsheet=\"true\" title=\"document_listing\" translateTitle=\"true\"/>\n        <layout iconPath=\"/icons/document_listing_icon_2_columns_icon.png\" name=\"document_listing_thumbnail\" showEditRows=\"true\" showSlideshow=\"true\" title=\"document_thumbnail_listing\" translateTitle=\"true\"/>\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION</selectionList>\n      <actions category=\"CURRENT_SELECTION_LIST\"/>\n\n    </contentView>\n\n    <contentView name=\"document_trash_content\">\n\n      <title>label.contentview.document_trash_content</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>false</showTitle>\n\n      <pageProvider name=\"document_trash_content\">\n        <property name=\"coreSession\">#{documentManager}</property>\n        <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n        <parameter>#{currentDocument.id}</parameter>\n      </pageProvider>\n\n      <searchLayout filterDisplayType=\"quick\" name=\"document_content_filter\"/>\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>#{currentDocument.id}</cacheKey>\n      <cacheSize>10</cacheSize>\n\n      <resultLayouts>\n        <layout iconPath=\"/icons/document_listing_icon.png\" name=\"document_listing_table\" showEditColumns=\"true\" title=\"document_listing\" translateTitle=\"true\"/>\n        <layout iconPath=\"/icons/document_listing_icon_2_columns_icon.png\" name=\"document_listing_thumbnail\" showEditRows=\"true\" showSlideshow=\"true\" title=\"document_thumbnail_listing\" translateTitle=\"true\"/>\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION_TRASH</selectionList>\n      <actions category=\"CURRENT_SELECTION_TRASH_LIST\"/>\n\n    </contentView>\n\n    <contentView name=\"section_content\">\n\n      <title>label.contentview.section_content</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>false</showTitle>\n\n      <pageProvider name=\"section_content\">\n        <property name=\"coreSession\">#{documentManager}</property>\n        <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n        <parameter>#{currentDocument.id}</parameter>\n      </pageProvider>\n\n      <searchLayout filterDisplayType=\"quick\" name=\"document_content_filter\"/>\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n        <event>documentPublicationRejected</event>\n      </refresh>\n      <cacheKey>#{currentDocument.id}</cacheKey>\n      <cacheSize>10</cacheSize>\n\n      <resultLayouts>\n        <layout iconPath=\"/icons/document_listing_icon.png\" name=\"document_listing_table\" showCSVExport=\"true\" showEditColumns=\"true\" showSpreadsheet=\"true\" title=\"document_listing\" translateTitle=\"true\"/>\n        <layout iconPath=\"/icons/document_listing_icon_2_columns_icon.png\" name=\"document_listing_thumbnail\" showEditRows=\"true\" showSlideshow=\"true\" title=\"document_thumbnail_listing\" translateTitle=\"true\"/>\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION_SECTIONS</selectionList>\n      <actions category=\"CURRENT_SELECTION_SECTIONS_LIST\"/>\n\n    </contentView>\n\n    <contentView name=\"orderable_document_content\">\n\n      <title>label.contentview.orderable_document_content</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>false</showTitle>\n\n      <pageProvider name=\"orderable_document_content\">\n        <property name=\"coreSession\">#{documentManager}</property>\n        <parameter>#{currentDocument.id}</parameter>\n      </pageProvider>\n\n      <searchLayout filterDisplayType=\"quick\" name=\"document_content_filter\"/>\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>#{currentDocument.id}</cacheKey>\n      <cacheSize>10</cacheSize>\n\n      <resultLayouts>\n        <layout iconPath=\"/icons/document_listing_icon.png\" name=\"document_listing_table\" showCSVExport=\"true\" showEditColumns=\"true\" showSpreadsheet=\"true\" title=\"document_listing\" translateTitle=\"true\"/>\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION</selectionList>\n      <actions category=\"ORDERABLE_CURRENT_SELECTION_LIST\"/>\n\n    </contentView>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.contentview.contrib",
          "name": "org.nuxeo.ecm.webapp.contentview.contrib",
          "requirements": [],
          "resolutionOrder": 640,
          "services": [],
          "startOrder": 641,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.webapp.contentview.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\"\n    point=\"contentViews\">\n\n    <contentView name=\"document_content\">\n\n      <title>label.contentview.document_content</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>false</showTitle>\n\n      <pageProvider name=\"document_content\">\n        <property name=\"coreSession\">#{documentManager}</property>\n        <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n        <parameter>#{currentDocument.id}</parameter>\n      </pageProvider>\n\n      <searchLayout name=\"document_content_filter\"\n        filterDisplayType=\"quick\" />\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>#{currentDocument.id}</cacheKey>\n      <cacheSize>10</cacheSize>\n\n      <resultLayouts>\n        <layout name=\"document_listing_table\" title=\"document_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon.png\"\n          showCSVExport=\"true\" showSpreadsheet=\"true\" showEditColumns=\"true\" />\n        <layout name=\"document_listing_thumbnail\" title=\"document_thumbnail_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon_2_columns_icon.png\"\n          showSlideshow=\"true\" showEditRows=\"true\" />\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION</selectionList>\n      <actions category=\"CURRENT_SELECTION_LIST\" />\n\n    </contentView>\n\n    <contentView name=\"document_trash_content\">\n\n      <title>label.contentview.document_trash_content</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>false</showTitle>\n\n      <pageProvider name=\"document_trash_content\">\n        <property name=\"coreSession\">#{documentManager}</property>\n        <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n        <parameter>#{currentDocument.id}</parameter>\n      </pageProvider>\n\n      <searchLayout name=\"document_content_filter\"\n        filterDisplayType=\"quick\" />\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>#{currentDocument.id}</cacheKey>\n      <cacheSize>10</cacheSize>\n\n      <resultLayouts>\n        <layout name=\"document_listing_table\" title=\"document_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon.png\" showEditColumns=\"true\" />\n        <layout name=\"document_listing_thumbnail\" title=\"document_thumbnail_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon_2_columns_icon.png\"\n          showSlideshow=\"true\" showEditRows=\"true\" />\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION_TRASH</selectionList>\n      <actions category=\"CURRENT_SELECTION_TRASH_LIST\" />\n\n    </contentView>\n\n    <contentView name=\"section_content\">\n\n      <title>label.contentview.section_content</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>false</showTitle>\n\n      <pageProvider name=\"section_content\">\n        <property name=\"coreSession\">#{documentManager}</property>\n        <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n        <parameter>#{currentDocument.id}</parameter>\n      </pageProvider>\n\n      <searchLayout name=\"document_content_filter\"\n        filterDisplayType=\"quick\" />\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n        <event>documentPublicationRejected</event>\n      </refresh>\n      <cacheKey>#{currentDocument.id}</cacheKey>\n      <cacheSize>10</cacheSize>\n\n      <resultLayouts>\n        <layout name=\"document_listing_table\" title=\"document_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon.png\"\n          showCSVExport=\"true\" showSpreadsheet=\"true\" showEditColumns=\"true\" />\n        <layout name=\"document_listing_thumbnail\" title=\"document_thumbnail_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon_2_columns_icon.png\"\n          showSlideshow=\"true\" showEditRows=\"true\" />\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION_SECTIONS</selectionList>\n      <actions category=\"CURRENT_SELECTION_SECTIONS_LIST\" />\n\n    </contentView>\n\n    <contentView name=\"orderable_document_content\">\n\n      <title>label.contentview.orderable_document_content</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>false</showTitle>\n\n      <pageProvider name=\"orderable_document_content\">\n        <property name=\"coreSession\">#{documentManager}</property>\n        <parameter>#{currentDocument.id}</parameter>\n      </pageProvider>\n\n      <searchLayout name=\"document_content_filter\"\n        filterDisplayType=\"quick\" />\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>#{currentDocument.id}</cacheKey>\n      <cacheSize>10</cacheSize>\n\n      <resultLayouts>\n        <layout name=\"document_listing_table\" title=\"document_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon.png\"\n          showCSVExport=\"true\" showSpreadsheet=\"true\" showEditColumns=\"true\" />\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION</selectionList>\n      <actions category=\"ORDERABLE_CURRENT_SELECTION_LIST\" />\n\n    </contentView>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/contentviews-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.layouts.users.contrib/Contributions/org.nuxeo.ecm.webapp.layouts.users.contrib--layouts",
              "id": "org.nuxeo.ecm.webapp.layouts.users.contrib--layouts",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"users_listing\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"showListingHeader\">true</property>\n        <property name=\"showRowEvenOddClass\">true</property>\n      </properties>\n      <columns>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_userName</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_firstName</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_lastName</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"groups_listing\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"showListingHeader\">true</property>\n        <property name=\"showRowEvenOddClass\">true</property>\n      </properties>\n      <columns>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_groupName</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_groupLabel</widget>\n        </column>\n      </columns>\n    </layout>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.layouts.users.contrib/Contributions/org.nuxeo.ecm.webapp.layouts.users.contrib--widgets",
              "id": "org.nuxeo.ecm.webapp.layouts.users.contrib--widgets",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"listing_userName\" type=\"singleUserSuggestion\">\n      <labels>\n        <label mode=\"any\">label.userManager.user</label>\n      </labels>\n      <fields>\n        <field>data.id</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"view\">\n        <property name=\"userSuggestionSearchType\">USER_TYPE</property>\n        <property name=\"firstLabelField\">firstName</property>\n        <property name=\"secondLabelField\">lastName</property>\n        <property name=\"hideFirstLabel\">true</property>\n        <property name=\"hideSecondLabel\">true</property>\n        <property name=\"displayAction\">edit</property>\n        <property name=\"hideIcon\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_firstName\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.userManager.firstName</label>\n      </labels>\n      <fields>\n         <field>data.user.firstName</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"listing_lastName\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.userManager.lastName</label>\n      </labels>\n      <fields>\n         <field>data.user.lastName</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"listing_email\" type=\"text\">\n      <labels>\n        <label mode=\"any\">email</label>\n      </labels>\n      <fields>\n         <field>data.user.email</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"listing_groupName\" type=\"singleUserSuggestion\">\n      <labels>\n        <label mode=\"any\">label.groupManager.groupName</label>\n      </labels>\n      <fields>\n         <field>data.group.groupname</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"view\">\n        <property name=\"userSuggestionSearchType\">GROUP_TYPE</property>\n        <property name=\"hideFirstLabel\">true</property>\n        <property name=\"displayAction\">edit</property>\n        <property name=\"hideIcon\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_groupLabel\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.groupManager.groupLabel</label>\n      </labels>\n      <fields>\n         <field>data.group.grouplabel</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.layouts.users.contrib",
          "name": "org.nuxeo.ecm.webapp.layouts.users.contrib",
          "requirements": [],
          "resolutionOrder": 641,
          "services": [],
          "startOrder": 648,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.webapp.layouts.users.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"users_listing\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"showListingHeader\">true</property>\n        <property name=\"showRowEvenOddClass\">true</property>\n      </properties>\n      <columns>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_userName</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_firstName</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_lastName</widget>\n        </column>\n      </columns>\n    </layout>\n\n    <layout name=\"groups_listing\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_listing_template.xhtml\n        </template>\n        <template mode=\"csv\">\n          /layouts/layout_listing_csv_template.xhtml\n        </template>\n        <template mode=\"pdf\">\n          /layouts/layout_listing_pdf_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"showListingHeader\">true</property>\n        <property name=\"showRowEvenOddClass\">true</property>\n      </properties>\n      <columns>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_groupName</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_groupLabel</widget>\n        </column>\n      </columns>\n    </layout>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"listing_userName\" type=\"singleUserSuggestion\">\n      <labels>\n        <label mode=\"any\">label.userManager.user</label>\n      </labels>\n      <fields>\n        <field>data.id</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"view\">\n        <property name=\"userSuggestionSearchType\">USER_TYPE</property>\n        <property name=\"firstLabelField\">firstName</property>\n        <property name=\"secondLabelField\">lastName</property>\n        <property name=\"hideFirstLabel\">true</property>\n        <property name=\"hideSecondLabel\">true</property>\n        <property name=\"displayAction\">edit</property>\n        <property name=\"hideIcon\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_firstName\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.userManager.firstName</label>\n      </labels>\n      <fields>\n         <field>data.user.firstName</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"listing_lastName\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.userManager.lastName</label>\n      </labels>\n      <fields>\n         <field>data.user.lastName</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"listing_email\" type=\"text\">\n      <labels>\n        <label mode=\"any\">email</label>\n      </labels>\n      <fields>\n         <field>data.user.email</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"listing_groupName\" type=\"singleUserSuggestion\">\n      <labels>\n        <label mode=\"any\">label.groupManager.groupName</label>\n      </labels>\n      <fields>\n         <field>data.group.groupname</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"view\">\n        <property name=\"userSuggestionSearchType\">GROUP_TYPE</property>\n        <property name=\"hideFirstLabel\">true</property>\n        <property name=\"displayAction\">edit</property>\n        <property name=\"hideIcon\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"listing_groupLabel\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.groupManager.groupLabel</label>\n      </labels>\n      <fields>\n         <field>data.group.grouplabel</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/users-layouts-listing-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.ContentViewService--contentViews",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.contentview.users.contrib/Contributions/org.nuxeo.ecm.webapp.contentview.users.contrib--contentViews",
              "id": "org.nuxeo.ecm.webapp.contentview.users.contrib--contentViews",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "name": "org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"contentViews\" target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\">\n\n    <contentView name=\"users_listing_search_only\">\n      <emptySentence>label.userManager.emptyUserList</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n      <pageProvider name=\"users_listing\">\n        <property name=\"usersListingMode\">#{userManagementActions.listingMode}</property>\n        <parameter>#{userManagementActions.searchString}</parameter>\n      </pageProvider>\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <showRefreshCommand>false</showRefreshCommand>\n      <useGlobalPageSize>false</useGlobalPageSize>\n      <refresh>\n        <event>usersListingChanged</event>\n        <event>usersSearchChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n      <resultLayouts>\n        <layout name=\"users_listing\" showCSVExport=\"false\" showPDFExport=\"false\"/>\n      </resultLayouts>\n    </contentView>\n\n    <contentView name=\"users_listing_tabbed\">\n      <emptySentence>label.userManager.emptyUserList</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n      <pageProvider name=\"users_listing\">\n        <property name=\"usersListingMode\">#{userManagementActions.listingMode}</property>\n        <parameter>#{userManagementActions.selectedLetter}</parameter>\n      </pageProvider>\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <showRefreshCommand>false</showRefreshCommand>\n      <useGlobalPageSize>false</useGlobalPageSize>\n      <refresh>\n        <event>selectedLetterChanged</event>\n      </refresh>\n      <reset>\n        <event>usersListingChanged</event>\n      </reset>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n      <resultLayouts>\n        <layout name=\"users_listing\" showCSVExport=\"false\" showPDFExport=\"false\"/>\n      </resultLayouts>\n    </contentView>\n\n    <contentView name=\"groups_listing_search_only\">\n      <emptySentence>label.groupManager.emptyGroupList</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n      <pageProvider name=\"groups_listing\">\n        <property name=\"groupsListingMode\">#{groupManagementActions.listingMode}</property>\n        <parameter>#{groupManagementActions.searchString}</parameter>\n      </pageProvider>\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <showRefreshCommand>false</showRefreshCommand>\n      <useGlobalPageSize>false</useGlobalPageSize>\n      <refresh>\n        <event>groupsListingChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n      <resultLayouts>\n        <layout name=\"groups_listing\" showCSVExport=\"false\" showPDFExport=\"false\"/>\n      </resultLayouts>\n    </contentView>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.contentview.users.contrib",
          "name": "org.nuxeo.ecm.webapp.contentview.users.contrib",
          "requirements": [],
          "resolutionOrder": 642,
          "services": [],
          "startOrder": 642,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.webapp.contentview.users.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\"\n    point=\"contentViews\">\n\n    <contentView name=\"users_listing_search_only\">\n      <emptySentence>label.userManager.emptyUserList</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n      <pageProvider name=\"users_listing\">\n        <property name=\"usersListingMode\">#{userManagementActions.listingMode}</property>\n        <parameter>#{userManagementActions.searchString}</parameter>\n      </pageProvider>\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <showRefreshCommand>false</showRefreshCommand>\n      <useGlobalPageSize>false</useGlobalPageSize>\n      <refresh>\n        <event>usersListingChanged</event>\n        <event>usersSearchChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n      <resultLayouts>\n        <layout name=\"users_listing\" showCSVExport=\"false\"\n          showPDFExport=\"false\" />\n      </resultLayouts>\n    </contentView>\n\n    <contentView name=\"users_listing_tabbed\">\n      <emptySentence>label.userManager.emptyUserList</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n      <pageProvider name=\"users_listing\">\n        <property name=\"usersListingMode\">#{userManagementActions.listingMode}</property>\n        <parameter>#{userManagementActions.selectedLetter}</parameter>\n      </pageProvider>\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <showRefreshCommand>false</showRefreshCommand>\n      <useGlobalPageSize>false</useGlobalPageSize>\n      <refresh>\n        <event>selectedLetterChanged</event>\n      </refresh>\n      <reset>\n        <event>usersListingChanged</event>\n      </reset>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n      <resultLayouts>\n        <layout name=\"users_listing\" showCSVExport=\"false\"\n          showPDFExport=\"false\" />\n      </resultLayouts>\n    </contentView>\n\n    <contentView name=\"groups_listing_search_only\">\n      <emptySentence>label.groupManager.emptyGroupList</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n      <pageProvider name=\"groups_listing\">\n        <property name=\"groupsListingMode\">#{groupManagementActions.listingMode}</property>\n        <parameter>#{groupManagementActions.searchString}</parameter>\n      </pageProvider>\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <showRefreshCommand>false</showRefreshCommand>\n      <useGlobalPageSize>false</useGlobalPageSize>\n      <refresh>\n        <event>groupsListingChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n      <resultLayouts>\n        <layout name=\"groups_listing\" showCSVExport=\"false\"\n          showPDFExport=\"false\" />\n      </resultLayouts>\n    </contentView>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/users-contentviews-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.EventService--listeners",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.seam.reload/Contributions/org.nuxeo.ecm.webapp.seam.reload--listeners",
              "id": "org.nuxeo.ecm.webapp.seam.reload--listeners",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.EventService",
                "name": "org.nuxeo.runtime.EventService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listeners\" target=\"org.nuxeo.runtime.EventService\">\n    <listener class=\"org.nuxeo.ecm.webapp.seam.NuxeoSeamFlusher\">\n      <topic>org.nuxeo.runtime.reload</topic>\n    </listener>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--openUrl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.seam.reload/Contributions/org.nuxeo.ecm.webapp.seam.reload--openUrl",
              "id": "org.nuxeo.ecm.webapp.seam.reload--openUrl",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"openUrl\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <openUrl name=\"seam-reload\">\n      <grantPattern>/nuxeo/restAPI/seamReload</grantPattern>\n    </openUrl>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.seam.reload",
          "name": "org.nuxeo.ecm.webapp.seam.reload",
          "requirements": [],
          "resolutionOrder": 643,
          "services": [],
          "startOrder": 653,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webapp.seam.reload\">\n\n  <extension target=\"org.nuxeo.runtime.EventService\" point=\"listeners\">\n    <listener class=\"org.nuxeo.ecm.webapp.seam.NuxeoSeamFlusher\">\n      <topic>org.nuxeo.runtime.reload</topic>\n    </listener>\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"openUrl\">\n    <openUrl name=\"seam-reload\">\n      <grantPattern>${org.nuxeo.ecm.contextPath}/restAPI/seamReload</grantPattern>\n    </openUrl>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/reload-seam-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--chains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.seam.action.defaultChains/Contributions/org.nuxeo.ecm.webapp.seam.action.defaultChains--chains",
              "id": "org.nuxeo.ecm.webapp.seam.action.defaultChains--chains",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <chain id=\"downloadFilesZip\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.GetBlobs\"/>\n      <operation id=\"Blob.CreateZip\">\n        <param name=\"filename\" type=\"string\">attachments.zip\n        </param>\n      </operation>\n      <operation id=\"Seam.DownloadFile\"/>\n    </chain>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.seam.action.defaultChains",
          "name": "org.nuxeo.ecm.webapp.seam.action.defaultChains",
          "requirements": [],
          "resolutionOrder": 644,
          "services": [],
          "startOrder": 650,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.webapp.seam.action.defaultChains\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"chains\">\n\n    <chain id=\"downloadFilesZip\">\n      <operation id=\"Context.FetchDocument\" />\n      <operation id=\"Document.GetBlobs\" />\n      <operation id=\"Blob.CreateZip\">\n        <param type=\"string\" name=\"filename\">attachments.zip\n        </param>\n      </operation>\n      <operation id=\"Seam.DownloadFile\" />\n    </chain>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/chains-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.webapp.bulkedit.BulkEditServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Service used to bulk edit a list of documents.\n\n    @author Thomas Roger (troger@nuxeo.com)\n    @since 5.7.3\n  \n",
          "documentationHtml": "<p>\nService used to bulk edit a list of documents.\n</p><p>\n&#64;since 5.7.3\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webapp.bulkedit.BulkEditService",
              "descriptors": [
                "org.nuxeo.ecm.webapp.bulkedit.VersioningDescriptor"
              ],
              "documentation": "\n      CAUTION deprecated extension point since 9.1, versioning has been removed from bulk edit, if you want to\n      provide automatic versioning, contribute policy to versioning service.\n\n      The versioning extension point defines the versioning option that will be\n      used before editing a document through bulk edit.\n      The default value will be MINOR, to keep compatibility with previous\n      releases.\n      Possible values are NONE, MINOR OR MAJOR (see VersioningOption enumeration)\n      Other values will raise an IllegalArgumentException\n      @since 5.7.3\n      <code>\n    <versioning>\n        <defaultVersioningOption>MAJOR</defaultVersioningOption>\n    </versioning>\n</code>\n",
              "documentationHtml": "<p>\nCAUTION deprecated extension point since 9.1, versioning has been removed from bulk edit, if you want to\nprovide automatic versioning, contribute policy to versioning service.\n</p><p>\nThe versioning extension point defines the versioning option that will be\nused before editing a document through bulk edit.\nThe default value will be MINOR, to keep compatibility with previous\nreleases.\nPossible values are NONE, MINOR OR MAJOR (see VersioningOption enumeration)\nOther values will raise an IllegalArgumentException\n&#64;since 5.7.3\n</p><p></p><pre><code>    &lt;versioning&gt;\n        &lt;defaultVersioningOption&gt;MAJOR&lt;/defaultVersioningOption&gt;\n    &lt;/versioning&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.bulkedit.BulkEditService/ExtensionPoints/org.nuxeo.ecm.webapp.bulkedit.BulkEditService--versioning",
              "id": "org.nuxeo.ecm.webapp.bulkedit.BulkEditService--versioning",
              "label": "versioning (org.nuxeo.ecm.webapp.bulkedit.BulkEditService)",
              "name": "versioning",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.bulkedit.BulkEditService",
          "name": "org.nuxeo.ecm.webapp.bulkedit.BulkEditService",
          "requirements": [],
          "resolutionOrder": 645,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.webapp.bulkedit.BulkEditService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.bulkedit.BulkEditService/Services/org.nuxeo.ecm.webapp.bulkedit.BulkEditService",
              "id": "org.nuxeo.ecm.webapp.bulkedit.BulkEditService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 904,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webapp.bulkedit.BulkEditService\">\n\n  <documentation>\n    Service used to bulk edit a list of documents.\n\n    @author Thomas Roger (troger@nuxeo.com)\n    @since 5.7.3\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.webapp.bulkedit.BulkEditServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.webapp.bulkedit.BulkEditService\"/>\n  </service>\n\n  <extension-point name=\"versioning\">\n    <documentation>\n      CAUTION deprecated extension point since 9.1, versioning has been removed from bulk edit, if you want to\n      provide automatic versioning, contribute policy to versioning service.\n\n      The versioning extension point defines the versioning option that will be\n      used before editing a document through bulk edit.\n      The default value will be MINOR, to keep compatibility with previous\n      releases.\n      Possible values are NONE, MINOR OR MAJOR (see VersioningOption enumeration)\n      Other values will raise an IllegalArgumentException\n      @since 5.7.3\n      <code>\n        <versioning>\n          <defaultVersioningOption>MAJOR</defaultVersioningOption>\n        </versioning>\n      </code>\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.webapp.bulkedit.VersioningDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/bulkedit-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.virtualnavigation.NavTreeService"
          ],
          "componentClass": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService",
          "declaredStartOrder": null,
          "documentation": "\n    This component is used to register and manage custom navigation\n    trees.\n  \n",
          "documentationHtml": "<p>\nThis component is used to register and manage custom navigation\ntrees.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.platform.virtualnavigation.NavTreeService--navigationTree"
              ],
              "componentId": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService",
              "descriptors": [
                "org.nuxeo.ecm.webapp.tree.nav.NavTreeDescriptor"
              ],
              "documentation": "\n      Extension point to register new navigation tree\n    \n",
              "documentationHtml": "<p>\nExtension point to register new navigation tree\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.tree.nav.NavTreeService/ExtensionPoints/org.nuxeo.ecm.webapp.tree.nav.NavTreeService--navigationTree",
              "id": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService--navigationTree",
              "label": "navigationTree (org.nuxeo.ecm.webapp.tree.nav.NavTreeService)",
              "name": "navigationTree",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.tree.nav.NavTreeService",
          "name": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService",
          "requirements": [
            "org.nuxeo.ecm.platform.actions.ActionService"
          ],
          "resolutionOrder": 646,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.tree.nav.NavTreeService/Services/org.nuxeo.ecm.webapp.tree.nav.NavTreeService",
              "id": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 909,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webapp.tree.nav.NavTreeService\">\n  <alias>org.nuxeo.ecm.platform.virtualnavigation.NavTreeService</alias>\n\n  <!-- since 6.0, automatically registers actions -->\n  <require>org.nuxeo.ecm.platform.actions.ActionService</require>\n\n  <documentation>\n    This component is used to register and manage custom navigation\n    trees.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.webapp.tree.nav.NavTreeService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.webapp.tree.nav.NavTreeService\" />\n  </service>\n\n  <extension-point name=\"navigationTree\">\n    <documentation>\n      Extension point to register new navigation tree\n    </documentation>\n    <object class=\"org.nuxeo.ecm.webapp.tree.nav.NavTreeDescriptor\" />\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/navtree-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.virtualnavigation.NavTreeService.default.contrib"
          ],
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService--navigationTree",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.tree.nav.NavTreeService.default.contrib/Contributions/org.nuxeo.ecm.webapp.tree.nav.NavTreeService.default.contrib--navigationTree",
              "id": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService.default.contrib--navigationTree",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.webapp.tree.nav.NavTreeService",
                "name": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"navigationTree\" target=\"org.nuxeo.ecm.webapp.tree.nav.NavTreeService\">\n\n    <navTree order=\"1\" treeId=\"CONTENT_TREE\" treeLabel=\"label.content.tree\" xhtmlview=\"/incl/tree_explorer.xhtml\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.tree.nav.NavTreeService.default.contrib",
          "name": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService.default.contrib",
          "requirements": [],
          "resolutionOrder": 647,
          "services": [],
          "startOrder": 655,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webapp.tree.nav.NavTreeService.default.contrib\">\n  <alias>org.nuxeo.ecm.platform.virtualnavigation.NavTreeService.default.contrib</alias>\n\n  <extension point=\"navigationTree\" target=\"org.nuxeo.ecm.webapp.tree.nav.NavTreeService\">\n\n    <navTree order=\"1\" treeId=\"CONTENT_TREE\" treeLabel=\"label.content.tree\"\n      xhtmlview=\"/incl/tree_explorer.xhtml\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/navtree-default-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.base.webresources.contrib/Contributions/org.nuxeo.ecm.webapp.base.webresources.contrib--resources",
              "id": "org.nuxeo.ecm.webapp.base.webresources.contrib--resources",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n\n    <resource name=\"jquery.client.js\">\n      <uri>/scripts/dnd/jquery.client.js</uri>\n    </resource>\n    <resource name=\"jquery.dnd-file-upload.js\">\n      <uri>/scripts/dnd/jquery.dnd-file-upload.js</uri>\n    </resource>\n    <resource name=\"nxdropzone.js\">\n      <uri>/scripts/dnd/nxdropzone.js</uri>\n    </resource>\n    <resource name=\"nxinternaldnd.js\">\n      <uri>/scripts/dnd/nxinternaldnd.js</uri>\n    </resource>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--bundles",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.base.webresources.contrib/Contributions/org.nuxeo.ecm.webapp.base.webresources.contrib--bundles",
              "id": "org.nuxeo.ecm.webapp.base.webresources.contrib--bundles",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bundles\" target=\"org.nuxeo.ecm.platform.WebResources\">\n\n    <!-- main bundle with all basic includes -->\n    <bundle name=\"dnd_common\">\n      <resources>\n        <resource>jquery.client.js</resource>\n        <resource>jquery.dnd-file-upload.js</resource>\n        <resource>nxdropzone.js</resource>\n        <resource>nxinternaldnd.js</resource>\n      </resources>\n    </bundle>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.webapp.base.webresources.contrib",
          "name": "org.nuxeo.ecm.webapp.base.webresources.contrib",
          "requirements": [],
          "resolutionOrder": 648,
          "services": [],
          "startOrder": 640,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.webapp.base.webresources.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\n\n    <resource name=\"jquery.client.js\">\n      <uri>/scripts/dnd/jquery.client.js</uri>\n    </resource>\n    <resource name=\"jquery.dnd-file-upload.js\">\n      <uri>/scripts/dnd/jquery.dnd-file-upload.js</uri>\n    </resource>\n    <resource name=\"nxdropzone.js\">\n      <uri>/scripts/dnd/nxdropzone.js</uri>\n    </resource>\n    <resource name=\"nxinternaldnd.js\">\n      <uri>/scripts/dnd/nxinternaldnd.js</uri>\n    </resource>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"bundles\">\n\n    <!-- main bundle with all basic includes -->\n    <bundle name=\"dnd_common\">\n      <resources>\n        <resource>jquery.client.js</resource>\n        <resource>jquery.dnd-file-upload.js</resource>\n        <resource>nxdropzone.js</resource>\n        <resource>nxinternaldnd.js</resource>\n      </resources>\n    </bundle>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/webresources-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Properties controlling Drag&amp;Drop behaviors:\n      <ul>\n    <li>org.nuxeo.dnd.upload.timeout: maximum time for uploading a file via\n          Drag&amp;Drop to the server.</li>\n    <li>org.nuxeo.dnd.exec.timeout: maximum time for executing import of\n          files uploaded via Drag&amp;and Drop</li>\n    <li>org.nuxeo.dnd.extendedmode.timeout: mouse over time before switching\n          to extended mode UI (setting to -1 disables the extended mode)</li>\n</ul>\n",
              "documentationHtml": "<p>\nProperties controlling Drag&amp;Drop behaviors:\n</p><ul><li>org.nuxeo.dnd.upload.timeout: maximum time for uploading a file via\nDrag&amp;Drop to the server.</li><li>org.nuxeo.dnd.exec.timeout: maximum time for executing import of\nfiles uploaded via Drag&amp;and Drop</li><li>org.nuxeo.dnd.extendedmode.timeout: mouse over time before switching\nto extended mode UI (setting to -1 disables the extended mode)</li></ul>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.webapp.base.properties/Contributions/org.nuxeo.ecm.platform.webapp.base.properties--configuration",
              "id": "org.nuxeo.ecm.platform.webapp.base.properties--configuration",
              "registrationOrder": 50,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Properties controlling Drag&amp;Drop behaviors:\n      <ul>\n        <li>org.nuxeo.dnd.upload.timeout: maximum time for uploading a file via\n          Drag&amp;Drop to the server.</li>\n        <li>org.nuxeo.dnd.exec.timeout: maximum time for executing import of\n          files uploaded via Drag&amp;and Drop</li>\n        <li>org.nuxeo.dnd.extendedmode.timeout: mouse over time before switching\n          to extended mode UI (setting to -1 disables the extended mode)</li>\n      </ul>\n    </documentation>\n    <property name=\"org.nuxeo.dnd.upload.timeout\">30000</property>\n    <property name=\"org.nuxeo.dnd.exec.timeout\">30000</property>\n    <property name=\"org.nuxeo.dnd.extendedmode.timeout\">2000</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "<strong>nuxeo.jsf.useAjaxTabs</strong>\n\n: enables ajaxified tabs on document views. Activation also relies on\n      the user's browser because this feature requires manipulating the browser's session history in JavaScript to\n      preserve bookmarkable URLs (see compatibility table at\n      <a\n    href=\"http://caniuse.com/#search=pushstate\" target=\"_blank\">http://caniuse.com/#search=pushstate</a>\n, for\n      instance).\n    \n",
              "documentationHtml": "<p>\n<strong>nuxeo.jsf.useAjaxTabs</strong>\n</p><p>\n: enables ajaxified tabs on document views. Activation also relies on\nthe user&#39;s browser because this feature requires manipulating the browser&#39;s session history in JavaScript to\npreserve bookmarkable URLs (see compatibility table at\n<a href=\"http://caniuse.com/#search&#61;pushstate\" target=\"_blank\" rel=\"noopener noreferrer\">http://caniuse.com/#search&#61;pushstate</a>\n, for\ninstance).\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.webapp.base.properties/Contributions/org.nuxeo.ecm.platform.webapp.base.properties--configuration1",
              "id": "org.nuxeo.ecm.platform.webapp.base.properties--configuration1",
              "registrationOrder": 51,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      <strong>nuxeo.jsf.useAjaxTabs</strong>: enables ajaxified tabs on document views. Activation also relies on\n      the user's browser because this feature requires manipulating the browser's session history in JavaScript to\n      preserve bookmarkable URLs (see compatibility table at\n      <a href=\"http://caniuse.com/#search=pushstate\" target=\"_blank\">http://caniuse.com/#search=pushstate</a>, for\n      instance).\n    </documentation>\n    <property name=\"nuxeo.jsf.useAjaxTabs\">true</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "<strong>nuxeo.jsf.ajax.disableErrorFeedback</strong>\n: disables JavaScript hook displaying\n      an error message in the JSF UI when an empty response is received from server.\n      Disabling this hook is not recommended, but this can be useful on a slow server\n      when users do not want to see this message on some concurrent requests (when\n      server is down, no message will be displayed on Ajax actions).\n    \n",
              "documentationHtml": "<p>\n<strong>nuxeo.jsf.ajax.disableErrorFeedback</strong>\n: disables JavaScript hook displaying\nan error message in the JSF UI when an empty response is received from server.\nDisabling this hook is not recommended, but this can be useful on a slow server\nwhen users do not want to see this message on some concurrent requests (when\nserver is down, no message will be displayed on Ajax actions).\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.webapp.base.properties/Contributions/org.nuxeo.ecm.platform.webapp.base.properties--configuration2",
              "id": "org.nuxeo.ecm.platform.webapp.base.properties--configuration2",
              "registrationOrder": 52,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      <strong>nuxeo.jsf.ajax.disableErrorFeedback</strong>: disables JavaScript hook displaying\n      an error message in the JSF UI when an empty response is received from server.\n      Disabling this hook is not recommended, but this can be useful on a slow server\n      when users do not want to see this message on some concurrent requests (when\n      server is down, no message will be displayed on Ajax actions).\n    </documentation>\n    <property name=\"nuxeo.jsf.ajax.disableErrorFeedback\">false</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Properties controlling resources management:\n      <ul>\n    <li>\n        <strong>nuxeo.jsf.combinePageResources</strong>: serve all js and CSS resources\n            of a page with a single request (instead of bundle by bundle)</li>\n    <li>\n        <strong>nuxeo.jsf.deferJavaScriptLoading</strong>: move all JavaScript resources\n            at the end of the page. WARNING - enabling this might break\n            some inline JavaScript code behaviors.</li>\n</ul>\n",
              "documentationHtml": "<p>\nProperties controlling resources management:\n</p><ul><li>\n<strong>nuxeo.jsf.combinePageResources</strong>: serve all js and CSS resources\nof a page with a single request (instead of bundle by bundle)</li><li>\n<strong>nuxeo.jsf.deferJavaScriptLoading</strong>: move all JavaScript resources\nat the end of the page. WARNING - enabling this might break\nsome inline JavaScript code behaviors.</li></ul>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.webapp.base.properties/Contributions/org.nuxeo.ecm.platform.webapp.base.properties--configuration3",
              "id": "org.nuxeo.ecm.platform.webapp.base.properties--configuration3",
              "registrationOrder": 53,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Properties controlling resources management:\n      <ul>\n        <li><strong>nuxeo.jsf.combinePageResources</strong>: serve all js and CSS resources\n            of a page with a single request (instead of bundle by bundle)</li>\n        <li><strong>nuxeo.jsf.deferJavaScriptLoading</strong>: move all JavaScript resources\n            at the end of the page. WARNING - enabling this might break\n            some inline JavaScript code behaviors.</li>\n      </ul>\n    </documentation>\n    <property name=\"nuxeo.jsf.combinePageResources\">true</property>\n    <property name=\"nuxeo.jsf.deferJavaScriptLoading\">true</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Controls whether iterations in document listings are done\n      using build-time tag c:forEach or render-time tag ui:repeat (which is much\n      more efficient on large content).\n\n      Using render-time iterations may break\n      some behaviours, this property is mainly useful for backport of\n      optimizations on maintenance branches.\n\n      @since 8.2\n    \n",
              "documentationHtml": "<p>\nControls whether iterations in document listings are done\nusing build-time tag c:forEach or render-time tag ui:repeat (which is much\nmore efficient on large content).\n</p><p>\nUsing render-time iterations may break\nsome behaviours, this property is mainly useful for backport of\noptimizations on maintenance branches.\n</p><p>\n&#64;since 8.2\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.webapp.base.properties/Contributions/org.nuxeo.ecm.platform.webapp.base.properties--configuration4",
              "id": "org.nuxeo.ecm.platform.webapp.base.properties--configuration4",
              "registrationOrder": 54,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Controls whether iterations in document listings are done\n      using build-time tag c:forEach or render-time tag ui:repeat (which is much\n      more efficient on large content).\n\n      Using render-time iterations may break\n      some behaviours, this property is mainly useful for backport of\n      optimizations on maintenance branches.\n\n      @since 8.2\n    </documentation>\n    <property name=\"nuxeo.jsf.listings.useRepeatRenderTime\">true</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Controls whether iterations in vocabulary entries listings are done\n      using build-time tag c:forEach or render-time tag ui:repeat (which is much\n      more efficient on large content).\n\n      Using render-time iterations may break\n      some behaviours, this property is mainly useful for backport of\n      optimizations on maintenance branches.\n\n      @since 9.3\n    \n",
              "documentationHtml": "<p>\nControls whether iterations in vocabulary entries listings are done\nusing build-time tag c:forEach or render-time tag ui:repeat (which is much\nmore efficient on large content).\n</p><p>\nUsing render-time iterations may break\nsome behaviours, this property is mainly useful for backport of\noptimizations on maintenance branches.\n</p><p>\n&#64;since 9.3\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.webapp.base.properties/Contributions/org.nuxeo.ecm.platform.webapp.base.properties--configuration5",
              "id": "org.nuxeo.ecm.platform.webapp.base.properties--configuration5",
              "registrationOrder": 55,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Controls whether iterations in vocabulary entries listings are done\n      using build-time tag c:forEach or render-time tag ui:repeat (which is much\n      more efficient on large content).\n\n      Using render-time iterations may break\n      some behaviours, this property is mainly useful for backport of\n      optimizations on maintenance branches.\n\n      @since 9.3\n    </documentation>\n    <property name=\"nuxeo.jsf.vocabularies.useRepeatRenderTime\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.webapp.base.properties",
          "name": "org.nuxeo.ecm.platform.webapp.base.properties",
          "requirements": [],
          "resolutionOrder": 649,
          "services": [],
          "startOrder": 578,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.webapp.base.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Properties controlling Drag&amp;Drop behaviors:\n      <ul>\n        <li>org.nuxeo.dnd.upload.timeout: maximum time for uploading a file via\n          Drag&amp;Drop to the server.</li>\n        <li>org.nuxeo.dnd.exec.timeout: maximum time for executing import of\n          files uploaded via Drag&amp;and Drop</li>\n        <li>org.nuxeo.dnd.extendedmode.timeout: mouse over time before switching\n          to extended mode UI (setting to -1 disables the extended mode)</li>\n      </ul>\n    </documentation>\n    <property name=\"org.nuxeo.dnd.upload.timeout\">30000</property>\n    <property name=\"org.nuxeo.dnd.exec.timeout\">30000</property>\n    <property name=\"org.nuxeo.dnd.extendedmode.timeout\">2000</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      <strong>nuxeo.jsf.useAjaxTabs</strong>: enables ajaxified tabs on document views. Activation also relies on\n      the user's browser because this feature requires manipulating the browser's session history in JavaScript to\n      preserve bookmarkable URLs (see compatibility table at\n      <a href=\"http://caniuse.com/#search=pushstate\" target=\"_blank\">http://caniuse.com/#search=pushstate</a>, for\n      instance).\n    </documentation>\n    <property name=\"nuxeo.jsf.useAjaxTabs\">true</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      <strong>nuxeo.jsf.ajax.disableErrorFeedback</strong>: disables JavaScript hook displaying\n      an error message in the JSF UI when an empty response is received from server.\n      Disabling this hook is not recommended, but this can be useful on a slow server\n      when users do not want to see this message on some concurrent requests (when\n      server is down, no message will be displayed on Ajax actions).\n    </documentation>\n    <property name=\"nuxeo.jsf.ajax.disableErrorFeedback\">false</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Properties controlling resources management:\n      <ul>\n        <li><strong>nuxeo.jsf.combinePageResources</strong>: serve all js and CSS resources\n            of a page with a single request (instead of bundle by bundle)</li>\n        <li><strong>nuxeo.jsf.deferJavaScriptLoading</strong>: move all JavaScript resources\n            at the end of the page. WARNING - enabling this might break\n            some inline JavaScript code behaviors.</li>\n      </ul>\n    </documentation>\n    <property name=\"nuxeo.jsf.combinePageResources\">true</property>\n    <property name=\"nuxeo.jsf.deferJavaScriptLoading\">true</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Controls whether iterations in document listings are done\n      using build-time tag c:forEach or render-time tag ui:repeat (which is much\n      more efficient on large content).\n\n      Using render-time iterations may break\n      some behaviours, this property is mainly useful for backport of\n      optimizations on maintenance branches.\n\n      @since 8.2\n    </documentation>\n    <property name=\"nuxeo.jsf.listings.useRepeatRenderTime\">true</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Controls whether iterations in vocabulary entries listings are done\n      using build-time tag c:forEach or render-time tag ui:repeat (which is much\n      more efficient on large content).\n\n      Using render-time iterations may break\n      some behaviours, this property is mainly useful for backport of\n      optimizations on maintenance branches.\n\n      @since 9.3\n    </documentation>\n    <property name=\"nuxeo.jsf.vocabularies.useRepeatRenderTime\">true</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/webapp-base-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.rest.URLService--urlpatterns",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.thumbnail.contrib/Contributions/org.nuxeo.ecm.platform.thumbnail.contrib--urlpatterns",
              "id": "org.nuxeo.ecm.platform.thumbnail.contrib--urlpatterns",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.rest.URLService",
                "name": "org.nuxeo.ecm.platform.ui.web.rest.URLService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"urlpatterns\" target=\"org.nuxeo.ecm.platform.ui.web.rest.URLService\">\n    <urlPattern enabled=\"true\" name=\"downloadThumbnail\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>false</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>downloadThumbnail</codecName>\n      <actionBinding>#{thumbnailManager.downloadThumbnail}</actionBinding>\n      <documentViewBinding>\n        #{restHelper.documentView}\n      </documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.newDocumentView}\n      </newDocumentViewBinding>\n    </urlPattern>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService--codecs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.thumbnail.contrib/Contributions/org.nuxeo.ecm.platform.thumbnail.contrib--codecs",
              "id": "org.nuxeo.ecm.platform.thumbnail.contrib--codecs",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"codecs\" target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\">\n    <documentViewCodec class=\"org.nuxeo.ecm.platform.url.codec.DocumentFileCodec\" enabled=\"true\" name=\"downloadThumbnail\" prefix=\"nxthumb\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--startURL",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.thumbnail.contrib/Contributions/org.nuxeo.ecm.platform.thumbnail.contrib--startURL",
              "id": "org.nuxeo.ecm.platform.thumbnail.contrib--startURL",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <startURLPattern>\n      <patterns>\n        <pattern>nxthumb/</pattern>\n      </patterns>\n    </startURLPattern>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.platform.thumbnail.contrib",
          "name": "org.nuxeo.ecm.platform.thumbnail.contrib",
          "requirements": [],
          "resolutionOrder": 650,
          "services": [],
          "startOrder": 509,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.thumbnail.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.rest.URLService\"\n    point=\"urlpatterns\">\n    <urlPattern name=\"downloadThumbnail\" enabled=\"true\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>false</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>downloadThumbnail</codecName>\n      <actionBinding>#{thumbnailManager.downloadThumbnail}</actionBinding>\n      <documentViewBinding>\n        #{restHelper.documentView}\n      </documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.newDocumentView}\n      </newDocumentViewBinding>\n    </urlPattern>\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\"\n    point=\"codecs\">\n    <documentViewCodec name=\"downloadThumbnail\"\n      enabled=\"true\" prefix=\"nxthumb\"\n      class=\"org.nuxeo.ecm.platform.url.codec.DocumentFileCodec\" />\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"startURL\">\n    <startURLPattern>\n      <patterns>\n        <pattern>nxthumb/</pattern>\n      </patterns>\n    </startURLPattern>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/thumbnail-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.ContentViewService--contentViews",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.contentview/Contributions/org.nuxeo.ecm.collections.contentview--contentViews",
              "id": "org.nuxeo.ecm.collections.contentview--contentViews",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "name": "org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"contentViews\" target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\">\n\n    <contentView name=\"user_collection_contentview\">\n\n      <title>label.search.results</title>\n      <translateTitle>true</translateTitle>\n\n      <emptySentence>label.content.empty.search</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <searchDocumentType>Document</searchDocumentType>\n        <whereClause>\n          <fixedPart>\n            ecm:mixinType = 'Collection' AND ecm:mixinType !=\n            'HiddenInNavigation'\n            AND ecm:primaryType != 'Favorites'\n            AND ecm:isVersion = 0 AND\n            ecm:isTrashed = 0\n          </fixedPart>\n        </whereClause>\n        <sort ascending=\"true\" column=\"dc:title\"/>\n        <pageSize>20</pageSize>\n      </coreQueryPageProvider>\n\n      <searchLayout name=\"collections_default\"/>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n\n      <resultLayouts>\n        <layout iconPath=\"/icons/document_listing_icon.png\" name=\"collections_listing\" showCSVExport=\"true\" showSyndicationLinks=\"false\" title=\"document_listing\" translateTitle=\"true\"/>\n      </resultLayouts>\n\n      <selectionList>COLLECTIONS_CURRENT_SELECTION</selectionList>\n      <actions category=\"COLLECTIONS_CURRENT_SELECTION_LIST\"/>\n\n    </contentView>\n\n    <contentView name=\"collection_content_contentview\">\n\n      <title>label.search.results</title>\n      <translateTitle>true</translateTitle>\n\n      <emptySentence>label.content.empty.search</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <searchDocumentType>AdvancedSearch</searchDocumentType>\n        <whereClause>\n          <predicate operator=\"FULLTEXT\" parameter=\"ecm:fulltext\">\n            <field name=\"fulltext_all\" schema=\"advanced_search\"/>\n          </predicate>\n          <predicate operator=\"FULLTEXT\" parameter=\"dc:title\">\n            <field name=\"title\" schema=\"advanced_search\"/>\n          </predicate>\n          <predicate operator=\"BETWEEN\" parameter=\"dc:modified\">\n            <field name=\"modified_min\" schema=\"advanced_search\"/>\n            <field name=\"modified_max\" schema=\"advanced_search\"/>\n          </predicate>\n          <fixedPart>\n            ecm:mixinType != 'HiddenInNavigation' AND\n            ecm:isTrashed = 0 AND\n            collectionMember:collectionIds/* = ?\n          </fixedPart>\n        </whereClause>\n        <parameter>#{currentDocument.id}</parameter>\n        <sort ascending=\"true\" column=\"dc:title\"/>\n        <pageSize>20</pageSize>\n      </coreQueryPageProvider>\n\n      <searchLayout filterDisplayType=\"quick\" name=\"document_content_filter\"/>\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n\n      <resultLayouts>\n        <layout iconPath=\"/icons/document_listing_icon.png\" name=\"document_listing_table\" showCSVExport=\"true\" showEditColumns=\"true\" showSpreadsheet=\"true\" title=\"document_listing\" translateTitle=\"true\"/>\n        <layout iconPath=\"/icons/document_listing_icon_2_columns_icon.png\" name=\"document_listing_thumbnail\" showEditRows=\"true\" showSlideshow=\"true\" title=\"document_thumbnail_listing\" translateTitle=\"true\"/>\n      </resultLayouts>\n\n      <selectionList>COLLECTION_CURRENT_SELECTION</selectionList>\n      <actions category=\"COLLECTION_ACTION\"/>\n\n    </contentView>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.contentview",
          "name": "org.nuxeo.ecm.collections.contentview",
          "requirements": [],
          "resolutionOrder": 651,
          "services": [],
          "startOrder": 100,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.collections.contentview\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\"\n    point=\"contentViews\">\n\n    <contentView name=\"user_collection_contentview\">\n\n      <title>label.search.results</title>\n      <translateTitle>true</translateTitle>\n\n      <emptySentence>label.content.empty.search</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <searchDocumentType>Document</searchDocumentType>\n        <whereClause>\n          <fixedPart>\n            ecm:mixinType = 'Collection' AND ecm:mixinType !=\n            'HiddenInNavigation'\n            AND ecm:primaryType != 'Favorites'\n            AND ecm:isVersion = 0 AND\n            ecm:isTrashed = 0\n          </fixedPart>\n        </whereClause>\n        <sort column=\"dc:title\" ascending=\"true\" />\n        <pageSize>20</pageSize>\n      </coreQueryPageProvider>\n\n      <searchLayout name=\"collections_default\" />\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n\n      <resultLayouts>\n        <layout name=\"collections_listing\" title=\"document_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon.png\"\n          showCSVExport=\"true\" showSyndicationLinks=\"false\" />\n      </resultLayouts>\n\n      <selectionList>COLLECTIONS_CURRENT_SELECTION</selectionList>\n      <actions category=\"COLLECTIONS_CURRENT_SELECTION_LIST\" />\n\n    </contentView>\n\n    <contentView name=\"collection_content_contentview\">\n\n      <title>label.search.results</title>\n      <translateTitle>true</translateTitle>\n\n      <emptySentence>label.content.empty.search</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <searchDocumentType>AdvancedSearch</searchDocumentType>\n        <whereClause>\n          <predicate parameter=\"ecm:fulltext\" operator=\"FULLTEXT\">\n            <field schema=\"advanced_search\" name=\"fulltext_all\" />\n          </predicate>\n          <predicate parameter=\"dc:title\" operator=\"FULLTEXT\">\n            <field schema=\"advanced_search\" name=\"title\" />\n          </predicate>\n          <predicate parameter=\"dc:modified\" operator=\"BETWEEN\">\n            <field schema=\"advanced_search\" name=\"modified_min\" />\n            <field schema=\"advanced_search\" name=\"modified_max\" />\n          </predicate>\n          <fixedPart>\n            ecm:mixinType != 'HiddenInNavigation' AND\n            ecm:isTrashed = 0 AND\n            collectionMember:collectionIds/* = ?\n          </fixedPart>\n        </whereClause>\n        <parameter>#{currentDocument.id}</parameter>\n        <sort column=\"dc:title\" ascending=\"true\" />\n        <pageSize>20</pageSize>\n      </coreQueryPageProvider>\n\n      <searchLayout name=\"document_content_filter\"\n        filterDisplayType=\"quick\" />\n      <showFilterForm>true</showFilterForm>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n\n      <resultLayouts>\n        <layout name=\"document_listing_table\" title=\"document_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon.png\"\n          showCSVExport=\"true\" showSpreadsheet=\"true\" showEditColumns=\"true\" />\n        <layout name=\"document_listing_thumbnail\" title=\"document_thumbnail_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon_2_columns_icon.png\"\n          showSlideshow=\"true\" showEditRows=\"true\" />\n      </resultLayouts>\n\n      <selectionList>COLLECTION_CURRENT_SELECTION</selectionList>\n      <actions category=\"COLLECTION_ACTION\" />\n\n    </contentView>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/collection-contentviews-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService--list",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.collections.directories.documentsLists/Contributions/org.nuxeo.collections.directories.documentsLists--list",
              "id": "org.nuxeo.collections.directories.documentsLists--list",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService",
                "name": "org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"list\" target=\"org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService\">\n\n    <documentsList name=\"COLLECTIONS_CURRENT_SELECTION\">\n      <events>\n        <event>folderishDocumentSelectionChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n    <documentsList name=\"COLLECTION_CURRENT_SELECTION\">\n      <events>\n        <event>folderishDocumentSelectionChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.collections.directories.documentsLists",
          "name": "org.nuxeo.collections.directories.documentsLists",
          "requirements": [],
          "resolutionOrder": 652,
          "services": [],
          "startOrder": 55,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.collections.directories.documentsLists\">\n\n  <extension target=\"org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService\"\n    point=\"list\">\n\n    <documentsList name=\"COLLECTIONS_CURRENT_SELECTION\">\n      <events>\n        <event>folderishDocumentSelectionChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n    <documentsList name=\"COLLECTION_CURRENT_SELECTION\">\n      <events>\n        <event>folderishDocumentSelectionChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/collection-documentslists-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.listing/Contributions/org.nuxeo.ecm.collections.listing--layouts",
              "id": "org.nuxeo.ecm.collections.listing--layouts",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"collections_listing\" type=\"listingTable\">\n      <properties mode=\"any\">\n        <property name=\"showListingHeader\">true</property>\n        <property name=\"showRowEvenOddClass\">true</property>\n        <property name=\"display\">table</property>\n      </properties>\n      <columns>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"isListingSelectionBoxWithCurrentDocument\">\n              true\n            </property>\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box_with_current_document</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:title</property>\n          </properties>\n          <widget>listing_title_link</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_lock_icon</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:modified</property>\n          </properties>\n          <widget>listing_modification_date</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:lastContributor</property>\n          </properties>\n          <widget>listing_last_contributor</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_manage_collection</widget>\n        </column>\n      </columns>\n    </layout>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.listing/Contributions/org.nuxeo.ecm.collections.listing--widgets",
              "id": "org.nuxeo.ecm.collections.listing--widgets",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"listing_manage_collection\" type=\"listing_manage_document\">\n      <labels>\n        <label mode=\"any\">action.view.manage</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data</field>\n      </fields>\n    </widget>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.listing",
          "name": "org.nuxeo.ecm.collections.listing",
          "requirements": [
            "org.nuxeo.ecm.platform.forms.layouts.webapp.types",
            "org.nuxeo.ecm.platform.forms.layouts.webapp.listing"
          ],
          "resolutionOrder": 653,
          "services": [],
          "startOrder": 103,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.collections.listing\">\n\n  <require>org.nuxeo.ecm.platform.forms.layouts.webapp.listing</require>\n  <require>org.nuxeo.ecm.platform.forms.layouts.webapp.types</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"collections_listing\" type=\"listingTable\">\n      <properties mode=\"any\">\n        <property name=\"showListingHeader\">true</property>\n        <property name=\"showRowEvenOddClass\">true</property>\n        <property name=\"display\">table</property>\n      </properties>\n      <columns>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"isListingSelectionBoxWithCurrentDocument\">\n              true\n            </property>\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_ajax_selection_box_with_current_document</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">false</property>\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <widget>listing_icon_type</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:title</property>\n          </properties>\n          <widget>listing_title_link</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"columnStyleClass\">iconColumn</property>\n          </properties>\n          <properties mode=\"csv\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <properties mode=\"pdf\">\n            <property name=\"isHidden\">true</property>\n          </properties>\n          <widget>listing_lock_icon</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:modified</property>\n          </properties>\n          <widget>listing_modification_date</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n            <property name=\"sortPropertyName\">dc:lastContributor</property>\n          </properties>\n          <widget>listing_last_contributor</widget>\n        </column>\n        <column>\n          <properties mode=\"any\">\n            <property name=\"useFirstWidgetLabelAsColumnHeader\">true</property>\n          </properties>\n          <widget>listing_manage_collection</widget>\n        </column>\n      </columns>\n    </layout>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"listing_manage_collection\" type=\"listing_manage_document\">\n      <labels>\n        <label mode=\"any\">action.view.manage</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>data</field>\n      </fields>\n    </widget>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/collection-layout-listing-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.ContentViewService--contentViews",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.favorites.contentview/Contributions/org.nuxeo.ecm.favorites.contentview--contentViews",
              "id": "org.nuxeo.ecm.favorites.contentview--contentViews",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "name": "org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"contentViews\" target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\">\n\n    <contentView name=\"favorites_content_contentview\">\n\n      <title>label.search.results</title>\n      <translateTitle>true</translateTitle>\n\n      <emptySentence>label.content.empty.search</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <searchDocumentType>Document</searchDocumentType>\n        <whereClause>\n          <fixedPart>\n            ecm:mixinType != 'HiddenInNavigation' AND\n            ecm:isVersion = 0 AND ecm:isTrashed = 0 AND\n            collectionMember:collectionIds/* = ?\n          </fixedPart>\n        </whereClause>\n        <parameter>#{currentUserFavorites.id}</parameter>\n        <sort ascending=\"true\" column=\"dc:title\"/>\n        <pageSize>20</pageSize>\n      </coreQueryPageProvider>\n\n      <searchLayout name=\"collection_content_default\"/>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n\n      <resultLayouts>\n        <layout iconPath=\"/icons/document_listing_icon.png\" name=\"document_virtual_navigation_listing_ajax\" showCSVExport=\"true\" showSyndicationLinks=\"true\" title=\"document_listing\" translateTitle=\"true\"/>\n      </resultLayouts>\n\n      <selectionList>COLLECTION_CURRENT_SELECTION</selectionList>\n      <actions category=\"COLLECTION_ACTION\"/>\n\n    </contentView>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.favorites.contentview",
          "name": "org.nuxeo.ecm.favorites.contentview",
          "requirements": [],
          "resolutionOrder": 654,
          "services": [],
          "startOrder": 209,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.favorites.contentview\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\"\n    point=\"contentViews\">\n\n    <contentView name=\"favorites_content_contentview\">\n\n      <title>label.search.results</title>\n      <translateTitle>true</translateTitle>\n\n      <emptySentence>label.content.empty.search</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <searchDocumentType>Document</searchDocumentType>\n        <whereClause>\n          <fixedPart>\n            ecm:mixinType != 'HiddenInNavigation' AND\n            ecm:isVersion = 0 AND ecm:isTrashed = 0 AND\n            collectionMember:collectionIds/* = ?\n          </fixedPart>\n        </whereClause>\n        <parameter>#{currentUserFavorites.id}</parameter>\n        <sort column=\"dc:title\" ascending=\"true\" />\n        <pageSize>20</pageSize>\n      </coreQueryPageProvider>\n\n      <searchLayout name=\"collection_content_default\" />\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n\n      <resultLayouts>\n        <layout name=\"document_virtual_navigation_listing_ajax\" title=\"document_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon.png\"\n          showCSVExport=\"true\" showSyndicationLinks=\"true\" />\n      </resultLayouts>\n\n      <selectionList>COLLECTION_CURRENT_SELECTION</selectionList>\n      <actions category=\"COLLECTION_ACTION\" />\n\n    </contentView>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/favorites-contentviews-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--bundles",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.theme/Contributions/org.nuxeo.ecm.collections.theme--bundles",
              "id": "org.nuxeo.ecm.collections.theme--bundles",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bundles\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>collections2Formatter.js</resource>\n      </resources>\n    </bundle>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.theme/Contributions/org.nuxeo.ecm.collections.theme--resources",
              "id": "org.nuxeo.ecm.collections.theme--resources",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <resource name=\"collections2Formatter.js\">\n      <uri>/scripts/collections2Formatter.js</uri>\n    </resource>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.theme",
          "name": "org.nuxeo.ecm.collections.theme",
          "requirements": [
            "org.nuxeo.theme.nuxeo.webapp"
          ],
          "resolutionOrder": 663,
          "services": [],
          "startOrder": 107,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.collections.theme\">\n\n  <require>org.nuxeo.theme.nuxeo.webapp</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"bundles\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>collections2Formatter.js</resource>\n      </resources>\n    </bundle>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\n    <resource name=\"collections2Formatter.js\">\n      <uri>/scripts/collections2Formatter.js</uri>\n    </resource>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/collection-theme-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.actions/Contributions/org.nuxeo.ecm.collections.actions--actions",
              "id": "org.nuxeo.ecm.collections.actions--actions",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action icon=\"/icons/collection_tab.png\" id=\"Collections\" label=\"user.center.collections\" link=\"/user_center_fragment.xhtml\" order=\"80\">\n      <category>USER_CENTER</category>\n      <properties>\n        <property name=\"alwaysDisplaySubTabs\">true</property>\n      </properties>\n      <filter-id>not_anonymous</filter-id>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n\n    <action id=\"CollectionList\" label=\"user.center.collections\" link=\"/incl/collection_listing.xhtml\" order=\"0\">\n      <category>Collections_sub_tab</category>\n      <filter-id>not_readonly</filter-id>\n    </action>\n\n    <action accessKey=\"u\" icon=\"/icons/add_to_collection.png\" id=\"addToCollectionAction\" label=\"label.addToCollection\" order=\"0\" type=\"fancybox\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>canAddToCollection</filter-id>\n      <properties>\n        <property name=\"include\">/incl/add_to_collection.xhtml</property>\n      </properties>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n\n    <action accessKey=\"u\" icon=\"/icons/add_to_collection.png\" id=\"selectDocumentToBeAddedToCollection\" label=\"label.addToCollection.selectDocToBeAddedToCollection\" order=\"0\" type=\"fancybox\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>canSelectedToBeAddedToCollection</filter-id>\n      <properties>\n        <property name=\"include\">/incl/select_doc_to_be_added_to_collection.xhtml</property>\n      </properties>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n\n\n    <action id=\"collectionContent\" label=\"action.view.content\" link=\"/incl/collection_content_listing.xhtml\" order=\"-1\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>collectionContentFilter</filter-id>\n    </action>\n\n    <action confirm=\"if( !confirmDeleteDocumentsForever() ) return false;\" help=\"comand.deleteDocs.help\" icon=\"\" id=\"collectionsCurrentSelectionDelete\" label=\"command.trashDocs\" link=\"#{deleteActions.purgeSelection('COLLECTIONS_CURRENT_SELECTION')}\">\n      <category>COLLECTIONS_CURRENT_SELECTION_LIST</category>\n      <filter id=\"canDeleteCollections\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.getCanDelete('COLLECTIONS_CURRENT_SELECTION')}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"\" id=\"collectionCurrentSelectionDelete\" label=\"label.removeCurrentSelectionFromCollection\" link=\"#{collectionActions.removeCurrentSelectionFromCollection()}\">\n      <category>COLLECTION_ACTION</category>\n      <filter id=\"canRemoveFromCollection\"/>\n    </action>\n\n    <action accessKey=\"j\" icon=\"/icons/add_to_collection.png\" id=\"addSelectedToCollectionAction\" label=\"label.addToCollection\" order=\"40\" type=\"fancybox\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canAddSelectedToCollection</filter-id>\n      <properties>\n        <property name=\"include\">/incl/add_selection_to_collection.xhtml</property>\n        <property name=\"autoDimensions\">false</property>\n        <property name=\"height\">400</property>\n        <property name=\"width\">600</property>\n      </properties>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n\n    <action id=\"exportViewZipBlobExport\">\n      <filter-id>can_zip_export</filter-id>\n    </action>\n\n    <action id=\"TAB_VIEW\">\n      <filter-id>denyForCollection</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.actions/Contributions/org.nuxeo.ecm.collections.actions--filters",
              "id": "org.nuxeo.ecm.collections.actions--filters",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter append=\"true\" id=\"create\">\n      <rule grant=\"true\">\n        <permission>AddChildren</permission>\n        <type>Collections</type>\n      </rule>\n    </filter>\n\n    <filter id=\"canAddToCollection\">\n      <rule grant=\"true\">\n        <condition>\n          #{collectionActions.canCurrentDocumentBeCollected()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canSelectedToBeAddedToCollection\">\n      <rule grant=\"true\">\n        <condition>\n          #{collectionActions.canAddToDocsToCurrentCollection()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canAddSelectedToCollection\">\n      <rule grant=\"true\">\n        <condition>\n          #{collectionActions.canAddSelectedDocumentBeCollected()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canRemoveFromCollection\">\n      <rule grant=\"true\">\n        <condition>\n          #{collectionActions.canRemoveFromCollection()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter append=\"true\" id=\"rights\">\n      <rule grant=\"true\">\n        <facet>Collection</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"collectionContentFilter\">\n      <rule grant=\"true\">\n        <facet>Collection</facet>\n      </rule>\n    </filter>\n\n    <filter append=\"true\" id=\"can_zip_export\">\n      <rule grant=\"false\">\n        <type>Collections</type>\n        <type>Collection</type>\n      </rule>\n    </filter>\n\n    <filter id=\"denyForCollection\">\n      <rule grant=\"false\">\n        <type>Collection</type>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.actions",
          "name": "org.nuxeo.ecm.collections.actions",
          "requirements": [
            "org.nuxeo.ecm.webapp.seam.debug.action",
            "org.nuxeo.ecm.platform.actions"
          ],
          "resolutionOrder": 665,
          "services": [],
          "startOrder": 98,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.collections.actions\">\n\n  <require>org.nuxeo.ecm.platform.actions</require>\n  <require>org.nuxeo.ecm.webapp.seam.debug.action</require>\n\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"Collections\" link=\"/user_center_fragment.xhtml\" label=\"user.center.collections\"\n      order=\"80\" icon=\"/icons/collection_tab.png\">\n      <category>USER_CENTER</category>\n      <properties>\n        <property name=\"alwaysDisplaySubTabs\">true</property>\n      </properties>\n      <filter-id>not_anonymous</filter-id>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n\n    <action id=\"CollectionList\" link=\"/incl/collection_listing.xhtml\"\n      label=\"user.center.collections\" order=\"0\">\n      <category>Collections_sub_tab</category>\n      <filter-id>not_readonly</filter-id>\n    </action>\n\n    <action id=\"addToCollectionAction\" order=\"0\" label=\"label.addToCollection\"\n      type=\"fancybox\" icon=\"/icons/add_to_collection.png\" accessKey=\"u\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>canAddToCollection</filter-id>\n      <properties>\n        <property name=\"include\">/incl/add_to_collection.xhtml</property>\n      </properties>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n\n    <action id=\"selectDocumentToBeAddedToCollection\" order=\"0\" label=\"label.addToCollection.selectDocToBeAddedToCollection\"\n      type=\"fancybox\" icon=\"/icons/add_to_collection.png\" accessKey=\"u\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>canSelectedToBeAddedToCollection</filter-id>\n      <properties>\n        <property name=\"include\">/incl/select_doc_to_be_added_to_collection.xhtml</property>\n      </properties>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n\n\n    <action id=\"collectionContent\" link=\"/incl/collection_content_listing.xhtml\"\n      order=\"-1\" label=\"action.view.content\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>collectionContentFilter</filter-id>\n    </action>\n\n    <action id=\"collectionsCurrentSelectionDelete\"\n      link=\"#{deleteActions.purgeSelection('COLLECTIONS_CURRENT_SELECTION')}\"\n      label=\"command.trashDocs\" icon=\"\" help=\"comand.deleteDocs.help\"\n      confirm=\"if( !confirmDeleteDocumentsForever() ) return false;\">\n      <category>COLLECTIONS_CURRENT_SELECTION_LIST</category>\n      <filter id=\"canDeleteCollections\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.getCanDelete('COLLECTIONS_CURRENT_SELECTION')}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"collectionCurrentSelectionDelete\"\n      link=\"#{collectionActions.removeCurrentSelectionFromCollection()}\"\n      label=\"label.removeCurrentSelectionFromCollection\" icon=\"\">\n      <category>COLLECTION_ACTION</category>\n      <filter id=\"canRemoveFromCollection\" />\n    </action>\n\n    <action id=\"addSelectedToCollectionAction\" order=\"40\" label=\"label.addToCollection\"\n      type=\"fancybox\" icon=\"/icons/add_to_collection.png\" accessKey=\"j\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canAddSelectedToCollection</filter-id>\n      <properties>\n        <property name=\"include\">/incl/add_selection_to_collection.xhtml</property>\n        <property name=\"autoDimensions\">false</property>\n        <property name=\"height\">400</property>\n        <property name=\"width\">600</property>\n      </properties>\n      <filter-id>not_transient_user</filter-id>\n    </action>\n\n    <action id=\"exportViewZipBlobExport\">\n      <filter-id>can_zip_export</filter-id>\n    </action>\n\n    <action id=\"TAB_VIEW\">\n      <filter-id>denyForCollection</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"create\" append=\"true\">\n      <rule grant=\"true\">\n        <permission>AddChildren</permission>\n        <type>Collections</type>\n      </rule>\n    </filter>\n\n    <filter id=\"canAddToCollection\">\n      <rule grant=\"true\">\n        <condition>\n          #{collectionActions.canCurrentDocumentBeCollected()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canSelectedToBeAddedToCollection\">\n      <rule grant=\"true\">\n        <condition>\n          #{collectionActions.canAddToDocsToCurrentCollection()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canAddSelectedToCollection\">\n      <rule grant=\"true\">\n        <condition>\n          #{collectionActions.canAddSelectedDocumentBeCollected()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canRemoveFromCollection\">\n      <rule grant=\"true\">\n        <condition>\n          #{collectionActions.canRemoveFromCollection()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"rights\" append=\"true\">\n      <rule grant=\"true\">\n        <facet>Collection</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"collectionContentFilter\">\n      <rule grant=\"true\">\n        <facet>Collection</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"can_zip_export\" append=\"true\" >\n      <rule grant=\"false\">\n        <type>Collections</type>\n        <type>Collection</type>\n      </rule>\n    </filter>\n\n    <filter id=\"denyForCollection\">\n      <rule grant=\"false\">\n        <type>Collection</type>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/collection-actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.favorites.actions/Contributions/org.nuxeo.ecm.favorites.actions--actions",
              "id": "org.nuxeo.ecm.favorites.actions--actions",
              "registrationOrder": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <!-- action id=\"Favorites\" link=\"/user_center_fragment.xhtml\" label=\"user.center.favorites\"\n      order=\"80\" icon=\"/icons/favorite_tab.png\"> <category>USER_CENTER</category> <properties>\n      <property name=\"alwaysDisplaySubTabs\">true</property> </properties> <filter-id>not_anonymous</filter-id>\n      </action> <action id=\"favoritesContent\" link=\"/incl/favorites_content_listing.xhtml\"\n      label=\"user.center.favorites\" order=\"0\"> <category>Favorites_sub_tab</category> <filter-id>not_readonly</filter-id>\n      </action -->\n\n    <action icon=\"/icons/pin.png\" id=\"addToFavoritesAction\" label=\"label.addToFavorites\" link=\"#{favoritesActions.addCurrentDocumentToFavorites()}\" order=\"0\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>not_transient_user</filter-id>\n      <filter-id>canAddToFavorites</filter-id>\n    </action>\n\n    <action icon=\"/icons/pinned.png\" id=\"removeFromFavoritesAction\" label=\"label.removeFromFavorites\" link=\"#{favoritesActions.removeCurrentDocumentFromFavorites()}\" order=\"0\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>not_transient_user</filter-id>\n      <filter-id>canRemoveFromFavorites</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.favorites.actions/Contributions/org.nuxeo.ecm.favorites.actions--filters",
              "id": "org.nuxeo.ecm.favorites.actions--filters",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"canAddToFavorites\">\n      <rule grant=\"true\">\n        <condition>\n          #{favoritesActions.canCurrentDocumentBeAddedToFavorites()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canRemoveFromFavorites\">\n      <rule grant=\"true\">\n        <condition>\n          #{favoritesActions.canCurrentDocumentBeRemovedFromFavorites()}\n        </condition>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.favorites.actions",
          "name": "org.nuxeo.ecm.favorites.actions",
          "requirements": [
            "org.nuxeo.ecm.platform.actions"
          ],
          "resolutionOrder": 669,
          "services": [],
          "startOrder": 208,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.favorites.actions\">\n\n  <require>org.nuxeo.ecm.platform.actions</require>\n\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <!-- action id=\"Favorites\" link=\"/user_center_fragment.xhtml\" label=\"user.center.favorites\"\n      order=\"80\" icon=\"/icons/favorite_tab.png\"> <category>USER_CENTER</category> <properties>\n      <property name=\"alwaysDisplaySubTabs\">true</property> </properties> <filter-id>not_anonymous</filter-id>\n      </action> <action id=\"favoritesContent\" link=\"/incl/favorites_content_listing.xhtml\"\n      label=\"user.center.favorites\" order=\"0\"> <category>Favorites_sub_tab</category> <filter-id>not_readonly</filter-id>\n      </action -->\n\n    <action id=\"addToFavoritesAction\" order=\"0\" label=\"label.addToFavorites\"\n      link=\"#{favoritesActions.addCurrentDocumentToFavorites()}\" icon=\"/icons/pin.png\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>not_transient_user</filter-id>\n      <filter-id>canAddToFavorites</filter-id>\n    </action>\n\n    <action id=\"removeFromFavoritesAction\" order=\"0\"\n      label=\"label.removeFromFavorites\" link=\"#{favoritesActions.removeCurrentDocumentFromFavorites()}\"\n      icon=\"/icons/pinned.png\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>not_transient_user</filter-id>\n      <filter-id>canRemoveFromFavorites</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"canAddToFavorites\">\n      <rule grant=\"true\">\n        <condition>\n          #{favoritesActions.canCurrentDocumentBeAddedToFavorites()}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canRemoveFromFavorites\">\n      <rule grant=\"true\">\n        <condition>\n          #{favoritesActions.canCurrentDocumentBeRemovedFromFavorites()}\n        </condition>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/favorites-actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.summary/Contributions/org.nuxeo.ecm.collections.summary--widgettypes",
              "id": "org.nuxeo.ecm.collections.summary--widgettypes",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n    <widgetType name=\"summary_current_document_collections\">\n      <configuration>\n        <sinceVersion>5.9.3</sinceVersion>\n        <title>Collections</title>\n        <description>\n          <p>\n            This widget displays the collections the document is in.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/collections_widget_template.xhtml\n      </property>\n    </widgetType>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.summary/Contributions/org.nuxeo.ecm.collections.summary--widgets",
              "id": "org.nuxeo.ecm.collections.summary--widgets",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n    <widget name=\"summary_current_document_collections\" type=\"summary_current_document_collections\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.summary/Contributions/org.nuxeo.ecm.collections.summary--actions",
              "id": "org.nuxeo.ecm.collections.summary--actions",
              "registrationOrder": 35,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"summary_current_document_collections\" order=\"350\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_collections</property>\n      </properties>\n      <filter-id>hasCollection</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.summary/Contributions/org.nuxeo.ecm.collections.summary--filters",
              "id": "org.nuxeo.ecm.collections.summary--filters",
              "registrationOrder": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"hasCollection\">\n      <rule grant=\"true\">\n        <condition>\n          #{collectionActions.hasCurrentDocumentVisibleCollection()}\n        </condition>\n      </rule>\n    </filter>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base/org.nuxeo.ecm.collections.summary",
          "name": "org.nuxeo.ecm.collections.summary",
          "requirements": [
            "org.nuxeo.ecm.platform.forms.layouts.webapp.summary"
          ],
          "resolutionOrder": 683,
          "services": [],
          "startOrder": 106,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.collections.summary\">\n\n  <require>org.nuxeo.ecm.platform.forms.layouts.webapp.summary</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n    <widgetType name=\"summary_current_document_collections\">\n      <configuration>\n        <sinceVersion>5.9.3</sinceVersion>\n        <title>Collections</title>\n        <description>\n          <p>\n            This widget displays the collections the document is in.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/collections_widget_template.xhtml\n      </property>\n    </widgetType>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n    <widget name=\"summary_current_document_collections\" type=\"summary_current_document_collections\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n  </extension>\n\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"summary_current_document_collections\" type=\"widget\"\n      order=\"350\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_collections</property>\n      </properties>\n      <filter-id>hasCollection</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"hasCollection\">\n      <rule grant=\"true\">\n        <condition>\n          #{collectionActions.hasCurrentDocumentVisibleCollection()}\n        </condition>\n      </rule>\n    </filter>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/collection-layout-summary-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-webapp-base-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.base",
      "id": "org.nuxeo.ecm.webapp.base",
      "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: 2023.7.9-t20240205-104842\r\nRequire-Bundle: org.nuxeo.ecm.platform.ui,org.nuxeo.ecm.platform.types.a\r\n pi\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: web\r\nBundle-Localization: plugin\r\nBundle-Name: NuxeoWeb\r\nNuxeo-Component: OSGI-INF/nxtreemanager-framework.xml,OSGI-INF/nxtreeman\r\n ager-contrib.xml,OSGI-INF/actions-contrib.xml,OSGI-INF/restAPI-contrib.\r\n xml,OSGI-INF/directorytreemanager-framework.xml,OSGI-INF/documentslists\r\n -framework.xml,OSGI-INF/seamremotingjsbuilder-contrib.xml,OSGI-INF/sear\r\n ch-layouts-contrib.xml,OSGI-INF/widgets-contrib.xml,OSGI-INF/layouts-co\r\n ntrib.xml,OSGI-INF/layouts-listing-contrib.xml,OSGI-INF/layouttypes-con\r\n trib.xml,OSGI-INF/contentviews-contrib.xml,OSGI-INF/users-layouts-listi\r\n ng-contrib.xml,OSGI-INF/users-contentviews-contrib.xml,OSGI-INF/reload-\r\n seam-contrib.xml,OSGI-INF/chains-contrib.xml,OSGI-INF/bulkedit-service.\r\n xml,OSGI-INF/navtree-framework.xml,OSGI-INF/navtree-default-contrib.xml\r\n ,OSGI-INF/webresources-contrib.xml,OSGI-INF/webapp-base-properties.xml,\r\n OSGI-INF/thumbnail-contrib.xml,OSGI-INF/collection-actions-contrib.xml,\r\n OSGI-INF/collection-contentviews-contrib.xml,OSGI-INF/collection-theme-\r\n contrib.xml,OSGI-INF/collection-documentslists-contrib.xml,OSGI-INF/col\r\n lection-layout-listing-contrib.xml,OSGI-INF/collection-layout-summary-c\r\n ontrib.xml,OSGI-INF/favorites-actions-contrib.xml,OSGI-INF/favorites-co\r\n ntentviews-contrib.xml\r\nBundle-SymbolicName: org.nuxeo.ecm.webapp.base\r\n\r\n",
      "maxResolutionOrder": 683,
      "minResolutionOrder": 624,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.ui",
        "org.nuxeo.ecm.platform.types.api"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-lang",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.lang",
          "org.nuxeo.ecm.platform.lang.ext"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.lang",
        "id": "grp:org.nuxeo.ecm.platform.lang",
        "name": "org.nuxeo.ecm.platform.lang",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.lang",
      "components": [],
      "fileName": "nuxeo-platform-lang-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.lang/org.nuxeo.ecm.platform.lang",
      "id": "org.nuxeo.ecm.platform.lang",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240130-105049\r\nBundle-Name: Nuxeo ECM Language pack\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.lang\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: stateless,web\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-comment",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.comment",
          "org.nuxeo.ecm.platform.comment.api",
          "org.nuxeo.ecm.platform.comment.core",
          "org.nuxeo.ecm.platform.comment.restapi",
          "org.nuxeo.ecm.platform.comment.web",
          "org.nuxeo.ecm.platform.comment.workflow"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment",
        "id": "grp:org.nuxeo.ecm.platform.comment",
        "name": "org.nuxeo.ecm.platform.comment",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.comment",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.comment.service.CommentService",
          "declaredStartOrder": null,
          "documentation": "\n    This component gives the user the possibility to add comments to documents.\n  \n",
          "documentationHtml": "<p>\nThis component gives the user the possibility to add comments to documents.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.comment.service.CommentService",
              "descriptors": [
                "org.nuxeo.ecm.platform.comment.service.CommentServiceConfig"
              ],
              "documentation": "\n      This extension can be used to configure the Comment Service\n    \n",
              "documentationHtml": "<p>\nThis extension can be used to configure the Comment Service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.CommentService/ExtensionPoints/org.nuxeo.ecm.platform.comment.service.CommentService--config",
              "id": "org.nuxeo.ecm.platform.comment.service.CommentService--config",
              "label": "config (org.nuxeo.ecm.platform.comment.service.CommentService)",
              "name": "config",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.CommentService",
          "name": "org.nuxeo.ecm.platform.comment.service.CommentService",
          "requirements": [],
          "resolutionOrder": 311,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.comment.service.CommentService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.CommentService/Services/org.nuxeo.ecm.platform.comment.api.CommentManager",
              "id": "org.nuxeo.ecm.platform.comment.api.CommentManager",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.comment.service.CommentService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.CommentService/Services/org.nuxeo.ecm.platform.comment.service.CommentService",
              "id": "org.nuxeo.ecm.platform.comment.service.CommentService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 842,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.service.CommentService\">\n  <documentation>\n    This component gives the user the possibility to add comments to documents.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.comment.service.CommentService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.comment.api.CommentManager\" />\n    <provide interface=\"org.nuxeo.ecm.platform.comment.service.CommentService\" />\n  </service>\n\n  <extension-point name=\"config\">\n    <documentation>\n      This extension can be used to configure the Comment Service\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.comment.service.CommentServiceConfig\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/CommentService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.lifecycle/Contributions/org.nuxeo.ecm.platform.comment.lifecycle--lifecycle",
              "id": "org.nuxeo.ecm.platform.comment.lifecycle--lifecycle",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"lifecycle\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n    <lifecycle defaultInitial=\"moderation_pending\" name=\"comment_moderation\">\n\n      <transitions>\n        <transition destinationState=\"moderation_published\" name=\"moderation_publish\">\n          <description>Approve the comment</description>\n        </transition>\n        <transition destinationState=\"moderation_rejected\" name=\"moderation_reject\">\n          <description>Reject the comment</description>\n        </transition>\n      </transitions>\n      <states>\n        <state description=\"Default state\" name=\"moderation_pending\">\n          <transitions>\n            <transition>moderation_publish</transition>\n            <transition>moderation_reject</transition>\n          </transitions>\n        </state>\n        <state description=\"Comment published\" name=\"moderation_published\"/>\n        <state description=\"Comment Rejected\" name=\"moderation_rejected\"/>\n      </states>\n\n    </lifecycle>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.lifecycle/Contributions/org.nuxeo.ecm.platform.comment.lifecycle--types",
              "id": "org.nuxeo.ecm.platform.comment.lifecycle--types",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"Comment\">comment_moderation</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.lifecycle",
          "name": "org.nuxeo.ecm.platform.comment.lifecycle",
          "requirements": [],
          "resolutionOrder": 312,
          "services": [],
          "startOrder": 287,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.lifecycle\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n      point=\"lifecycle\">\n\n    <lifecycle name=\"comment_moderation\" defaultInitial=\"moderation_pending\">\n\n      <transitions>\n        <transition name=\"moderation_publish\" destinationState=\"moderation_published\">\n          <description>Approve the comment</description>\n        </transition>\n        <transition name=\"moderation_reject\" destinationState=\"moderation_rejected\">\n          <description>Reject the comment</description>\n        </transition>\n      </transitions>\n      <states>\n        <state name=\"moderation_pending\" description=\"Default state\">\n          <transitions>\n            <transition>moderation_publish</transition>\n            <transition>moderation_reject</transition>\n          </transitions>\n        </state>\n        <state name=\"moderation_published\" description=\"Comment published\"/>\n        <state name=\"moderation_rejected\" description=\"Comment Rejected\"/>\n      </states>\n\n    </lifecycle>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n      point=\"types\">\n    <types>\n      <type name=\"Comment\">comment_moderation</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-life-cycle-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.coreTypes/Contributions/org.nuxeo.ecm.platform.comment.coreTypes--schema",
              "id": "org.nuxeo.ecm.platform.comment.coreTypes--schema",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"comment\" prefix=\"comment\" src=\"schema/comment.xsd\"/>\n    <schema name=\"annotation\" prefix=\"annotation\" src=\"schema/annotation.xsd\"/>\n    <schema name=\"externalEntity\" prefix=\"externalEntity\" src=\"schema/externalEntity.xsd\"/>\n\n    <property indexOrder=\"ascending\" name=\"xpath\" schema=\"annotation\"/>\n    <!-- TODO remove it when PropertyCommentManager will be removed -->\n    <property indexOrder=\"ascending\" name=\"parentId\" schema=\"comment\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.coreTypes/Contributions/org.nuxeo.ecm.platform.comment.coreTypes--doctype",
              "id": "org.nuxeo.ecm.platform.comment.coreTypes--doctype",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"ExternalEntity\">\n      <schema name=\"externalEntity\"/>\n    </facet>\n\n    <doctype extends=\"Folder\" name=\"CommentRoot\" special=\"true\">\n      <facet name=\"HiddenInNavigation\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <subtypes>\n        <type>Folder</type>\n        <type>HiddenFolder</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"Comment\">\n      <schema name=\"comment\"/>\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"HiddenInNavigation\"/>\n      <prefetch>\n        dc:title, dc:modified, comment.author, comment.text,\n        comment.creationDate\n      </prefetch>\n    </doctype>\n\n    <doctype append=\"true\" name=\"Domain\">\n      <subtypes>\n        <type>CommentRoot</type>\n      </subtypes>\n    </doctype>\n\n    <doctype extends=\"Comment\" name=\"Annotation\">\n      <schema name=\"annotation\"/>\n    </doctype>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.coreTypes/Contributions/org.nuxeo.ecm.platform.comment.coreTypes--types",
              "id": "org.nuxeo.ecm.platform.comment.coreTypes--types",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"CommentRoot\">default</type>\n    </types>\n    <types>\n      <type name=\"HiddenFolder\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.coreTypes",
          "name": "org.nuxeo.ecm.platform.comment.coreTypes",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 313,
          "services": [],
          "startOrder": 285,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.coreTypes\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"comment\" prefix=\"comment\" src=\"schema/comment.xsd\" />\n    <schema name=\"annotation\" src=\"schema/annotation.xsd\" prefix=\"annotation\"/>\n    <schema name=\"externalEntity\" src=\"schema/externalEntity.xsd\" prefix=\"externalEntity\" />\n\n    <property schema=\"annotation\" name=\"xpath\" indexOrder=\"ascending\" />\n    <!-- TODO remove it when PropertyCommentManager will be removed -->\n    <property schema=\"comment\" name=\"parentId\" indexOrder=\"ascending\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <facet name=\"ExternalEntity\">\n      <schema name=\"externalEntity\" />\n    </facet>\n\n    <doctype name=\"CommentRoot\" extends=\"Folder\" special=\"true\">\n      <facet name=\"HiddenInNavigation\" />\n      <facet name=\"HiddenInCreation\" />\n      <subtypes>\n        <type>Folder</type>\n        <type>HiddenFolder</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Comment\" extends=\"Document\">\n      <schema name=\"comment\" />\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <facet name=\"HiddenInNavigation\" />\n      <prefetch>\n        dc:title, dc:modified, comment.author, comment.text,\n        comment.creationDate\n      </prefetch>\n    </doctype>\n\n    <doctype name=\"Domain\" append=\"true\">\n      <subtypes>\n        <type>CommentRoot</type>\n      </subtypes>\n    </doctype>\n\n    <doctype name=\"Annotation\" extends=\"Comment\">\n      <schema name=\"annotation\"/>\n    </doctype>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"types\">\n    <types>\n      <type name=\"CommentRoot\">default</type>\n    </types>\n    <types>\n      <type name=\"HiddenFolder\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-schemas-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    This component defines the relation-related config for comments.\n  \n",
          "documentationHtml": "<p>\nThis component defines the relation-related config for comments.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.comment.service.CommentService--config",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.RelationContrib/Contributions/org.nuxeo.ecm.platform.comment.service.RelationContrib--config",
              "id": "org.nuxeo.ecm.platform.comment.service.RelationContrib--config",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.comment.service.CommentService",
                "name": "org.nuxeo.ecm.platform.comment.service.CommentService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"config\" target=\"org.nuxeo.ecm.platform.comment.service.CommentService\">\n    <config>\n      <converterClass>\n        org.nuxeo.ecm.platform.comment.impl.CommentConverterImpl\n      </converterClass>\n      <graphName>documentComments</graphName>\n      <!-- XXX AT: these namespaces should have an ending slash -->\n      <commentNamespace>http://www.nuxeo.org/comments/uid</commentNamespace>\n      <documentNamespace>http://www.nuxeo.org/document/uid</documentNamespace>\n      <predicateNamespace>\n        http://www.nuxeo.org/predicates/isCommentFor\n      </predicateNamespace>\n    </config>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.relations.services.RelationService--resourceadapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.RelationContrib/Contributions/org.nuxeo.ecm.platform.comment.service.RelationContrib--resourceadapters",
              "id": "org.nuxeo.ecm.platform.comment.service.RelationContrib--resourceadapters",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.relations.services.RelationService",
                "name": "org.nuxeo.ecm.platform.relations.services.RelationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resourceadapters\" target=\"org.nuxeo.ecm.platform.relations.services.RelationService\">\n    <!-- XXX AT: this namespace should have an ending slash -->\n    <adapter class=\"org.nuxeo.ecm.platform.relations.adapters.DocumentModelResourceAdapter\" namespace=\"http://www.nuxeo.org/comments/uid\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.RelationContrib/Contributions/org.nuxeo.ecm.platform.comment.service.RelationContrib--doctype",
              "id": "org.nuxeo.ecm.platform.comment.service.RelationContrib--doctype",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <doctype extends=\"Relation\" name=\"CommentRelation\">\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.RelationContrib",
          "name": "org.nuxeo.ecm.platform.comment.service.RelationContrib",
          "requirements": [],
          "resolutionOrder": 314,
          "services": [],
          "startOrder": 289,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.service.RelationContrib\">\n\n  <documentation>\n    This component defines the relation-related config for comments.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.comment.service.CommentService\"\n    point=\"config\">\n    <config>\n      <converterClass>\n        org.nuxeo.ecm.platform.comment.impl.CommentConverterImpl\n      </converterClass>\n      <graphName>documentComments</graphName>\n      <!-- XXX AT: these namespaces should have an ending slash -->\n      <commentNamespace>http://www.nuxeo.org/comments/uid</commentNamespace>\n      <documentNamespace>http://www.nuxeo.org/document/uid</documentNamespace>\n      <predicateNamespace>\n        http://www.nuxeo.org/predicates/isCommentFor\n      </predicateNamespace>\n    </config>\n  </extension>\n\n  <!-- relation adapters -->\n  <extension target=\"org.nuxeo.ecm.platform.relations.services.RelationService\"\n    point=\"resourceadapters\">\n    <!-- XXX AT: this namespace should have an ending slash -->\n    <adapter namespace=\"http://www.nuxeo.org/comments/uid\"\n      class=\"org.nuxeo.ecm.platform.relations.adapters.DocumentModelResourceAdapter\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n    <doctype name=\"CommentRelation\" extends=\"Relation\">\n      <facet name=\"HiddenInNavigation\" />\n    </doctype>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-relation-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.listener/Contributions/org.nuxeo.ecm.platform.comment.service.listener--listener",
              "id": "org.nuxeo.ecm.platform.comment.service.listener--listener",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.comment.listener.CommentRemovedEventListener\" name=\"commentListener\" postCommit=\"false\">\n      <event>documentRemoved</event>\n    </listener>\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.comment.listener.DocumentRemovedCommentEventListener\" name=\"docRemovedCommentListener\" postCommit=\"true\">\n      <event>documentRemoved</event>\n    </listener>\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.comment.listener.CheckedInCommentListener\" name=\"checkedInCommentListener\" postCommit=\"true\">\n      <event>documentCheckedIn</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.listener",
          "name": "org.nuxeo.ecm.platform.comment.service.listener",
          "requirements": [],
          "resolutionOrder": 315,
          "services": [],
          "startOrder": 291,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.service.listener\"\n  version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <listener name=\"commentListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.comment.listener.CommentRemovedEventListener\">\n      <event>documentRemoved</event>\n    </listener>\n\n    <listener name=\"docRemovedCommentListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.platform.comment.listener.DocumentRemovedCommentEventListener\">\n      <event>documentRemoved</event>\n    </listener>\n\n    <listener name=\"checkedInCommentListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.platform.comment.listener.CheckedInCommentListener\">\n      <event>documentCheckedIn</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    The TreeCommentManager handles subscription to comment events on documents based on this parameter.\n    If true, document author will be subscribed to comment notifications on his document on the first comment.\n    The comment author will also be subscribed to comment notifications if it is his first comment on the document.\n\n    @author Nour AL KOTOB (nalkotob@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe TreeCommentManager handles subscription to comment events on documents based on this parameter.\nIf true, document author will be subscribed to comment notifications on his document on the first comment.\nThe comment author will also be subscribed to comment notifications if it is his first comment on the document.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notificationListenerHook",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.notification/Contributions/org.nuxeo.ecm.platform.comment.service.notification--notificationListenerHook",
              "id": "org.nuxeo.ecm.platform.comment.service.notification--notificationListenerHook",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"notificationListenerHook\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n    <hookListener class=\"org.nuxeo.ecm.platform.comment.listener.CommentNotificationListener\" name=\"commentNotification\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notifications",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.notification/Contributions/org.nuxeo.ecm.platform.comment.service.notification--notifications",
              "id": "org.nuxeo.ecm.platform.comment.service.notification--notifications",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"notifications\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n\n    <notification autoSubscribed=\"false\" availableIn=\"*\" channel=\"email\" enabled=\"true\" label=\"notifications.name.CommentAdded\" name=\"CommentAdded\" subject=\"New comment on '${docTitle}'\" template=\"commentAdded\">\n      <event name=\"commentAdded\"/>\n    </notification>\n\n    <notification autoSubscribed=\"false\" availableIn=\"*\" channel=\"email\" enabled=\"true\" label=\"notifications.name.Modification\" name=\"CommentUpdated\" subject=\"Updated comment on '${docTitle}'\" template=\"commentUpdated\">\n      <event name=\"commentUpdated\"/>\n    </notification>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--templates",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.notification/Contributions/org.nuxeo.ecm.platform.comment.service.notification--templates",
              "id": "org.nuxeo.ecm.platform.comment.service.notification--templates",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"templates\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n    <template name=\"baseComment\" src=\"templates/baseComment.ftl\"/>\n    <template name=\"commentAdded\" src=\"templates/commentAdded.ftl\"/>\n    <template name=\"commentUpdated\" src=\"templates/commentUpdated.ftl\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notificationListenerVeto",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.notification/Contributions/org.nuxeo.ecm.platform.comment.service.notification--notificationListenerVeto",
              "id": "org.nuxeo.ecm.platform.comment.service.notification--notificationListenerVeto",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"notificationListenerVeto\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n    <veto class=\"org.nuxeo.ecm.platform.comment.notification.CommentNotificationVeto\" name=\"CommentNotificationVeto\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.notification/Contributions/org.nuxeo.ecm.platform.comment.service.notification--configuration",
              "id": "org.nuxeo.ecm.platform.comment.service.notification--configuration",
              "registrationOrder": 32,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <property name=\"org.nuxeo.ecm.platform.comment.service.notification.autosubscribe\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.notification",
          "name": "org.nuxeo.ecm.platform.comment.service.notification",
          "requirements": [],
          "resolutionOrder": 316,
          "services": [],
          "startOrder": 293,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.service.notification\">\n\n  <extension\n          target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n          point=\"notificationListenerHook\">\n    <hookListener name=\"commentNotification\"\n                  class=\"org.nuxeo.ecm.platform.comment.listener.CommentNotificationListener\" />\n  </extension>\n\n  <extension\n          target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n          point=\"notifications\">\n\n    <notification name=\"CommentAdded\" channel=\"email\" enabled=\"true\" availableIn=\"*\"\n                  subject=\"New comment on '${docTitle}'\"\n                  autoSubscribed=\"false\" template=\"commentAdded\" label=\"notifications.name.CommentAdded\">\n      <event name=\"commentAdded\" />\n    </notification>\n\n    <notification name=\"CommentUpdated\" channel=\"email\" enabled=\"true\" availableIn=\"*\"\n                  subject=\"Updated comment on '${docTitle}'\"\n                  autoSubscribed=\"false\" template=\"commentUpdated\" label=\"notifications.name.Modification\">\n      <event name=\"commentUpdated\" />\n    </notification>\n\n  </extension>\n\n  <extension\n          target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n          point=\"templates\">\n    <template name=\"baseComment\" src=\"templates/baseComment.ftl\" />\n    <template name=\"commentAdded\" src=\"templates/commentAdded.ftl\" />\n    <template name=\"commentUpdated\" src=\"templates/commentUpdated.ftl\" />\n  </extension>\n\n  <extension\n          target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n          point=\"notificationListenerVeto\">\n    <veto name=\"CommentNotificationVeto\" class=\"org.nuxeo.ecm.platform.comment.notification.CommentNotificationVeto\" />\n  </extension>\n\n  <documentation>\n    The TreeCommentManager handles subscription to comment events on documents based on this parameter.\n    If true, document author will be subscribed to comment notifications on his document on the first comment.\n    The comment author will also be subscribed to comment notifications if it is his first comment on the document.\n\n    @author Nour AL KOTOB (nalkotob@nuxeo.com)\n  </documentation>\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <property name=\"org.nuxeo.ecm.platform.comment.service.notification.autosubscribe\">true</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-notification-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.comment.pageprovider/Contributions/org.nuxeo.ecm.comment.pageprovider--providers",
              "id": "org.nuxeo.ecm.comment.pageprovider--providers",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <!-- deprecated since 11.1 -->\n    <!-- TreeCommentManager & PropertyCommentManager use it to provide backward compatibility on external entity API -->\n    <coreQueryPageProvider name=\"GET_COMMENT_AS_EXTERNAL_ENTITY\">\n      <pattern>\n        SELECT * FROM Comment WHERE ecm:path STARTSWITH '/' AND externalEntity:entityId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- deprecated since 11.1 / PropertyCommentManager uses it -->\n    <coreQueryPageProvider name=\"GET_COMMENTS_FOR_DOCUMENT\">\n      <pattern>\n        SELECT * FROM Comment WHERE comment:parentId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- deprecated since 11.1 / unused -->\n    <coreQueryPageProvider name=\"GET_ANNOTATION_AS_EXTERNAL_ENTITY\">\n      <pattern>\n        SELECT * FROM Annotation WHERE ecm:path STARTSWITH '/' AND externalEntity:entityId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- deprecated since 11.1 / AnnotationService uses it when PropertyCommentManager is in place-->\n    <coreQueryPageProvider name=\"GET_ANNOTATIONS_FOR_DOCUMENT\">\n      <pattern>\n        SELECT * FROM Annotation WHERE comment:parentId = ? AND annotation:xpath = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- deprecated since 11.1 / PropertyCommentManager uses it -->\n    <coreQueryPageProvider name=\"GET_EXTERNAL_COMMENT_BY_COMMENT_ANCESTOR\">\n      <pattern>\n        SELECT * FROM Comment WHERE comment:ancestorIds = ? AND externalEntity:entityId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- used by TreeCommentManager -->\n    <coreQueryPageProvider name=\"GET_COMMENTS_FOR_DOCUMENT_BY_ECM_PARENT\">\n      <pattern>\n        SELECT * FROM Comment WHERE ecm:parentId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- used by TreeCommentManager -->\n    <coreQueryPageProvider name=\"GET_EXTERNAL_COMMENT_BY_ECM_ANCESTOR\">\n      <pattern>\n        SELECT * FROM Comment WHERE ecm:ancestorId = ? AND externalEntity:entityId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- used by PropertyCommentManager & TreeCommentManager -->\n    <!-- currently not possible to do a ecm:ancestorId IN (..) -->\n    <coreQueryPageProvider name=\"GET_COMMENTS_FOR_DOCUMENTS_BY_COMMENT_ANCESTOR\">\n      <pattern>\n        SELECT * FROM Comment WHERE comment:ancestorIds IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- AnnotationService uses it when TreeCommentManager is in place-->\n    <coreQueryPageProvider name=\"GET_ANNOTATIONS_FOR_DOCUMENT_BY_ECM_PARENT\">\n      <pattern>\n        SELECT * FROM Annotation WHERE ecm:parentId = ? AND annotation:xpath = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.comment.pageprovider",
          "name": "org.nuxeo.ecm.comment.pageprovider",
          "requirements": [],
          "resolutionOrder": 317,
          "services": [],
          "startOrder": 110,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.comment.pageprovider\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n\n    <!-- deprecated since 11.1 -->\n    <!-- TreeCommentManager & PropertyCommentManager use it to provide backward compatibility on external entity API -->\n    <coreQueryPageProvider name=\"GET_COMMENT_AS_EXTERNAL_ENTITY\">\n      <pattern>\n        SELECT * FROM Comment WHERE ecm:path STARTSWITH '/' AND externalEntity:entityId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- deprecated since 11.1 / PropertyCommentManager uses it -->\n    <coreQueryPageProvider name=\"GET_COMMENTS_FOR_DOCUMENT\">\n      <pattern>\n        SELECT * FROM Comment WHERE comment:parentId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- deprecated since 11.1 / unused -->\n    <coreQueryPageProvider name=\"GET_ANNOTATION_AS_EXTERNAL_ENTITY\">\n      <pattern>\n        SELECT * FROM Annotation WHERE ecm:path STARTSWITH '/' AND externalEntity:entityId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- deprecated since 11.1 / AnnotationService uses it when PropertyCommentManager is in place-->\n    <coreQueryPageProvider name=\"GET_ANNOTATIONS_FOR_DOCUMENT\">\n      <pattern>\n        SELECT * FROM Annotation WHERE comment:parentId = ? AND annotation:xpath = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- deprecated since 11.1 / PropertyCommentManager uses it -->\n    <coreQueryPageProvider name=\"GET_EXTERNAL_COMMENT_BY_COMMENT_ANCESTOR\">\n      <pattern>\n        SELECT * FROM Comment WHERE comment:ancestorIds = ? AND externalEntity:entityId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- used by TreeCommentManager -->\n    <coreQueryPageProvider name=\"GET_COMMENTS_FOR_DOCUMENT_BY_ECM_PARENT\">\n      <pattern>\n        SELECT * FROM Comment WHERE ecm:parentId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- used by TreeCommentManager -->\n    <coreQueryPageProvider name=\"GET_EXTERNAL_COMMENT_BY_ECM_ANCESTOR\">\n      <pattern>\n        SELECT * FROM Comment WHERE ecm:ancestorId = ? AND externalEntity:entityId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- used by PropertyCommentManager & TreeCommentManager -->\n    <!-- currently not possible to do a ecm:ancestorId IN (..) -->\n    <coreQueryPageProvider name=\"GET_COMMENTS_FOR_DOCUMENTS_BY_COMMENT_ANCESTOR\">\n      <pattern>\n        SELECT * FROM Comment WHERE comment:ancestorIds IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <!-- AnnotationService uses it when TreeCommentManager is in place-->\n    <coreQueryPageProvider name=\"GET_ANNOTATIONS_FOR_DOCUMENT_BY_ECM_PARENT\">\n      <pattern>\n        SELECT * FROM Annotation WHERE ecm:parentId = ? AND annotation:xpath = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.marshaller/Contributions/org.nuxeo.ecm.platform.comment.service.marshaller--marshallers",
              "id": "org.nuxeo.ecm.platform.comment.service.marshaller--marshallers",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.CommentJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.CommentJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.CommentListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.CommentListJsonReader\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.service.marshaller",
          "name": "org.nuxeo.ecm.platform.comment.service.marshaller",
          "requirements": [],
          "resolutionOrder": 318,
          "services": [],
          "startOrder": 292,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.service.marshaller\">\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.CommentJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.CommentJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.CommentListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.CommentListJsonReader\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-marshaller-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.migration.MigrationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.manager.migrator/Contributions/org.nuxeo.ecm.platform.comment.manager.migrator--configuration",
              "id": "org.nuxeo.ecm.platform.comment.manager.migrator--configuration",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.migration.MigrationService",
                "name": "org.nuxeo.runtime.migration.MigrationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.migration.MigrationService\">\n\n    <migration id=\"comment-storage\">\n      <description label=\"migration.comment-storage\">Migration of the comment storage model</description>\n      <class>org.nuxeo.ecm.platform.comment.impl.CommentsMigrator</class>\n      <defaultState>secured</defaultState>\n      <state id=\"relation\">\n        <description label=\"migration.comment-storage.relation\">Comments stored as relations</description>\n      </state>\n      <state id=\"property\">\n        <description label=\"migration.comment-storage.property\">Comments stored with their parent id as property\n        </description>\n      </state>\n      <state id=\"secured\">\n        <description label=\"migration.comment-storage.secured\">Comments stored under the commented document\n        </description>\n      </state>\n\n      <step fromState=\"relation\" id=\"relation-to-property\" toState=\"property\">\n        <description label=\"migration.comment-storage.relation-to-property\">Migrate comments from relations to the\n          parent id property usage\n        </description>\n      </step>\n      <step fromState=\"property\" id=\"property-to-secured\" toState=\"secured\">\n        <description label=\"migration.comment-storage.property-to-secured\">Migrate comments under the commented document\n        </description>\n      </step>\n    </migration>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.manager.migrator",
          "name": "org.nuxeo.ecm.platform.comment.manager.migrator",
          "requirements": [],
          "resolutionOrder": 319,
          "services": [],
          "startOrder": 288,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.manager.migrator\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.runtime.migration.MigrationService\" point=\"configuration\">\n\n    <migration id=\"comment-storage\">\n      <description label=\"migration.comment-storage\">Migration of the comment storage model</description>\n      <class>org.nuxeo.ecm.platform.comment.impl.CommentsMigrator</class>\n      <defaultState>secured</defaultState>\n      <state id=\"relation\">\n        <description label=\"migration.comment-storage.relation\">Comments stored as relations</description>\n      </state>\n      <state id=\"property\">\n        <description label=\"migration.comment-storage.property\">Comments stored with their parent id as property\n        </description>\n      </state>\n      <state id=\"secured\">\n        <description label=\"migration.comment-storage.secured\">Comments stored under the commented document\n        </description>\n      </state>\n\n      <step id=\"relation-to-property\" fromState=\"relation\" toState=\"property\">\n        <description label=\"migration.comment-storage.relation-to-property\">Migrate comments from relations to the\n          parent id property usage\n        </description>\n      </step>\n      <step id=\"property-to-secured\" fromState=\"property\" toState=\"secured\">\n        <description label=\"migration.comment-storage.property-to-secured\">Migrate comments under the commented document\n        </description>\n      </step>\n    </migration>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-migration.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.comment.impl.AnnotationServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The Annotation Service allows to manage annotations on documents.\n  \n",
          "documentationHtml": "<p>\nThe Annotation Service allows to manage annotations on documents.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.api.AnnotationService",
          "name": "org.nuxeo.ecm.platform.comment.api.AnnotationService",
          "requirements": [],
          "resolutionOrder": 320,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.comment.api.AnnotationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.api.AnnotationService/Services/org.nuxeo.ecm.platform.comment.api.AnnotationService",
              "id": "org.nuxeo.ecm.platform.comment.api.AnnotationService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 841,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.api.AnnotationService\">\n\n  <documentation>\n    The Annotation Service allows to manage annotations on documents.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.comment.impl.AnnotationServiceImpl\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.comment.api.AnnotationService\"/>\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/annotation-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.annotation.marshaller/Contributions/org.nuxeo.ecm.annotation.marshaller--marshallers",
              "id": "org.nuxeo.ecm.annotation.marshaller--marshallers",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.AnnotationJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.AnnotationJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.AnnotationListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.AnnotationListJsonReader\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.annotation.marshaller",
          "name": "org.nuxeo.ecm.annotation.marshaller",
          "requirements": [],
          "resolutionOrder": 321,
          "services": [],
          "startOrder": 83,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.annotation.marshaller\">\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.AnnotationJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.AnnotationJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.AnnotationListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.comment.impl.AnnotationListJsonReader\" enable=\"true\"/>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/annotation-marshaller-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.defaultPermissions/Contributions/org.nuxeo.ecm.platform.comment.defaultPermissions--permissions",
              "id": "org.nuxeo.ecm.platform.comment.defaultPermissions--permissions",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"permissions\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <permission name=\"Comment\">\n      <include>WriteLifeCycle</include>\n    </permission>\n\n    <permission name=\"Moderate\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService--factoryBinding",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.defaultPermissions/Contributions/org.nuxeo.ecm.platform.comment.defaultPermissions--factoryBinding",
              "id": "org.nuxeo.ecm.platform.comment.defaultPermissions--factoryBinding",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "name": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"factoryBinding\" target=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\">\n    <factoryBinding factoryName=\"SimpleTemplateFactory\" name=\"CommentRootFactory\" targetType=\"CommentRoot\">\n      <acl>\n        <ace granted=\"true\" permission=\"AddChildren\" principal=\"members\"/>\n        <ace granted=\"true\" permission=\"RemoveChildren\" principal=\"members\"/>\n      </acl>\n     </factoryBinding>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.defaultPermissions",
          "name": "org.nuxeo.ecm.platform.comment.defaultPermissions",
          "requirements": [
            "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib",
            "org.nuxeo.ecm.core.security.defaultPermissions"
          ],
          "resolutionOrder": 334,
          "services": [],
          "startOrder": 286,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.defaultPermissions\">\n\n  <require>org.nuxeo.ecm.core.security.defaultPermissions</require>\n  <require>org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib</require>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissions\">\n\n    <permission name=\"Comment\">\n      <include>WriteLifeCycle</include>\n    </permission>\n\n    <permission name=\"Moderate\" />\n\n  </extension>\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\"\n      point=\"factoryBinding\">\n    <factoryBinding name=\"CommentRootFactory\" factoryName=\"SimpleTemplateFactory\"\n                     targetType=\"CommentRoot\">\n      <acl>\n        <ace granted=\"true\" permission=\"AddChildren\" principal=\"members\"/>\n        <ace granted=\"true\" permission=\"RemoveChildren\" principal=\"members\"/>\n      </acl>\n     </factoryBinding>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-defaultPermissions-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-comment-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment",
      "id": "org.nuxeo.ecm.platform.comment",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.comment.ejb,org.nuxeo.ecm.platfor\r\n m.comment.impl,org.nuxeo.ecm.platform.comment.listener,org.nuxeo.ecm.pl\r\n atform.comment.service\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: web,stateful\r\nBundle-Name: Nuxeo Comment project\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: true\r\nNuxeo-Component: OSGI-INF/CommentService.xml, OSGI-INF/comment-defaultPe\r\n rmissions-contrib.xml, OSGI-INF/comment-life-cycle-contrib.xml, OSGI-IN\r\n F/comment-schemas-contrib.xml, OSGI-INF/comment-relation-contrib.xml, O\r\n SGI-INF/comment-listener-contrib.xml, OSGI-INF/comment-notification-con\r\n trib.xml, OSGI-INF/comment-pageprovider-contrib.xml, OSGI-INF/comment-m\r\n arshaller-contrib.xml, OSGI-INF/comment-migration.xml, OSGI-INF/annotat\r\n ion-service.xml, OSGI-INF/annotation-marshaller-contrib.xml\r\nImport-Package: javax.annotation;version=\"1.0\",javax.ejb,javax.security.\r\n auth.login,org.apache.commons.logging,org.nuxeo.common.utils,org.nuxeo.\r\n common.xmap.annotation,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.\r\n api;api=split,org.nuxeo.ecm.core.api.event,org.nuxeo.ecm.core.api.model\r\n ,org.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.core.api.security,org.\r\n nuxeo.ecm.core.api.security.impl,org.nuxeo.ecm.core.event,org.nuxeo.ecm\r\n .core.event.impl,org.nuxeo.ecm.core.schema,org.nuxeo.ecm.core.schema.ty\r\n pes,org.nuxeo.ecm.directory;api=split,org.nuxeo.ecm.platform.comment.ap\r\n i,org.nuxeo.ecm.platform.comment.workflow.services,org.nuxeo.ecm.platfo\r\n rm.relations.api,org.nuxeo.ecm.platform.relations.api.impl,org.nuxeo.ec\r\n m.platform.usermanager,org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxe\r\n o.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.comment;singleton=true\r\n\r\n",
      "maxResolutionOrder": 334,
      "minResolutionOrder": 311,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-forms-layout-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.forms.layout.api",
          "org.nuxeo.ecm.platform.forms.layout.client",
          "org.nuxeo.ecm.platform.forms.layout.core",
          "org.nuxeo.ecm.platform.forms.layout.export",
          "org.nuxeo.ecm.platform.forms.layout.io",
          "org.nuxeo.ecm.platform.forms.layout.io.plugins"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout",
        "id": "grp:org.nuxeo.ecm.platform.forms.layout",
        "name": "org.nuxeo.ecm.platform.forms.layout",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.forms.layout.api",
      "components": [],
      "fileName": "nuxeo-platform-forms-layout-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.api",
      "id": "org.nuxeo.ecm.platform.forms.layout.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.forms.layout.api,org.nuxeo.ecm.pl\r\n atform.forms.layout.api.exceptions,org.nuxeo.ecm.platform.forms.layout.\r\n api.impl,org.nuxeo.ecm.platform.forms.layout.api.service,org.nuxeo.ecm.\r\n platform.forms.layout.api.service.ejb\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo ECM Forms Layout API Fragment\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.forms.layout.api;singleton:=\r\n true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-io-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.io.api",
          "org.nuxeo.ecm.platform.io.core",
          "org.nuxeo.ecm.platform.io.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io",
        "id": "grp:org.nuxeo.ecm.platform.io",
        "name": "org.nuxeo.ecm.platform.io",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.io.api",
      "components": [],
      "fileName": "nuxeo-platform-io-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io/org.nuxeo.ecm.platform.io.api",
      "id": "org.nuxeo.ecm.platform.io.api",
      "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: 1\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nBundle-Name: Nuxeo Platform IO API Fragment\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.io.api;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: runtime\r\nExport-Package: org.nuxeo.ecm.platform.io.api\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nImport-Package: org.apache.commons.logging,org.nuxeo.ecm.core.api,org.nu\r\n xeo.ecm.core.api.impl,org.nuxeo.ecm.core.io,org.nuxeo.ecm.core.io.excep\r\n tions,org.nuxeo.runtime.api\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-drive-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.drive.core",
          "org.nuxeo.drive.elasticsearch",
          "org.nuxeo.drive.mongodb",
          "org.nuxeo.drive.operations",
          "org.nuxeo.drive.rest.api"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive",
        "id": "grp:org.nuxeo.drive",
        "name": "org.nuxeo.drive",
        "parentIds": [
          "grp:org.nuxeo.ecm"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Drive Server\n\nAddon needed for [Nuxeo Drive](https://github.com/nuxeo/nuxeo-drive) to work against a Nuxeo Platform instance.\n\n# Building\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Drive Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-drive).\nOr manually copy the built artifacts into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\nYou should then have the 'Nuxeo Drive' tab in your Home allowing you to download the Nuxeo Drive client for your favorite OS :-)\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "306b3963ae3cd8b8df650083c958429f",
            "encoding": "UTF-8",
            "length": 1224,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.drive.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl",
          "declaredStartOrder": 96,
          "documentation": "\n    The NuxeoDriveManager provides simple API to manage the\n    list of folderish documents to be used as synchronization root with a\n    local filesystem folder of the Desktop computer of a user.\n  \n",
          "documentationHtml": "<p>\nThe NuxeoDriveManager provides simple API to manage the\nlist of folderish documents to be used as synchronization root with a\nlocal filesystem folder of the Desktop computer of a user.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl",
              "descriptors": [
                "org.nuxeo.drive.service.impl.ChangeFinderDescriptor"
              ],
              "documentation": "\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n      @since 7.3\n\n      This extension point lets you contribute the change finder used by the NuxeoDriveManager.\n\n      Example of the AuditChangeFinder:\n      <code>\n    <extension point=\"changeFinder\" target=\"org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl\">\n        <changeFinder class=\"org.nuxeo.drive.service.impl.AuditChangeFinder\"/>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\n&#64;since 7.3\n</p><p>\nThis extension point lets you contribute the change finder used by the NuxeoDriveManager.\n</p><p>\nExample of the AuditChangeFinder:\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;changeFinder&#34; target&#61;&#34;org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl&#34;&gt;\n        &lt;changeFinder class&#61;&#34;org.nuxeo.drive.service.impl.AuditChangeFinder&#34;/&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl/ExtensionPoints/org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl--changeFinder",
              "id": "org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl--changeFinder",
              "label": "changeFinder (org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl)",
              "name": "changeFinder",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl",
          "name": "org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl",
          "requirements": [
            "org.nuxeo.ecm.core.cache.CacheService"
          ],
          "resolutionOrder": 184,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl/Services/org.nuxeo.drive.service.NuxeoDriveManager",
              "id": "org.nuxeo.drive.service.NuxeoDriveManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 768,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl\"\n  version=\"1.0\">\n  <require>org.nuxeo.ecm.core.cache.CacheService</require>\n  <implementation class=\"org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.drive.service.NuxeoDriveManager\" />\n  </service>\n\n  <documentation>\n    The NuxeoDriveManager provides simple API to manage the\n    list of folderish documents to be used as synchronization root with a\n    local filesystem folder of the Desktop computer of a user.\n  </documentation>\n\n  <extension-point name=\"changeFinder\">\n\n    <documentation>\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n      @since 7.3\n\n      This extension point lets you contribute the change finder used by the NuxeoDriveManager.\n\n      Example of the AuditChangeFinder:\n      <code>\n        <extension\n          target=\"org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl\"\n          point=\"changeFinder\">\n          <changeFinder class=\"org.nuxeo.drive.service.impl.AuditChangeFinder\" />\n         </extension>\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.drive.service.impl.ChangeFinderDescriptor\" />\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl--changeFinder",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.change.finder/Contributions/org.nuxeo.drive.change.finder--changeFinder",
              "id": "org.nuxeo.drive.change.finder--changeFinder",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl",
                "name": "org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"changeFinder\" target=\"org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl\">\n    <changeFinder class=\"org.nuxeo.drive.service.impl.AuditChangeFinder\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.change.finder",
          "name": "org.nuxeo.drive.change.finder",
          "requirements": [],
          "resolutionOrder": 185,
          "services": [],
          "startOrder": 69,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.change.finder\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl\"\n    point=\"changeFinder\">\n    <changeFinder class=\"org.nuxeo.drive.service.impl.AuditChangeFinder\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-change-finder-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.coreTypes/Contributions/org.nuxeo.drive.coreTypes--schema",
              "id": "org.nuxeo.drive.coreTypes--schema",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"driveroot\" prefix=\"drv\" src=\"schema/driveroot.xsd\"/>\n\n    <property indexOrder=\"ascending\" name=\"subscriptions/*/enabled\" schema=\"driveroot\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.coreTypes/Contributions/org.nuxeo.drive.coreTypes--doctype",
              "id": "org.nuxeo.drive.coreTypes--doctype",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <!-- facet used to store drive metadata on folderish documents that act\n      as synchronization roots -->\n    <facet name=\"DriveSynchronized\">\n      <schema name=\"driveroot\"/>\n    </facet>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.coreTypes",
          "name": "org.nuxeo.drive.coreTypes",
          "requirements": [],
          "resolutionOrder": 186,
          "services": [],
          "startOrder": 71,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.coreTypes\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"schema\">\n    <schema name=\"driveroot\" prefix=\"drv\" src=\"schema/driveroot.xsd\" />\n\n    <property schema=\"driveroot\" name=\"subscriptions/*/enabled\" indexOrder=\"ascending\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n\n    <!-- facet used to store drive metadata on folderish documents that act\n      as synchronization roots -->\n    <facet name=\"DriveSynchronized\">\n      <schema name=\"driveroot\" />\n    </facet>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-core-types.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Notify the NuxeoDriveManager service to invalidate\n      it's cache when a document is deleted (physically or just the\n      trash).\n\n      @author Olivier Grisel\n    \n",
              "documentationHtml": "<p>\nNotify the NuxeoDriveManager service to invalidate\nit&#39;s cache when a document is deleted (physically or just the\ntrash).\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.listeners/Contributions/org.nuxeo.drive.listeners--listener",
              "id": "org.nuxeo.drive.listeners--listener",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <documentation>\n      Notify the NuxeoDriveManager service to invalidate\n      it's cache when a document is deleted (physically or just the\n      trash).\n\n      @author Olivier Grisel\n    </documentation>\n\n    <listener async=\"false\" class=\"org.nuxeo.drive.listener.NuxeoDriveCacheInvalidationListener\" name=\"nuxeoDriveCacheInvalidationListener\" postCommit=\"false\" priority=\"300\">\n      <event>lifecycle_transition_event</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n      <event>documentRemoved</event>\n      <event>documentSecurityUpdated</event>\n      <event>addedToCollection</event>\n      <event>removedFromCollection</event>\n    </listener>\n\n    <documentation>\n      Handle document removal or root unregistration in\n      order to be able to\n      populate the audit log and hence compute\n      consistent change\n      summaries for each user.\n\n      @author Olivier Grisel\n    </documentation>\n    <listener async=\"false\" class=\"org.nuxeo.drive.listener.NuxeoDriveFileSystemDeletionListener\" name=\"nuxeoDriveFileSystemDeletionListener\" postCommit=\"false\" priority=\"200\">\n      <event>beforeDocumentModification</event>\n      <event>aboutToMove</event>\n      <event>lifecycle_transition_event</event>\n      <event>documentTrashed</event>\n      <event>aboutToRemove</event>\n      <event>beforeDocumentSecurityModification</event>\n      <event>aboutToUnregisterRoot</event>\n      <event>beforeRemovedFromCollection</event>\n      <event>groupUpdated</event>\n    </listener>\n\n    <documentation>\n      Populate the audit log with virtual events generated by the nuxeoDriveFileSystemDeletionListener.\n\n      @author Antoine Taillefer\n    </documentation>\n    <listener async=\"true\" class=\"org.nuxeo.drive.listener.NuxeoDriveVirtualEventLogger\" name=\"nuxeoDriveVirtualEventLoggerListener\" postCommit=\"true\"/>\n\n    <documentation>\n      Handle group change events fired by the UserManager.\n\n      @author Antoine Taillefer\n    </documentation>\n    <listener async=\"true\" class=\"org.nuxeo.drive.listener.NuxeoDriveGroupUpdateListener\" name=\"nuxeoDriveGroupUpdateListener\" postCommit=\"true\">\n      <event>group_created</event>\n      <event>group_deleted</event>\n      <event>group_modified</event>\n    </listener>\n\n    <documentation>\n      Reset synchronization root registrations on a copied document and its children.\n    </documentation>\n    <listener async=\"false\" class=\"org.nuxeo.drive.listener.NuxeoDriveSyncRootCopyListener\" name=\"nuxeoDriveSyncRootCopyListener\" postCommit=\"false\">\n      <event>documentCreatedByCopy</event>\n    </listener>\n\n    <documentation>\n      Reset synchronization root registrations on a versioned document.\n    </documentation>\n    <listener async=\"false\" class=\"org.nuxeo.drive.listener.NuxeoDriveSyncRootVersioningListener\" name=\"nuxeoDriveSyncRootVersioningListener\" postCommit=\"false\">\n      <event>documentCheckedIn</event>\n    </listener>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.listeners/Contributions/org.nuxeo.drive.listeners--event",
              "id": "org.nuxeo.drive.listeners--event",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <event name=\"rootRegistered\"/>\n    <event name=\"rootUnregistered\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.listeners",
          "name": "org.nuxeo.drive.listeners",
          "requirements": [],
          "resolutionOrder": 187,
          "services": [],
          "startOrder": 75,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.listeners\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <documentation>\n      Notify the NuxeoDriveManager service to invalidate\n      it's cache when a document is deleted (physically or just the\n      trash).\n\n      @author Olivier Grisel\n    </documentation>\n\n    <listener name=\"nuxeoDriveCacheInvalidationListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.drive.listener.NuxeoDriveCacheInvalidationListener\" priority=\"300\">\n      <event>lifecycle_transition_event</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n      <event>documentRemoved</event>\n      <event>documentSecurityUpdated</event>\n      <event>addedToCollection</event>\n      <event>removedFromCollection</event>\n    </listener>\n\n    <documentation>\n      Handle document removal or root unregistration in\n      order to be able to\n      populate the audit log and hence compute\n      consistent change\n      summaries for each user.\n\n      @author Olivier Grisel\n    </documentation>\n    <listener name=\"nuxeoDriveFileSystemDeletionListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.drive.listener.NuxeoDriveFileSystemDeletionListener\" priority=\"200\">\n      <event>beforeDocumentModification</event>\n      <event>aboutToMove</event>\n      <event>lifecycle_transition_event</event>\n      <event>documentTrashed</event>\n      <event>aboutToRemove</event>\n      <event>beforeDocumentSecurityModification</event>\n      <event>aboutToUnregisterRoot</event>\n      <event>beforeRemovedFromCollection</event>\n      <event>groupUpdated</event>\n    </listener>\n\n    <documentation>\n      Populate the audit log with virtual events generated by the nuxeoDriveFileSystemDeletionListener.\n\n      @author Antoine Taillefer\n    </documentation>\n    <listener name=\"nuxeoDriveVirtualEventLoggerListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.drive.listener.NuxeoDriveVirtualEventLogger\" />\n\n    <documentation>\n      Handle group change events fired by the UserManager.\n\n      @author Antoine Taillefer\n    </documentation>\n    <listener name=\"nuxeoDriveGroupUpdateListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.drive.listener.NuxeoDriveGroupUpdateListener\">\n      <event>group_created</event>\n      <event>group_deleted</event>\n      <event>group_modified</event>\n    </listener>\n\n    <documentation>\n      Reset synchronization root registrations on a copied document and its children.\n    </documentation>\n    <listener name=\"nuxeoDriveSyncRootCopyListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.drive.listener.NuxeoDriveSyncRootCopyListener\">\n      <event>documentCreatedByCopy</event>\n    </listener>\n\n    <documentation>\n      Reset synchronization root registrations on a versioned document.\n    </documentation>\n    <listener name=\"nuxeoDriveSyncRootVersioningListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.drive.listener.NuxeoDriveSyncRootVersioningListener\">\n      <event>documentCheckedIn</event>\n    </listener>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"event\">\n    <event name=\"rootRegistered\" />\n    <event name=\"rootUnregistered\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-listeners.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.drive.service.impl.FileSystemItemAdapterServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    @author Antoine Taillefer (ataillefer@nuxeo.com)\n\n    This service allows to get a FileSystemItem from a\n    DocumentModel.\n\n    FileSystemItem is an adapter that provides methods to\n    get data from the document such as the binary content for a File\n    or the children items of a Folder.\n\n    It is used by Nuxeo Drive to fetch the needed data for synchronization.\n\n    Factories can be contributed to implement a specific behavior\n    for the FileSystemItem retrieval\n    depending on the document type or facet.\n  \n",
          "documentationHtml": "<p>\nThis service allows to get a FileSystemItem from a\nDocumentModel.\n</p><p>\nFileSystemItem is an adapter that provides methods to\nget data from the document such as the binary content for a File\nor the children items of a Folder.\n</p><p>\nIt is used by Nuxeo Drive to fetch the needed data for synchronization.\n</p><p>\nFactories can be contributed to implement a specific behavior\nfor the FileSystemItem retrieval\ndepending on the document type or facet.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.drive.service.FileSystemItemAdapterService",
              "descriptors": [
                "org.nuxeo.drive.service.impl.FileSystemItemFactoryDescriptor"
              ],
              "documentation": "\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n\n      This extension point lets you contribute custom\n      FileSystemItem factories according to a document\n      type or facet.\n\n      Example of the DefaultFileSystemItemFactory:\n      <code>\n    <extension point=\"fileSystemItemFactory\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n        <fileSystemItemFactory\n            class=\"org.nuxeo.drive.service.impl.DefaultFileSystemItemFactory\"\n            name=\"defaultFileSystemItemFactory\" order=\"50\">\n            <parameters>\n                <parameter name=\"versioningDelay\">3600</parameter>\n                <parameter name=\"versioningOption\">MINOR</parameter>\n            </parameters>\n        </fileSystemItemFactory>\n    </extension>\n</code>\n\n      Please note that `versioningDelay` and `versioningOption` parameter have been deprecated since 9.1 and are not\n      used anymore as automatic versioning is now handled at versioning service level.\n\n      Example of a FileSystemItem factory for documents with the Picture facet:\n      <code>\n    <extension point=\"fileSystemItemFactory\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n        <fileSystemItemFactory\n            class=\"org.nuxeo.drive.sample.PictureFileSystemItemFactory\"\n            facet=\"Picture\" name=\"picture\" order=\"100\"/>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\nThis extension point lets you contribute custom\nFileSystemItem factories according to a document\ntype or facet.\n</p><p>\nExample of the DefaultFileSystemItemFactory:\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;fileSystemItemFactory&#34; target&#61;&#34;org.nuxeo.drive.service.FileSystemItemAdapterService&#34;&gt;\n        &lt;fileSystemItemFactory\n            class&#61;&#34;org.nuxeo.drive.service.impl.DefaultFileSystemItemFactory&#34;\n            name&#61;&#34;defaultFileSystemItemFactory&#34; order&#61;&#34;50&#34;&gt;\n            &lt;parameters&gt;\n                &lt;parameter name&#61;&#34;versioningDelay&#34;&gt;3600&lt;/parameter&gt;\n                &lt;parameter name&#61;&#34;versioningOption&#34;&gt;MINOR&lt;/parameter&gt;\n            &lt;/parameters&gt;\n        &lt;/fileSystemItemFactory&gt;\n    &lt;/extension&gt;\n</code></pre><p>\nPlease note that &#96;versioningDelay&#96; and &#96;versioningOption&#96; parameter have been deprecated since 9.1 and are not\nused anymore as automatic versioning is now handled at versioning service level.\n</p><p>\nExample of a FileSystemItem factory for documents with the Picture facet:\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;fileSystemItemFactory&#34; target&#61;&#34;org.nuxeo.drive.service.FileSystemItemAdapterService&#34;&gt;\n        &lt;fileSystemItemFactory\n            class&#61;&#34;org.nuxeo.drive.sample.PictureFileSystemItemFactory&#34;\n            facet&#61;&#34;Picture&#34; name&#61;&#34;picture&#34; order&#61;&#34;100&#34;/&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.service.FileSystemItemAdapterService/ExtensionPoints/org.nuxeo.drive.service.FileSystemItemAdapterService--fileSystemItemFactory",
              "id": "org.nuxeo.drive.service.FileSystemItemAdapterService--fileSystemItemFactory",
              "label": "fileSystemItemFactory (org.nuxeo.drive.service.FileSystemItemAdapterService)",
              "name": "fileSystemItemFactory",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.drive.service.FileSystemItemAdapterService",
              "descriptors": [
                "org.nuxeo.drive.service.impl.TopLevelFolderItemFactoryDescriptor"
              ],
              "documentation": "\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n\n      This extension point lets you contribute the factory\n      for the top level FolderItem.\n\n      Example of the DefaultTopLevelFolderItemFactory:\n      <code>\n    <extension point=\"topLevelFolderItemFactory\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n        <topLevelFolderItemFactory class=\"org.nuxeo.drive.service.impl.DefaultTopLevelFolderItemFactory\"/>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\nThis extension point lets you contribute the factory\nfor the top level FolderItem.\n</p><p>\nExample of the DefaultTopLevelFolderItemFactory:\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;topLevelFolderItemFactory&#34; target&#61;&#34;org.nuxeo.drive.service.FileSystemItemAdapterService&#34;&gt;\n        &lt;topLevelFolderItemFactory class&#61;&#34;org.nuxeo.drive.service.impl.DefaultTopLevelFolderItemFactory&#34;/&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.service.FileSystemItemAdapterService/ExtensionPoints/org.nuxeo.drive.service.FileSystemItemAdapterService--topLevelFolderItemFactory",
              "id": "org.nuxeo.drive.service.FileSystemItemAdapterService--topLevelFolderItemFactory",
              "label": "topLevelFolderItemFactory (org.nuxeo.drive.service.FileSystemItemAdapterService)",
              "name": "topLevelFolderItemFactory",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.drive.service.FileSystemItemAdapterService",
              "descriptors": [
                "org.nuxeo.drive.service.impl.ActiveFileSystemItemFactoriesDescriptor",
                "org.nuxeo.drive.service.impl.ActiveTopLevelFolderItemFactoryDescriptor"
              ],
              "documentation": "\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n\n      This extension point lets you contribute the active FileSystemItem factories.\n\n      Example of the default contribution:\n      <code>\n    <extension point=\"activeFileSystemItemFactories\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n        <activeTopLevelFolderItemFactory>org.nuxeo.drive.service.impl.DefaultTopLevelFolderItemFactory\n          </activeTopLevelFolderItemFactory>\n        <activeFileSystemItemFactories>\n            <factories>\n                <factory>defaultSyncRootFolderItemFactory</factory>\n                <factory>defaultFileSystemItemFactory</factory>\n            </factories>\n        </activeFileSystemItemFactories>\n    </extension>\n</code>\n\n\n      Example of a custom contribution:\n      <code>\n    <extension point=\"activeFileSystemItemFactories\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n        <activeTopLevelFolderItemFactory>org.nuxeo.drive.hierarchy.userworkspace.factory.UserWorkspaceTopLevelFactory\n          </activeTopLevelFolderItemFactory>\n        <activeFileSystemItemFactories merge=\"true\">\n            <factories>\n                <factory enabled=\"false\">defaultSyncRootFolderItemFactory</factory>\n                <factory>userWorkspaceSyncRootParentFactory</factory>\n                <factory>userWorkspaceSyncRootFactory</factory>\n            </factories>\n        </activeFileSystemItemFactories>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\nThis extension point lets you contribute the active FileSystemItem factories.\n</p><p>\nExample of the default contribution:\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;activeFileSystemItemFactories&#34; target&#61;&#34;org.nuxeo.drive.service.FileSystemItemAdapterService&#34;&gt;\n        &lt;activeTopLevelFolderItemFactory&gt;org.nuxeo.drive.service.impl.DefaultTopLevelFolderItemFactory\n          &lt;/activeTopLevelFolderItemFactory&gt;\n        &lt;activeFileSystemItemFactories&gt;\n            &lt;factories&gt;\n                &lt;factory&gt;defaultSyncRootFolderItemFactory&lt;/factory&gt;\n                &lt;factory&gt;defaultFileSystemItemFactory&lt;/factory&gt;\n            &lt;/factories&gt;\n        &lt;/activeFileSystemItemFactories&gt;\n    &lt;/extension&gt;\n</code></pre><p>\nExample of a custom contribution:\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;activeFileSystemItemFactories&#34; target&#61;&#34;org.nuxeo.drive.service.FileSystemItemAdapterService&#34;&gt;\n        &lt;activeTopLevelFolderItemFactory&gt;org.nuxeo.drive.hierarchy.userworkspace.factory.UserWorkspaceTopLevelFactory\n          &lt;/activeTopLevelFolderItemFactory&gt;\n        &lt;activeFileSystemItemFactories merge&#61;&#34;true&#34;&gt;\n            &lt;factories&gt;\n                &lt;factory enabled&#61;&#34;false&#34;&gt;defaultSyncRootFolderItemFactory&lt;/factory&gt;\n                &lt;factory&gt;userWorkspaceSyncRootParentFactory&lt;/factory&gt;\n                &lt;factory&gt;userWorkspaceSyncRootFactory&lt;/factory&gt;\n            &lt;/factories&gt;\n        &lt;/activeFileSystemItemFactories&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.service.FileSystemItemAdapterService/ExtensionPoints/org.nuxeo.drive.service.FileSystemItemAdapterService--activeFileSystemItemFactories",
              "id": "org.nuxeo.drive.service.FileSystemItemAdapterService--activeFileSystemItemFactories",
              "label": "activeFileSystemItemFactories (org.nuxeo.drive.service.FileSystemItemAdapterService)",
              "name": "activeFileSystemItemFactories",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.service.FileSystemItemAdapterService",
          "name": "org.nuxeo.drive.service.FileSystemItemAdapterService",
          "requirements": [],
          "resolutionOrder": 188,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.drive.service.FileSystemItemAdapterService",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.service.FileSystemItemAdapterService/Services/org.nuxeo.drive.service.FileSystemItemAdapterService",
              "id": "org.nuxeo.drive.service.FileSystemItemAdapterService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 786,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.service.FileSystemItemAdapterService\"\n  version=\"1.0\">\n\n  <documentation>\n    @author Antoine Taillefer (ataillefer@nuxeo.com)\n\n    This service allows to get a FileSystemItem from a\n    DocumentModel.\n\n    FileSystemItem is an adapter that provides methods to\n    get data from the document such as the binary content for a File\n    or the children items of a Folder.\n\n    It is used by Nuxeo Drive to fetch the needed data for synchronization.\n\n    Factories can be contributed to implement a specific behavior\n    for the FileSystemItem retrieval\n    depending on the document type or facet.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.drive.service.FileSystemItemAdapterService\" />\n  </service>\n\n  <implementation\n    class=\"org.nuxeo.drive.service.impl.FileSystemItemAdapterServiceImpl\" />\n\n  <extension-point name=\"fileSystemItemFactory\">\n\n    <documentation>\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n\n      This extension point lets you contribute custom\n      FileSystemItem factories according to a document\n      type or facet.\n\n      Example of the DefaultFileSystemItemFactory:\n      <code>\n        <extension\n          target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\"\n          point=\"fileSystemItemFactory\">\n          <fileSystemItemFactory name=\"defaultFileSystemItemFactory\" order=\"50\"\n            class=\"org.nuxeo.drive.service.impl.DefaultFileSystemItemFactory\">\n            <parameters>\n              <parameter name=\"versioningDelay\">3600</parameter>\n              <parameter name=\"versioningOption\">MINOR</parameter>\n            </parameters>\n          </fileSystemItemFactory>\n         </extension>\n      </code>\n      Please note that `versioningDelay` and `versioningOption` parameter have been deprecated since 9.1 and are not\n      used anymore as automatic versioning is now handled at versioning service level.\n\n      Example of a FileSystemItem factory for documents with the Picture facet:\n      <code>\n        <extension\n          target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\"\n          point=\"fileSystemItemFactory\">\n          <fileSystemItemFactory name=\"picture\" facet=\"Picture\" order=\"100\"\n            class=\"org.nuxeo.drive.sample.PictureFileSystemItemFactory\" />\n         </extension>\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.drive.service.impl.FileSystemItemFactoryDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"topLevelFolderItemFactory\">\n\n    <documentation>\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n\n      This extension point lets you contribute the factory\n      for the top level FolderItem.\n\n      Example of the DefaultTopLevelFolderItemFactory:\n      <code>\n        <extension\n          target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\"\n          point=\"topLevelFolderItemFactory\">\n          <topLevelFolderItemFactory class=\"org.nuxeo.drive.service.impl.DefaultTopLevelFolderItemFactory\" />\n         </extension>\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.drive.service.impl.TopLevelFolderItemFactoryDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"activeFileSystemItemFactories\">\n\n    <documentation>\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n\n      This extension point lets you contribute the active FileSystemItem factories.\n\n      Example of the default contribution:\n      <code>\n        <extension target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\"\n          point=\"activeFileSystemItemFactories\">\n          <activeTopLevelFolderItemFactory>org.nuxeo.drive.service.impl.DefaultTopLevelFolderItemFactory\n          </activeTopLevelFolderItemFactory>\n          <activeFileSystemItemFactories>\n            <factories>\n              <factory>defaultSyncRootFolderItemFactory</factory>\n              <factory>defaultFileSystemItemFactory</factory>\n            </factories>\n          </activeFileSystemItemFactories>\n        </extension>\n      </code>\n\n      Example of a custom contribution:\n      <code>\n        <extension target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\"\n          point=\"activeFileSystemItemFactories\">\n          <activeTopLevelFolderItemFactory>org.nuxeo.drive.hierarchy.userworkspace.factory.UserWorkspaceTopLevelFactory\n          </activeTopLevelFolderItemFactory>\n          <activeFileSystemItemFactories merge=\"true\">\n            <factories>\n              <factory enabled=\"false\">defaultSyncRootFolderItemFactory</factory>\n              <factory>userWorkspaceSyncRootParentFactory</factory>\n              <factory>userWorkspaceSyncRootFactory</factory>\n            </factories>\n          </activeFileSystemItemFactories>\n        </extension>\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.drive.service.impl.ActiveFileSystemItemFactoriesDescriptor\" />\n    <object class=\"org.nuxeo.drive.service.impl.ActiveTopLevelFolderItemFactoryDescriptor\" />\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-adapter-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.adapters/Contributions/org.nuxeo.drive.adapters--adapters",
              "id": "org.nuxeo.drive.adapters--adapters",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n\n    <adapter class=\"org.nuxeo.drive.adapter.FileSystemItem\" factory=\"org.nuxeo.drive.adapter.impl.FileSystemItemAdapterFactory\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.drive.service.FileSystemItemAdapterService--fileSystemItemFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.adapters/Contributions/org.nuxeo.drive.adapters--fileSystemItemFactory",
              "id": "org.nuxeo.drive.adapters--fileSystemItemFactory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.drive.service.FileSystemItemAdapterService",
                "name": "org.nuxeo.drive.service.FileSystemItemAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"fileSystemItemFactory\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n\n    <fileSystemItemFactory class=\"org.nuxeo.drive.service.impl.CollectionSyncRootFolderItemFactory\" facet=\"Collection\" name=\"collectionSyncRootFolderItemFactory\" order=\"5\"/>\n    <fileSystemItemFactory class=\"org.nuxeo.drive.service.impl.DefaultSyncRootFolderItemFactory\" facet=\"DriveSynchronized\" name=\"defaultSyncRootFolderItemFactory\" order=\"10\"/>\n    <fileSystemItemFactory class=\"org.nuxeo.drive.service.impl.DefaultFileSystemItemFactory\" name=\"defaultFileSystemItemFactory\" order=\"50\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.drive.service.FileSystemItemAdapterService--topLevelFolderItemFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.adapters/Contributions/org.nuxeo.drive.adapters--topLevelFolderItemFactory",
              "id": "org.nuxeo.drive.adapters--topLevelFolderItemFactory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.drive.service.FileSystemItemAdapterService",
                "name": "org.nuxeo.drive.service.FileSystemItemAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"topLevelFolderItemFactory\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n\n    <topLevelFolderItemFactory class=\"org.nuxeo.drive.service.impl.DefaultTopLevelFolderItemFactory\">\n      <parameters>\n        <parameter name=\"folderName\">Nuxeo Drive</parameter>\n      </parameters>\n    </topLevelFolderItemFactory>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.drive.service.FileSystemItemAdapterService--activeFileSystemItemFactories",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.adapters/Contributions/org.nuxeo.drive.adapters--activeFileSystemItemFactories",
              "id": "org.nuxeo.drive.adapters--activeFileSystemItemFactories",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.drive.service.FileSystemItemAdapterService",
                "name": "org.nuxeo.drive.service.FileSystemItemAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"activeFileSystemItemFactories\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n\n    <activeTopLevelFolderItemFactory>org.nuxeo.drive.service.impl.DefaultTopLevelFolderItemFactory\n    </activeTopLevelFolderItemFactory>\n\n    <activeFileSystemItemFactories>\n      <factories>\n        <factory>collectionSyncRootFolderItemFactory</factory>\n        <factory>defaultSyncRootFolderItemFactory</factory>\n        <factory>defaultFileSystemItemFactory</factory>\n      </factories>\n    </activeFileSystemItemFactories>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.adapters",
          "name": "org.nuxeo.drive.adapters",
          "requirements": [],
          "resolutionOrder": 189,
          "services": [],
          "startOrder": 63,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.adapters\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\" point=\"adapters\">\n\n    <adapter class=\"org.nuxeo.drive.adapter.FileSystemItem\" factory=\"org.nuxeo.drive.adapter.impl.FileSystemItemAdapterFactory\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\" point=\"fileSystemItemFactory\">\n\n    <fileSystemItemFactory name=\"collectionSyncRootFolderItemFactory\" order=\"5\" facet=\"Collection\"\n      class=\"org.nuxeo.drive.service.impl.CollectionSyncRootFolderItemFactory\" />\n    <fileSystemItemFactory name=\"defaultSyncRootFolderItemFactory\" order=\"10\" facet=\"DriveSynchronized\"\n      class=\"org.nuxeo.drive.service.impl.DefaultSyncRootFolderItemFactory\" />\n    <fileSystemItemFactory name=\"defaultFileSystemItemFactory\" order=\"50\"\n      class=\"org.nuxeo.drive.service.impl.DefaultFileSystemItemFactory\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\" point=\"topLevelFolderItemFactory\">\n\n    <topLevelFolderItemFactory class=\"org.nuxeo.drive.service.impl.DefaultTopLevelFolderItemFactory\">\n      <parameters>\n        <parameter name=\"folderName\">Nuxeo Drive</parameter>\n      </parameters>\n    </topLevelFolderItemFactory>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\" point=\"activeFileSystemItemFactories\">\n\n    <activeTopLevelFolderItemFactory>org.nuxeo.drive.service.impl.DefaultTopLevelFolderItemFactory\n    </activeTopLevelFolderItemFactory>\n\n    <activeFileSystemItemFactories>\n      <factories>\n        <factory>collectionSyncRootFolderItemFactory</factory>\n        <factory>defaultSyncRootFolderItemFactory</factory>\n        <factory>defaultFileSystemItemFactory</factory>\n      </factories>\n    </activeFileSystemItemFactories>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.bulk.actions/Contributions/org.nuxeo.drive.bulk.actions--actions",
              "id": "org.nuxeo.drive.bulk.actions--actions",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"10\" bucketSize=\"100\" httpEnabled=\"false\" inputStream=\"bulk/driveFireGroupUpdatedEvent\" name=\"driveFireGroupUpdatedEvent\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.bulk.actions/Contributions/org.nuxeo.drive.bulk.actions--streamProcessor",
              "id": "org.nuxeo.drive.bulk.actions--streamProcessor",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.drive.action.FireGroupUpdatedEventAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"driveFireGroupUpdatedEvent\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.bulk.actions",
          "name": "org.nuxeo.drive.bulk.actions",
          "requirements": [],
          "resolutionOrder": 190,
          "services": [],
          "startOrder": 68,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.bulk.actions\">\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"driveFireGroupUpdatedEvent\" inputStream=\"bulk/driveFireGroupUpdatedEvent\" bucketSize=\"100\"\n      batchSize=\"10\" httpEnabled=\"false\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\"\n    point=\"streamProcessor\">\n    <streamProcessor name=\"driveFireGroupUpdatedEvent\" class=\"org.nuxeo.drive.action.FireGroupUpdatedEventAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.driveFireGroupUpdatedEvent.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.driveFireGroupUpdatedEvent.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-bulk-action-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.pageproviders/Contributions/org.nuxeo.drive.pageproviders--providers",
              "id": "org.nuxeo.drive.pageproviders--providers",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"FOLDER_ITEM_CHILDREN\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:parentId = ?\n        AND ecm:isVersion = 0\n        AND ecm:isTrashed = 0\n        AND ecm:mixinType != 'HiddenInNavigation'\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:created\"/>\n      <pageSize>1000</pageSize>\n      <maxPageSize>1000</maxPageSize>\n      <property name=\"maxResults\">PAGE_SIZE</property>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.pageproviders",
          "name": "org.nuxeo.drive.pageproviders",
          "requirements": [],
          "resolutionOrder": 191,
          "services": [],
          "startOrder": 77,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.pageproviders\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider name=\"FOLDER_ITEM_CHILDREN\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:parentId = ?\n        AND ecm:isVersion = 0\n        AND ecm:isTrashed = 0\n        AND ecm:mixinType != 'HiddenInNavigation'\n      </pattern>\n      <sort column=\"dc:created\" ascending=\"true\" />\n      <pageSize>1000</pageSize>\n      <maxPageSize>1000</maxPageSize>\n      <property name=\"maxResults\">PAGE_SIZE</property>\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-pageproviders-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.drive.service.impl.FileSystemItemManagerImpl",
          "declaredStartOrder": null,
          "documentation": "\n    @author Antoine Taillefer(ataillefer@nuxeo.com)\n\n    This service provides an API to manage usual file system operations\n    on a FileSystemItem given its id.\n    It allows the following actions:\n    - check if an item exists\n    - get an item\n    - get a folder's children\n    - create a folder\n    - create a file\n    - update a file\n    - delete an item\n    - rename an item\n    - move an item\n    - copy an item\n\n    It is used by Nuxeo Drive to synchronize a client device with the server.\n  \n",
          "documentationHtml": "<p>\nThis service provides an API to manage usual file system operations\non a FileSystemItem given its id.\nIt allows the following actions:\n- check if an item exists\n- get an item\n- get a folder&#39;s children\n- create a folder\n- create a file\n- update a file\n- delete an item\n- rename an item\n- move an item\n- copy an item\n</p><p>\nIt is used by Nuxeo Drive to synchronize a client device with the server.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.service.FileSystemItemManager",
          "name": "org.nuxeo.drive.service.FileSystemItemManager",
          "requirements": [],
          "resolutionOrder": 192,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.drive.service.FileSystemItemManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.service.FileSystemItemManager/Services/org.nuxeo.drive.service.FileSystemItemManager",
              "id": "org.nuxeo.drive.service.FileSystemItemManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 78,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.service.FileSystemItemManager\"\n  version=\"1.0\">\n\n  <documentation>\n    @author Antoine Taillefer(ataillefer@nuxeo.com)\n\n    This service provides an API to manage usual file system operations\n    on a FileSystemItem given its id.\n    It allows the following actions:\n    - check if an item exists\n    - get an item\n    - get a folder's children\n    - create a folder\n    - create a file\n    - update a file\n    - delete an item\n    - rename an item\n    - move an item\n    - copy an item\n\n    It is used by Nuxeo Drive to synchronize a client device with the server.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.drive.service.FileSystemItemManager\" />\n  </service>\n\n  <implementation\n    class=\"org.nuxeo.drive.service.impl.FileSystemItemManagerImpl\" />\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-filesystemitem-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.drive.service.FileSystemItemAdapterService--topLevelFolderItemFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.adapters.hierarchy.userworkspace/Contributions/org.nuxeo.drive.adapters.hierarchy.userworkspace--topLevelFolderItemFactory",
              "id": "org.nuxeo.drive.adapters.hierarchy.userworkspace--topLevelFolderItemFactory",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.drive.service.FileSystemItemAdapterService",
                "name": "org.nuxeo.drive.service.FileSystemItemAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"topLevelFolderItemFactory\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n    <topLevelFolderItemFactory class=\"org.nuxeo.drive.hierarchy.userworkspace.factory.UserWorkspaceTopLevelFactory\">\n      <parameters>\n        <parameter name=\"folderName\">Nuxeo Drive</parameter>\n        <parameter name=\"syncRootParentFactory\">userWorkspaceSyncRootParentFactory\n        </parameter>\n      </parameters>\n    </topLevelFolderItemFactory>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.drive.service.FileSystemItemAdapterService--fileSystemItemFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.adapters.hierarchy.userworkspace/Contributions/org.nuxeo.drive.adapters.hierarchy.userworkspace--fileSystemItemFactory",
              "id": "org.nuxeo.drive.adapters.hierarchy.userworkspace--fileSystemItemFactory",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.drive.service.FileSystemItemAdapterService",
                "name": "org.nuxeo.drive.service.FileSystemItemAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"fileSystemItemFactory\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n\n    <!-- Synchronization root parent factory: order before the \"userWorkspaceSyncRootFactory\"\n      that has an order of 40 and before the \"defaultFileSystemItemFactory\" that\n      has an order of 50 -->\n    <fileSystemItemFactory class=\"org.nuxeo.drive.hierarchy.userworkspace.factory.UserWorkspaceSyncRootParentFactory\" name=\"userWorkspaceSyncRootParentFactory\" order=\"30\">\n      <parameters>\n        <parameter name=\"folderName\">My synchronized folders</parameter>\n      </parameters>\n    </fileSystemItemFactory>\n\n    <!-- Synchronization root factory: order before the \"defaultFileSystemItemFactory\"\n      that has an order of 50 -->\n    <fileSystemItemFactory class=\"org.nuxeo.drive.hierarchy.userworkspace.factory.UserWorkspaceSyncRootFactory\" facet=\"DriveSynchronized\" name=\"userWorkspaceSyncRootFactory\" order=\"40\">\n      <parameters>\n        <parameter name=\"syncRootParentFactory\">userWorkspaceSyncRootParentFactory\n        </parameter>\n      </parameters>\n    </fileSystemItemFactory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.adapters.hierarchy.userworkspace",
          "name": "org.nuxeo.drive.adapters.hierarchy.userworkspace",
          "requirements": [
            "org.nuxeo.drive.adapters"
          ],
          "resolutionOrder": 193,
          "services": [],
          "startOrder": 65,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.adapters.hierarchy.userworkspace\"\n  version=\"1.0\">\n\n  <require>org.nuxeo.drive.adapters</require>\n\n  <extension target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\"\n    point=\"topLevelFolderItemFactory\">\n    <topLevelFolderItemFactory\n      class=\"org.nuxeo.drive.hierarchy.userworkspace.factory.UserWorkspaceTopLevelFactory\">\n      <parameters>\n        <parameter name=\"folderName\">Nuxeo Drive</parameter>\n        <parameter name=\"syncRootParentFactory\">userWorkspaceSyncRootParentFactory\n        </parameter>\n      </parameters>\n    </topLevelFolderItemFactory>\n  </extension>\n\n  <extension target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\"\n    point=\"fileSystemItemFactory\">\n\n    <!-- Synchronization root parent factory: order before the \"userWorkspaceSyncRootFactory\"\n      that has an order of 40 and before the \"defaultFileSystemItemFactory\" that\n      has an order of 50 -->\n    <fileSystemItemFactory name=\"userWorkspaceSyncRootParentFactory\"\n      order=\"30\"\n      class=\"org.nuxeo.drive.hierarchy.userworkspace.factory.UserWorkspaceSyncRootParentFactory\">\n      <parameters>\n        <parameter name=\"folderName\">My synchronized folders</parameter>\n      </parameters>\n    </fileSystemItemFactory>\n\n    <!-- Synchronization root factory: order before the \"defaultFileSystemItemFactory\"\n      that has an order of 50 -->\n    <fileSystemItemFactory name=\"userWorkspaceSyncRootFactory\"\n      order=\"40\" facet=\"DriveSynchronized\"\n      class=\"org.nuxeo.drive.hierarchy.userworkspace.factory.UserWorkspaceSyncRootFactory\">\n      <parameters>\n        <parameter name=\"syncRootParentFactory\">userWorkspaceSyncRootParentFactory\n        </parameter>\n      </parameters>\n    </fileSystemItemFactory>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-hierarchy-userworkspace-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.drive.service.FileSystemItemAdapterService--topLevelFolderItemFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.adapters.hierarchy.permission/Contributions/org.nuxeo.drive.adapters.hierarchy.permission--topLevelFolderItemFactory",
              "id": "org.nuxeo.drive.adapters.hierarchy.permission--topLevelFolderItemFactory",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.drive.service.FileSystemItemAdapterService",
                "name": "org.nuxeo.drive.service.FileSystemItemAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"topLevelFolderItemFactory\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n    <topLevelFolderItemFactory class=\"org.nuxeo.drive.hierarchy.permission.factory.PermissionTopLevelFactory\">\n      <parameters>\n        <parameter name=\"folderName\">Nuxeo Drive</parameter>\n        <parameter name=\"childrenFactories\">userSyncRootParentFactory,sharedSyncRootParentFactory\n        </parameter>\n      </parameters>\n    </topLevelFolderItemFactory>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.drive.service.FileSystemItemAdapterService--fileSystemItemFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.adapters.hierarchy.permission/Contributions/org.nuxeo.drive.adapters.hierarchy.permission--fileSystemItemFactory",
              "id": "org.nuxeo.drive.adapters.hierarchy.permission--fileSystemItemFactory",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.drive.service.FileSystemItemAdapterService",
                "name": "org.nuxeo.drive.service.FileSystemItemAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"fileSystemItemFactory\" target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\">\n\n    <!-- User synchronization root parent factory (user workspace): order\n      before the \"permissionSyncRootFactory\" that has an order of 40 and before\n      the \"defaultFileSystemItemFactory\" that has an order of 50 -->\n    <fileSystemItemFactory class=\"org.nuxeo.drive.hierarchy.permission.factory.UserSyncRootParentFactory\" name=\"userSyncRootParentFactory\" order=\"30\">\n      <parameters>\n        <parameter name=\"folderName\">My Docs</parameter>\n      </parameters>\n    </fileSystemItemFactory>\n\n    <!-- Synchronization root factory: order before the \"defaultFileSystemItemFactory\"\n      that has an order of 50 -->\n    <fileSystemItemFactory class=\"org.nuxeo.drive.hierarchy.permission.factory.PermissionSyncRootFactory\" facet=\"DriveSynchronized\" name=\"permissionSyncRootFactory\" order=\"40\">\n      <parameters>\n        <parameter name=\"requiredPermission\">Read</parameter>\n        <parameter name=\"userSyncRootParentFactory\">userSyncRootParentFactory</parameter>\n        <parameter name=\"sharedSyncRootParentFactory\">\n          sharedSyncRootParentFactory\n        </parameter>\n      </parameters>\n    </fileSystemItemFactory>\n\n    <!-- Shared synchronization root parent factory -->\n    <fileSystemItemFactory class=\"org.nuxeo.drive.hierarchy.permission.factory.SharedSyncRootParentFactory\" name=\"sharedSyncRootParentFactory\" order=\"100\">\n      <parameters>\n        <parameter name=\"folderName\">Other Docs</parameter>\n      </parameters>\n    </fileSystemItemFactory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.adapters.hierarchy.permission",
          "name": "org.nuxeo.drive.adapters.hierarchy.permission",
          "requirements": [
            "org.nuxeo.drive.adapters"
          ],
          "resolutionOrder": 194,
          "services": [],
          "startOrder": 64,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.adapters.hierarchy.permission\"\n  version=\"1.0\">\n\n  <require>org.nuxeo.drive.adapters</require>\n\n  <extension target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\"\n    point=\"topLevelFolderItemFactory\">\n    <topLevelFolderItemFactory\n      class=\"org.nuxeo.drive.hierarchy.permission.factory.PermissionTopLevelFactory\">\n      <parameters>\n        <parameter name=\"folderName\">Nuxeo Drive</parameter>\n        <parameter name=\"childrenFactories\">userSyncRootParentFactory,sharedSyncRootParentFactory\n        </parameter>\n      </parameters>\n    </topLevelFolderItemFactory>\n  </extension>\n\n  <extension target=\"org.nuxeo.drive.service.FileSystemItemAdapterService\"\n    point=\"fileSystemItemFactory\">\n\n    <!-- User synchronization root parent factory (user workspace): order\n      before the \"permissionSyncRootFactory\" that has an order of 40 and before\n      the \"defaultFileSystemItemFactory\" that has an order of 50 -->\n    <fileSystemItemFactory name=\"userSyncRootParentFactory\"\n      order=\"30\"\n      class=\"org.nuxeo.drive.hierarchy.permission.factory.UserSyncRootParentFactory\">\n      <parameters>\n        <parameter name=\"folderName\">My Docs</parameter>\n      </parameters>\n    </fileSystemItemFactory>\n\n    <!-- Synchronization root factory: order before the \"defaultFileSystemItemFactory\"\n      that has an order of 50 -->\n    <fileSystemItemFactory name=\"permissionSyncRootFactory\"\n      order=\"40\" facet=\"DriveSynchronized\"\n      class=\"org.nuxeo.drive.hierarchy.permission.factory.PermissionSyncRootFactory\">\n      <parameters>\n        <parameter name=\"requiredPermission\">Read</parameter>\n        <parameter name=\"userSyncRootParentFactory\">userSyncRootParentFactory</parameter>\n        <parameter name=\"sharedSyncRootParentFactory\">\n          sharedSyncRootParentFactory\n        </parameter>\n      </parameters>\n    </fileSystemItemFactory>\n\n    <!-- Shared synchronization root parent factory -->\n    <fileSystemItemFactory name=\"sharedSyncRootParentFactory\"\n      order=\"100\"\n      class=\"org.nuxeo.drive.hierarchy.permission.factory.SharedSyncRootParentFactory\">\n      <parameters>\n        <parameter name=\"folderName\">Other Docs</parameter>\n      </parameters>\n    </fileSystemItemFactory>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-hierarchy-permission-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      If true, when adapting a document to a FileSystemItem, don't perform the RemoveChildren check on the\n      parent to compute canDelete nor the check on AddChildren to compute canCreateChild.\n\n      @since 8.10\n    \n",
              "documentationHtml": "<p>\nIf true, when adapting a document to a FileSystemItem, don&#39;t perform the RemoveChildren check on the\nparent to compute canDelete nor the check on AddChildren to compute canCreateChild.\n</p><p>\n&#64;since 8.10\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.configuration.service/Contributions/org.nuxeo.drive.configuration.service--configuration",
              "id": "org.nuxeo.drive.configuration.service--configuration",
              "registrationOrder": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      If true, when adapting a document to a FileSystemItem, don't perform the RemoveChildren check on the\n      parent to compute canDelete nor the check on AddChildren to compute canCreateChild.\n\n      @since 8.10\n    </documentation>\n    <property name=\"org.nuxeo.drive.permissionCheckOptimized\">true</property>\n\n    <documentation>\n      If true, reset synchronization root registrations on a copied document and its children.\n\n      @since 9.1\n    </documentation>\n    <property name=\"org.nuxeo.drive.resetSyncRootsOnCopy\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.configuration.service",
          "name": "org.nuxeo.drive.configuration.service",
          "requirements": [],
          "resolutionOrder": 195,
          "services": [],
          "startOrder": 70,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.configuration.service\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      If true, when adapting a document to a FileSystemItem, don't perform the RemoveChildren check on the\n      parent to compute canDelete nor the check on AddChildren to compute canCreateChild.\n\n      @since 8.10\n    </documentation>\n    <property name=\"org.nuxeo.drive.permissionCheckOptimized\">true</property>\n\n    <documentation>\n      If true, reset synchronization root registrations on a copied document and its children.\n\n      @since 9.1\n    </documentation>\n    <property name=\"org.nuxeo.drive.resetSyncRootsOnCopy\">true</property>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/nuxeodrive-configurationservice-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.versioning.VersioningService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.versioning/Contributions/org.nuxeo.drive.versioning--policies",
              "id": "org.nuxeo.drive.versioning--policies",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"policies\" target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n    <policy beforeUpdate=\"true\" id=\"versioning-delay\" increment=\"MINOR\" order=\"150\">\n      <filter-id>versioning-delay</filter-id>\n      <filter-id>drive-filter</filter-id>\n      <filter-id>not-folderish</filter-id>\n    </policy>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.versioning.VersioningService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.versioning/Contributions/org.nuxeo.drive.versioning--filters",
              "id": "org.nuxeo.drive.versioning--filters",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n    <filter id=\"versioning-delay\">\n      <condition>#{currentDocument.dc.modified.time - previousDocument.dc.modified.time &gt;= 3600000}</condition>\n    </filter>\n    <filter id=\"drive-filter\">\n      <condition>#{currentDocument.contextData.source == \"drive\"}</condition>\n    </filter>\n    <filter id=\"not-drive-filter\">\n      <condition>#{currentDocument.contextData.source != \"drive\"}</condition>\n    </filter>\n    <filter id=\"not-folderish\">\n      <condition>#{!currentDocument.folder}</condition>\n    </filter>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.versioning",
          "name": "org.nuxeo.drive.versioning",
          "requirements": [
            "org.nuxeo.ecm.core.versioning.default-policies"
          ],
          "resolutionOrder": 196,
          "services": [],
          "startOrder": 79,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.versioning\" version=\"1.0\">\n\n  <require>org.nuxeo.ecm.core.versioning.default-policies</require>\n\n  <extension target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" point=\"policies\">\n    <policy id=\"versioning-delay\" increment=\"MINOR\" beforeUpdate=\"true\" order=\"150\">\n      <filter-id>versioning-delay</filter-id>\n      <filter-id>drive-filter</filter-id>\n      <filter-id>not-folderish</filter-id>\n    </policy>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" point=\"filters\">\n    <filter id=\"versioning-delay\">\n      <condition>#{currentDocument.dc.modified.time - previousDocument.dc.modified.time >= 3600000}</condition>\n    </filter>\n    <filter id=\"drive-filter\">\n      <condition>#{currentDocument.contextData.source == \"drive\"}</condition>\n    </filter>\n    <filter id=\"not-drive-filter\">\n      <condition>#{currentDocument.contextData.source != \"drive\"}</condition>\n    </filter>\n    <filter id=\"not-folderish\">\n      <condition>#{!currentDocument.folder}</condition>\n    </filter>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-versioning-policy-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--startURL",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.auth/Contributions/org.nuxeo.drive.auth--startURL",
              "id": "org.nuxeo.drive.auth--startURL",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>drive_login.jsp</pattern>\n        <pattern>drive_browser_login.jsp</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core/org.nuxeo.drive.auth",
          "name": "org.nuxeo.drive.auth",
          "requirements": [],
          "resolutionOrder": 197,
          "services": [],
          "startOrder": 66,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.auth\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"startURL\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>drive_login.jsp</pattern>\n        <pattern>drive_browser_login.jsp</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-authentication-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-drive-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm",
      "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.core",
      "id": "org.nuxeo.drive.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: 5.7\r\nBundle-Vendor: Nuxeo\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.drive.core\r\nNuxeo-Component: OSGI-INF/nuxeodrive-service.xml,OSGI-INF/nuxeodrive-cha\r\n nge-finder-contrib.xml,OSGI-INF/nuxeodrive-core-types.xml,OSGI-INF/nuxe\r\n odrive-listeners.xml,OSGI-INF/nuxeodrive-adapter-service.xml,OSGI-INF/n\r\n uxeodrive-adapter-contrib.xml,OSGI-INF/nuxeodrive-bulk-action-contrib.x\r\n ml,OSGI-INF/nuxeodrive-pageproviders-contrib.xml,OSGI-INF/nuxeodrive-fi\r\n lesystemitem-service.xml,OSGI-INF/nuxeodrive-hierarchy-userworkspace-ad\r\n apter-contrib.xml,OSGI-INF/nuxeodrive-hierarchy-permission-adapter-cont\r\n rib.xml,OSGI-INF/nuxeodrive-configurationservice-contrib.xml,OSGI-INF/n\r\n uxeodrive-versioning-policy-contrib.xml,OSGI-INF/nuxeodrive-authenticat\r\n ion-contrib.xml\r\nBundle-SymbolicName: org.nuxeo.drive.core;singleton:=true\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\n\r\n",
      "maxResolutionOrder": 197,
      "minResolutionOrder": 184,
      "packages": [
        "nuxeo-drive"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Drive Server\n\nAddon needed for [Nuxeo Drive](https://github.com/nuxeo/nuxeo-drive) to work against a Nuxeo Platform instance.\n\n# Building\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Drive Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-drive).\nOr manually copy the built artifacts into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\nYou should then have the 'Nuxeo Drive' tab in your Home allowing you to download the Nuxeo Drive client for your favorite OS :-)\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "306b3963ae3cd8b8df650083c958429f",
        "encoding": "UTF-8",
        "length": 1224,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-elasticsearch-audit",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.elasticsearch.audit",
          "org.nuxeo.elasticsearch.automation",
          "org.nuxeo.elasticsearch.core",
          "org.nuxeo.elasticsearch.http.readonly",
          "org.nuxeo.elasticsearch.rest",
          "org.nuxeo.elasticsearch.seqgen",
          "org.nuxeo.elasticsearch.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.elasticsearch",
        "id": "grp:org.nuxeo.elasticsearch",
        "name": "org.nuxeo.elasticsearch",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "nuxeo-elasticsearch\n===================\n\n## About\n\nThis project aims at providing Nuxeo bundles to integrate\nElasticsearch with the Nuxeo Platform.\n\nThe idea is to index/query Nuxeo Documents to/from Elasticsearch.\n\n## Building\n\nTo build and run the tests, simply start the Maven build:\n\n    mvn clean install\n\n## Running tests\n\n### Using the embedded Elasticsearch\n\nWith the default `RestClient`:\n```bash\nmvn -nsu test\n# -Dnuxeo.test.elasticsearch.client=RestClient is set by default\n```\n\nOr with the `TransportClient`\n\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient\n```\n\n### Using an external Elasticsearch\n\n1. Start an Elasticsearch using docker:\n```bash\ndocker run -p 9400:9200 -p 9600:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.5.3\n```\n\n2.a Run the test with `RestClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.addressList=http://localhost:9400\n```\n\n2.b Or run the test with `TransportClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient -Dnuxeo.test.elasticsearch.clusterName=docker-cluster -Dnuxeo.test.elasticsearch.addressList=localhost:9600\n```\n\n## Links\n\n- Administration: http://doc.nuxeo.com/x/UBY5AQ\n- Configuring mapping: http://doc.nuxeo.com/x/WxI5AQ\n- Overview: http://doc.nuxeo.com/x/iYElAQ\n- [Open jira tikets](https://jira.nuxeo.com/issues/?jql=project%20%3D%20NXP%20AND%20component%20%3D%20Elasticsearch%20AND%20Status%20!%3D%20%22Resolved%22%20ORDER%20BY%20updated%20DESC%2C%20priority%20DESC%2C%20created%20ASC)\n",
            "digest": "39fe49f5b0c4b24c62cb008ba470a7c5",
            "encoding": "UTF-8",
            "length": 1513,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.elasticsearch.audit",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "Contribute the search event to the Audit configuration :\n\t\tthis is only safe to do so when the ES backend if used for Audit\n\t\n",
          "documentationHtml": "<p>\nContribute the search event to the Audit configuration :\nthis is only safe to do so when the ES backend if used for Audit\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.audit/org.nuxeo.ecm.platform.audit.search.contrib/Contributions/org.nuxeo.ecm.platform.audit.search.contrib--event",
              "id": "org.nuxeo.ecm.platform.audit.search.contrib--event",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n\t\t<event name=\"search\">\n\t\t\t<extendedInfos>\n\t\t\t\t<extendedInfo expression=\"${message.properties.searchDocumentModelAsJson}\" key=\"searchDocumentModel\"/>\n\t\t\t\t<extendedInfo expression=\"${message.properties.aggregates}\" key=\"aggregates\"/>\n\t\t\t\t<extendedInfo expression=\"${message.properties.aggregatesMatches}\" key=\"aggregatesMatches\"/>\n\t\t\t\t<extendedInfo expression=\"${message.properties.effectiveQuery}\" key=\"effectiveQuery\"/>\n\t\t\t\t<extendedInfo expression=\"${message.properties.pageIndex}\" key=\"pageIndex\"/>\n\t\t\t\t<extendedInfo expression=\"${message.properties.resultsCountInPage}\" key=\"resultsCountInPage\"/>\n\t\t\t\t<extendedInfo expression=\"${message.properties.resultsCount}\" key=\"resultsCount\"/>\n\t\t\t\t<extendedInfo expression=\"${message.properties.pageProviderName}\" key=\"pageProviderName\"/>\n\t\t\t\t<extendedInfo expression=\"${message.properties.queryParams}\" key=\"queryParams\"/>\n\t\t\t\t<extendedInfo expression=\"${message.properties.params}\" key=\"params\"/>\n\t\t\t\t<extendedInfo expression=\"${message.properties.executionTimeMs}\" key=\"executionTimeMs\"/>\n\t\t\t\t<extendedInfo expression=\"${message.properties.searchFields}\" key=\"searchFields\"/>\n\t\t\t</extendedInfos>\n\t\t</event>\n\t</extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.audit/org.nuxeo.ecm.platform.audit.search.contrib",
          "name": "org.nuxeo.ecm.platform.audit.search.contrib",
          "requirements": [],
          "resolutionOrder": 202,
          "services": [],
          "startOrder": 274,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.audit.search.contrib\"\n\tversion=\"1.0\">\n\n\t<documentation>Contribute the search event to the Audit configuration :\n\t\tthis is only safe to do so when the ES backend if used for Audit\n\t</documentation>\n\n\t<extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\"\n\t\tpoint=\"event\">\n\t\t<event name=\"search\">\n\t\t\t<extendedInfos>\n\t\t\t\t<extendedInfo expression=\"${message.properties.searchDocumentModelAsJson}\"\n\t\t\t\t\tkey=\"searchDocumentModel\" />\n\t\t\t\t<extendedInfo expression=\"${message.properties.aggregates}\"\n\t\t\t\t\tkey=\"aggregates\" />\n\t\t\t\t<extendedInfo expression=\"${message.properties.aggregatesMatches}\"\n\t\t\t\t\tkey=\"aggregatesMatches\" />\n\t\t\t\t<extendedInfo expression=\"${message.properties.effectiveQuery}\"\n\t\t\t\t\tkey=\"effectiveQuery\" />\n\t\t\t\t<extendedInfo expression=\"${message.properties.pageIndex}\"\n\t\t\t\t\tkey=\"pageIndex\" />\n\t\t\t\t<extendedInfo expression=\"${message.properties.resultsCountInPage}\"\n\t\t\t\t\tkey=\"resultsCountInPage\" />\n\t\t\t\t<extendedInfo expression=\"${message.properties.resultsCount}\"\n\t\t\t\t\tkey=\"resultsCount\" />\n\t\t\t\t<extendedInfo expression=\"${message.properties.pageProviderName}\"\n\t\t\t\t\tkey=\"pageProviderName\" />\n\t\t\t\t<extendedInfo expression=\"${message.properties.queryParams}\"\n\t\t\t\t\tkey=\"queryParams\" />\n\t\t\t\t<extendedInfo expression=\"${message.properties.params}\"\n\t\t\t\t\tkey=\"params\" />\n\t\t\t\t<extendedInfo expression=\"${message.properties.executionTimeMs}\"\n\t\t\t\t\tkey=\"executionTimeMs\" />\n\t\t\t\t<extendedInfo expression=\"${message.properties.searchFields}\"\n\t\t\t\t\tkey=\"searchFields\" />\n\t\t\t</extendedInfos>\n\t\t</event>\n\t</extension>\n</component>",
          "xmlFileName": "/OSGI-INF/es-audit-search-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.audit/org.nuxeo.ecm.platform.audit.PageProviderservice.es.contrib/Contributions/org.nuxeo.ecm.platform.audit.PageProviderservice.es.contrib--providers",
              "id": "org.nuxeo.ecm.platform.audit.PageProviderservice.es.contrib--providers",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.elasticsearch.audit.pageprovider.ESAuditPageProvider\" name=\"EVENTS_VIEW\">\n      <property name=\"coreSession\">#{documentManager}</property>\n      <property name=\"generateUIComments\">false</property>\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate operator=\"BETWEEN\" parameter=\"eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"category\">\n          <field name=\"eventCategory\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"principalName\">\n          <field name=\"principalName\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"false\" column=\"eventDate\"/>\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.elasticsearch.audit.pageprovider.ESAuditPageProvider\" name=\"DOCUMENT_HISTORY_PROVIDER_OLD\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n            {\n\t\t        \"bool\" : {\n\t\t          \"must\" : {\n\t\t            \"match\" : {\n\t\t              \"docUUID\" : {\n\t\t                \"query\" : \"?\"\n\t\t              }\n\t\t            }\n\t\t          }\n\t\t        }\n\t\t\t  }\n        </fixedPart>\n        <predicate operator=\"BETWEEN\" parameter=\"eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"category\">\n          <field name=\"eventCategories\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"principalName\">\n          <field name=\"principalNames\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"true\" column=\"id\"/>\n      <pageSize>5</pageSize>\n    </genericPageProvider>\n\n\n    <genericPageProvider class=\"org.nuxeo.elasticsearch.audit.pageprovider.ESDocumentHistoryPageProvider\" name=\"DOCUMENT_HISTORY_PROVIDER\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate operator=\"BETWEEN\" parameter=\"eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"category\">\n          <field name=\"eventCategories\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"principalName\">\n          <field name=\"principalNames\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"false\" column=\"eventDate\"/>\n        <pageSize>10</pageSize>\n        <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n      <genericPageProvider class=\"org.nuxeo.elasticsearch.audit.pageprovider.ESAuditPageProvider\" name=\"ADMIN_HISTORY\">\n        <property name=\"coreSession\"/>\n        <property name=\"generateUIComments\">false</property>\n        <searchDocumentType>BasicAuditSearch</searchDocumentType>\n        <whereClause>\n          <predicate operator=\"BETWEEN\" parameter=\"eventDate\">\n            <field name=\"startDate\" schema=\"basicauditsearch\"/>\n            <field name=\"endDate\" schema=\"basicauditsearch\"/>\n          </predicate>\n          <predicate operator=\"=\" parameter=\"category\">\n            <field name=\"eventCategory\" schema=\"basicauditsearch\"/>\n          </predicate>\n          <predicate operator=\"IN\" parameter=\"eventId\">\n            <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n          </predicate>\n          <predicate operator=\"=\" parameter=\"principalName\">\n            <field name=\"principalName\" schema=\"basicauditsearch\"/>\n          </predicate>\n        </whereClause>\n        <sort ascending=\"false\" column=\"eventDate\"/>\n        <pageSize>10</pageSize>\n        <maxPageSize>1000</maxPageSize>\n      </genericPageProvider>\n\n  <genericPageProvider class=\"org.nuxeo.elasticsearch.audit.pageprovider.ESDocumentHistoryPageProvider\" name=\"LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER\">\n     <pattern>\n{\n  \"query\": {\n    \"bool\": {\n      \"must\": [\n        {\n          \"term\": {\n            \"category\": \"userGroup\"\n          }\n        },\n        {\n          \"bool\": {\n            \"should\": [\n              {\n                \"term\": {\n                  \"eventId\": \"user_created\"\n                }\n              },\n              {\n                \"term\": {\n                  \"eventId\": \"group_created\"\n                }\n              }\n            ]\n          }\n        }\n      ]\n    }\n  }\n}\n    </pattern>\n    <sort ascending=\"false\" column=\"eventDate\"/>\n    <pageSize>5</pageSize>\n    <maxPageSize>100</maxPageSize>\n  </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.audit/org.nuxeo.ecm.platform.audit.PageProviderservice.es.contrib",
          "name": "org.nuxeo.ecm.platform.audit.PageProviderservice.es.contrib",
          "requirements": [
            "org.nuxeo.admin.pageproviders",
            "org.nuxeo.ecm.platform.audit.PageProviderservice.contrib"
          ],
          "resolutionOrder": 290,
          "services": [],
          "startOrder": 269,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.audit.PageProviderservice.es.contrib\">\n\n  <require>org.nuxeo.ecm.platform.audit.PageProviderservice.contrib</require>\n  <require>org.nuxeo.admin.pageproviders</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <genericPageProvider name=\"EVENTS_VIEW\" class=\"org.nuxeo.elasticsearch.audit.pageprovider.ESAuditPageProvider\">\n      <property name=\"coreSession\">#{documentManager}</property>\n      <property name=\"generateUIComments\">false</property>\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate parameter=\"eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"category\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventCategory\" />\n        </predicate>\n        <predicate parameter=\"eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\" />\n        </predicate>\n        <predicate parameter=\"principalName\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"principalName\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"eventDate\" ascending=\"false\" />\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"DOCUMENT_HISTORY_PROVIDER_OLD\"\n      class=\"org.nuxeo.elasticsearch.audit.pageprovider.ESAuditPageProvider\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n            {\n\t\t        \"bool\" : {\n\t\t          \"must\" : {\n\t\t            \"match\" : {\n\t\t              \"docUUID\" : {\n\t\t                \"query\" : \"?\"\n\t\t              }\n\t\t            }\n\t\t          }\n\t\t        }\n\t\t\t  }\n        </fixedPart>\n        <predicate parameter=\"eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"category\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventCategories\" />\n        </predicate>\n        <predicate parameter=\"eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\" />\n        </predicate>\n        <predicate parameter=\"principalName\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"principalNames\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"id\" ascending=\"true\" />\n      <pageSize>5</pageSize>\n    </genericPageProvider>\n\n\n    <genericPageProvider name=\"DOCUMENT_HISTORY_PROVIDER\"\n      class=\"org.nuxeo.elasticsearch.audit.pageprovider.ESDocumentHistoryPageProvider\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate parameter=\"eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"category\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventCategories\" />\n        </predicate>\n        <predicate parameter=\"eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\" />\n        </predicate>\n        <predicate parameter=\"principalName\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"principalNames\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"eventDate\" ascending=\"false\" />\n        <pageSize>10</pageSize>\n        <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n      <genericPageProvider name=\"ADMIN_HISTORY\" class=\"org.nuxeo.elasticsearch.audit.pageprovider.ESAuditPageProvider\">\n        <property name=\"coreSession\"></property>\n        <property name=\"generateUIComments\">false</property>\n        <searchDocumentType>BasicAuditSearch</searchDocumentType>\n        <whereClause>\n          <predicate parameter=\"eventDate\" operator=\"BETWEEN\">\n            <field schema=\"basicauditsearch\" name=\"startDate\" />\n            <field schema=\"basicauditsearch\" name=\"endDate\" />\n          </predicate>\n          <predicate parameter=\"category\" operator=\"=\">\n            <field schema=\"basicauditsearch\" name=\"eventCategory\" />\n          </predicate>\n          <predicate parameter=\"eventId\" operator=\"IN\">\n            <field schema=\"basicauditsearch\" name=\"eventIds\" />\n          </predicate>\n          <predicate parameter=\"principalName\" operator=\"=\">\n            <field schema=\"basicauditsearch\" name=\"principalName\" />\n          </predicate>\n        </whereClause>\n        <sort column=\"eventDate\" ascending=\"false\" />\n        <pageSize>10</pageSize>\n        <maxPageSize>1000</maxPageSize>\n      </genericPageProvider>\n\n  <genericPageProvider name=\"LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER\"\n    class=\"org.nuxeo.elasticsearch.audit.pageprovider.ESDocumentHistoryPageProvider\">\n     <pattern>\n{\n  \"query\": {\n    \"bool\": {\n      \"must\": [\n        {\n          \"term\": {\n            \"category\": \"userGroup\"\n          }\n        },\n        {\n          \"bool\": {\n            \"should\": [\n              {\n                \"term\": {\n                  \"eventId\": \"user_created\"\n                }\n              },\n              {\n                \"term\": {\n                  \"eventId\": \"group_created\"\n                }\n              }\n            ]\n          }\n        }\n      ]\n    }\n  }\n}\n    </pattern>\n    <sort column=\"eventDate\" ascending=\"false\" />\n    <pageSize>5</pageSize>\n    <maxPageSize>100</maxPageSize>\n  </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/es-audit-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.audit/org.nuxeo.elasticsearch.audit.contrib/Contributions/org.nuxeo.elasticsearch.audit.contrib--backend",
              "id": "org.nuxeo.elasticsearch.audit.contrib--backend",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"backend\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <backend class=\"org.nuxeo.elasticsearch.audit.ESAuditBackend\">\n      <require>org.nuxeo.elasticsearch.ElasticSearchComponent</require>\n    </backend>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--storage",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.audit/org.nuxeo.elasticsearch.audit.contrib/Contributions/org.nuxeo.elasticsearch.audit.contrib--storage",
              "id": "org.nuxeo.elasticsearch.audit.contrib--storage",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"storage\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <storage class=\"org.nuxeo.elasticsearch.audit.ESAuditBackend\" id=\"elasticsearchAuditStorage\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.audit/org.nuxeo.elasticsearch.audit.contrib",
          "name": "org.nuxeo.elasticsearch.audit.contrib",
          "requirements": [
            "org.nuxeo.elasticsearch.uidgen.sequencer.contrib",
            "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService"
          ],
          "resolutionOrder": 812,
          "services": [],
          "startOrder": 660,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.elasticsearch.audit.contrib\">\n\n  <require>org.nuxeo.ecm.platform.audit.service.NXAuditEventsService</require>\n  <require>org.nuxeo.elasticsearch.uidgen.sequencer.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\"\n\t     point=\"backend\">\n    <backend class=\"org.nuxeo.elasticsearch.audit.ESAuditBackend\">\n      <require>org.nuxeo.elasticsearch.ElasticSearchComponent</require>\n    </backend>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"storage\">\n    <storage id=\"elasticsearchAuditStorage\" class=\"org.nuxeo.elasticsearch.audit.ESAuditBackend\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/elasticsearch-audit-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-elasticsearch-audit-2023.7.9.jar",
      "groupId": "org.nuxeo.elasticsearch",
      "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.audit",
      "id": "org.nuxeo.elasticsearch.audit",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Audit ElasticSearch backend\r\nBundle-SymbolicName: org.nuxeo.elasticsearch.audit;singleton:=true\r\nNuxeo-Component: OSGI-INF/elasticsearch-audit-contrib.xml,OSGI-INF/es-au\r\n dit-pageprovider-contrib.xml,OSGI-INF/es-audit-search-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 812,
      "minResolutionOrder": 202,
      "packages": [],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "nuxeo-elasticsearch\n===================\n\n## About\n\nThis project aims at providing Nuxeo bundles to integrate\nElasticsearch with the Nuxeo Platform.\n\nThe idea is to index/query Nuxeo Documents to/from Elasticsearch.\n\n## Building\n\nTo build and run the tests, simply start the Maven build:\n\n    mvn clean install\n\n## Running tests\n\n### Using the embedded Elasticsearch\n\nWith the default `RestClient`:\n```bash\nmvn -nsu test\n# -Dnuxeo.test.elasticsearch.client=RestClient is set by default\n```\n\nOr with the `TransportClient`\n\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient\n```\n\n### Using an external Elasticsearch\n\n1. Start an Elasticsearch using docker:\n```bash\ndocker run -p 9400:9200 -p 9600:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.5.3\n```\n\n2.a Run the test with `RestClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.addressList=http://localhost:9400\n```\n\n2.b Or run the test with `TransportClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient -Dnuxeo.test.elasticsearch.clusterName=docker-cluster -Dnuxeo.test.elasticsearch.addressList=localhost:9600\n```\n\n## Links\n\n- Administration: http://doc.nuxeo.com/x/UBY5AQ\n- Configuring mapping: http://doc.nuxeo.com/x/WxI5AQ\n- Overview: http://doc.nuxeo.com/x/iYElAQ\n- [Open jira tikets](https://jira.nuxeo.com/issues/?jql=project%20%3D%20NXP%20AND%20component%20%3D%20Elasticsearch%20AND%20Status%20!%3D%20%22Resolved%22%20ORDER%20BY%20updated%20DESC%2C%20priority%20DESC%2C%20created%20ASC)\n",
        "digest": "39fe49f5b0c4b24c62cb008ba470a7c5",
        "encoding": "UTF-8",
        "length": 1513,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": {
        "blobProviderId": "default",
        "content": "nuxeo-elasticsearch-audit\n=========================\n\n## About\n\nThis project provides a backend based on Elasticsearch for Nuxeo for Audit Service.\n\nThe idea is to use Lucene / Elastocsearch as storage backend for the Audit trail entries.\n\nUsage of Elasticsearch as a replacement for the JPA based default backend allows to easily make the Audit service scale :\n\n - when there are a lot of entries\n     - lot of access\n     - custom logging\n - when there are a lot of queries\n     - reporting\n     - usage of sync systems like Nuxeo Drive\n - when custom attributes on Audit entries are used\n\n## How it works\n\nAn Elasticsearch  based `AuditBackend` is contributed at startup to replace the default JPA based one and it use dedicated `audit` Elasticsearch index to handle storage and queries.\n\nThe queries and PageProviders are based on Elasticsearch native DSL : no automatic conversion is done between EJBQL and Elasticsearch DSL.\n\nThe orginal Audit service uses a JPA sequence to assign each audit entry a unique id.\n\nIn the Elasticsearch implementation, an alternate sequence genaration system is used : `nuxeo-elasticsearch-seqgen`.\n\n## Data Migration\n\nWhen `nuxeo-elasticsearch-audit` is deployed it will automatically replace the default JPA implementation.\n\nHowever, if you have previous data inside JPA you have to migrate it.\n\nThe migration is done in a Worker that will simply go through all existing JPA Audit entries to store them inside the Elasticsearch index.\n\nThe migration is done using a configurable batch size (default is 1000 entries).\n\nAn Automation Operation is provided to trigger the migration Work.\n\nSample call using curl :\n\n    curl -H 'Content-Type:application/json' -X POST -d '{\"params\":{\"batchSize\":5000}}' -u Administrator:Administrator http://127.0.0.1:8080/nuxeo/api/v1/automation/Audit.StartMigration\n\n\nNB : Migration of 16 Millions entries on a C3.XLarge AWS instance with default PGSQL setup and default embedded Elasticsearch takes about 3h (1500 entries/s).\n\n## Building\n\nTo build and run the tests, simply start the Maven build:\n\n    mvn clean install\n",
        "digest": "c512c512c532dcc09afe8a33d888ea10",
        "encoding": "UTF-8",
        "length": 2091,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-notification",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.notification",
          "org.nuxeo.ecm.platform.notification.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification",
        "id": "grp:org.nuxeo.ecm.platform.notification",
        "name": "org.nuxeo.ecm.platform.notification",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.notification",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
          "declaredStartOrder": null,
          "documentation": "\n    This component provides a service for notifications.\n\n    By registering with this extension point one can specify the possible\n    notifications to which a user can subscribe, or to which a user is\n    automatically subscribed.\n  \n",
          "documentationHtml": "<p>\nThis component provides a service for notifications.\n</p><p>\nBy registering with this extension point one can specify the possible\nnotifications to which a user can subscribe, or to which a user is\nautomatically subscribed.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ec.notification.service.NotificationDescriptor",
                "org.nuxeo.ecm.platform.ec.notification.service.NotificationEventDescriptor"
              ],
              "documentation": "\n      This extension point can be used to configure available notifications. A\n      given notification has the form:\n      <code>\n    <notification autoSubscribed=\"false\"\n        availableIn=\"Section, Workspace\" channel=\"email\"\n        name=\"Publication\" template=\"publishContent\">\n        <event name=\"sectionContentPublished\"/>\n        <event name=\"myContentPublished\"/>\n    </notification>\n</code>\n\n      The\n      <em>name</em>\n\n      is the identifier for this notification.\n\n      The\n      <em>channel</em>\n\n      is always \"email\".\n\n      The\n      <em>autoSubscribed</em>\n\n      flag can be true if this notification is aways taken into account, or\n      false if you want to allow users to enable/disable this notification by\n      themselves.\n\n      The\n      <em>template</em>\n\n      refers to the body template, which can be configured through the\n      \"templates\" extension point.\n\n      The\n      <em>availableIn</em>\n\n      attribute specifies in which types of superspaces the notification is\n      active, it can be a comma-separated lists of types, or \"*\" or \"all\" to\n      make the notification active in any container.\n\n      To disable an existing notification:\n      <code>\n    <notification enabled=\"false\" name=\"Publication\"/>\n</code>\n",
              "documentationHtml": "<p>\nThis extension point can be used to configure available notifications. A\ngiven notification has the form:\n</p><p></p><pre><code>    &lt;notification autoSubscribed&#61;&#34;false&#34;\n        availableIn&#61;&#34;Section, Workspace&#34; channel&#61;&#34;email&#34;\n        name&#61;&#34;Publication&#34; template&#61;&#34;publishContent&#34;&gt;\n        &lt;event name&#61;&#34;sectionContentPublished&#34;/&gt;\n        &lt;event name&#61;&#34;myContentPublished&#34;/&gt;\n    &lt;/notification&gt;\n</code></pre><p>\nThe\n<em>name</em>\n</p><p>\nis the identifier for this notification.\n</p><p>\nThe\n<em>channel</em>\n</p><p>\nis always &#34;email&#34;.\n</p><p>\nThe\n<em>autoSubscribed</em>\n</p><p>\nflag can be true if this notification is aways taken into account, or\nfalse if you want to allow users to enable/disable this notification by\nthemselves.\n</p><p>\nThe\n<em>template</em>\n</p><p>\nrefers to the body template, which can be configured through the\n&#34;templates&#34; extension point.\n</p><p>\nThe\n<em>availableIn</em>\n</p><p>\nattribute specifies in which types of superspaces the notification is\nactive, it can be a comma-separated lists of types, or &#34;*&#34; or &#34;all&#34; to\nmake the notification active in any container.\n</p><p>\nTo disable an existing notification:\n</p><p></p><pre><code>    &lt;notification enabled&#61;&#34;false&#34; name&#61;&#34;Publication&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.service.NotificationService/ExtensionPoints/org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notifications",
              "id": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notifications",
              "label": "notifications (org.nuxeo.ecm.platform.ec.notification.service.NotificationService)",
              "name": "notifications",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ec.notification.service.TemplateDescriptor"
              ],
              "documentation": "\n      This extension point can be used to define templates for notifications.\n\n      By default inside the template files those expressions are available to use:\n\n      ${docId} - the UID of the document that produced the notification\n\n      ${author} - the user name of who or what produced the event\n\n      ${principalAuthor} - the same as ${author}\n\n      ${principalAuthor.firstName} - the first name of ${principalAuthor}\n      if defined for the corresponding user\n\n      ${principalAuthor.lastName} - the family name of ${principalAuthor}\n      if defined for the corresponding user\n\n      ${dateTime) - date and time when it happened - must be formatted according\n      to the freemaker rules\n\n      ${docUrl} - For now it displays the path to follow to get to the document\n      that was the source of the event\n\n      ${docTitle} - displays the title of the document that produced the\n      notification\n\n      ${newDocUrl} - this can display the path of the document modified/created\n      inside the document that produced the notification. This newDoc is the\n      child of the producer document.\n\n      ${newDocTitle} - the same that ${newDocUrl}, but displays the title.\n\n      ${newDocId} - the same that ${newDocUrl}, but displays the UID.\n\n      If you need to add some more variables into your templates, just put the\n      data you need to display in the notification in the eventInfo map of the\n      JMS message that is sent to queue topic/NXPMessages.\n\n      The same goes for subject but in this case there is no need to define a\n      template. Just put the string that you need to have as subject and if it\n      contains dynamic elements ${XXX}, they will be rendered just like it\n      happens in the body.\n\n      For example :\n\n      When creating the message : mesage.getEventInfo().put(\"docSize\",\n      sizeOfDocument);\n\n      In your template file : The document has ${docSize}KB.\n\n      @author Narcis Paslaru\n\n    \n",
              "documentationHtml": "<p>\nThis extension point can be used to define templates for notifications.\n</p><p>\nBy default inside the template files those expressions are available to use:\n</p><p>\n${docId} - the UID of the document that produced the notification\n</p><p>\n${author} - the user name of who or what produced the event\n</p><p>\n${principalAuthor} - the same as ${author}\n</p><p>\n${principalAuthor.firstName} - the first name of ${principalAuthor}\nif defined for the corresponding user\n</p><p>\n${principalAuthor.lastName} - the family name of ${principalAuthor}\nif defined for the corresponding user\n</p><p>\n${dateTime) - date and time when it happened - must be formatted according\nto the freemaker rules\n</p><p>\n${docUrl} - For now it displays the path to follow to get to the document\nthat was the source of the event\n</p><p>\n${docTitle} - displays the title of the document that produced the\nnotification\n</p><p>\n${newDocUrl} - this can display the path of the document modified/created\ninside the document that produced the notification. This newDoc is the\nchild of the producer document.\n</p><p>\n${newDocTitle} - the same that ${newDocUrl}, but displays the title.\n</p><p>\n${newDocId} - the same that ${newDocUrl}, but displays the UID.\n</p><p>\nIf you need to add some more variables into your templates, just put the\ndata you need to display in the notification in the eventInfo map of the\nJMS message that is sent to queue topic/NXPMessages.\n</p><p>\nThe same goes for subject but in this case there is no need to define a\ntemplate. Just put the string that you need to have as subject and if it\ncontains dynamic elements ${XXX}, they will be rendered just like it\nhappens in the body.\n</p><p>\nFor example :\n</p><p>\nWhen creating the message : mesage.getEventInfo().put(&#34;docSize&#34;,\nsizeOfDocument);\n</p><p>\nIn your template file : The document has ${docSize}KB.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.service.NotificationService/ExtensionPoints/org.nuxeo.ecm.platform.ec.notification.service.NotificationService--templates",
              "id": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--templates",
              "label": "templates (org.nuxeo.ecm.platform.ec.notification.service.NotificationService)",
              "name": "templates",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ec.notification.service.GeneralSettingsDescriptor"
              ],
              "documentation": "\n      This extension point can be used to define general settings. For now only\n      server prefix E.g. : http://server:port/appName/\n\n    \n",
              "documentationHtml": "<p>\nThis extension point can be used to define general settings. For now only\nserver prefix E.g. : http://server:port/appName/\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.service.NotificationService/ExtensionPoints/org.nuxeo.ecm.platform.ec.notification.service.NotificationService--generalSettings",
              "id": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--generalSettings",
              "label": "generalSettings (org.nuxeo.ecm.platform.ec.notification.service.NotificationService)",
              "name": "generalSettings",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ec.notification.service.NotificationListenerHookDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.service.NotificationService/ExtensionPoints/org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notificationListenerHook",
              "id": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notificationListenerHook",
              "label": "notificationListenerHook (org.nuxeo.ecm.platform.ec.notification.service.NotificationService)",
              "name": "notificationListenerHook",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ec.notification.service.NotificationListenerVetoDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.service.NotificationService/ExtensionPoints/org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notificationListenerVeto",
              "id": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notificationListenerVeto",
              "label": "notificationListenerVeto (org.nuxeo.ecm.platform.ec.notification.service.NotificationService)",
              "name": "notificationListenerVeto",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
          "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
          "requirements": [],
          "resolutionOrder": 425,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.service.NotificationService/Services/org.nuxeo.ecm.platform.notification.api.NotificationManager",
              "id": "org.nuxeo.ecm.platform.notification.api.NotificationManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 845,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component\n  name=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n  <implementation\n    class=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.notification.api.NotificationManager\" />\n  </service>\n\n  <documentation>\n    This component provides a service for notifications.\n\n    By registering with this extension point one can specify the possible\n    notifications to which a user can subscribe, or to which a user is\n    automatically subscribed.\n  </documentation>\n  <extension-point name=\"notifications\">\n    <documentation>\n      This extension point can be used to configure available notifications. A\n      given notification has the form:\n      <code>\n        <notification name=\"Publication\" channel=\"email\"\n          availableIn=\"Section, Workspace\" autoSubscribed=\"false\"\n          template=\"publishContent\">\n          <event name=\"sectionContentPublished\" />\n          <event name=\"myContentPublished\" />\n        </notification>\n      </code>\n      The\n      <em>name</em>\n      is the identifier for this notification.\n\n      The\n      <em>channel</em>\n      is always \"email\".\n\n      The\n      <em>autoSubscribed</em>\n      flag can be true if this notification is aways taken into account, or\n      false if you want to allow users to enable/disable this notification by\n      themselves.\n\n      The\n      <em>template</em>\n      refers to the body template, which can be configured through the\n      \"templates\" extension point.\n\n      The\n      <em>availableIn</em>\n      attribute specifies in which types of superspaces the notification is\n      active, it can be a comma-separated lists of types, or \"*\" or \"all\" to\n      make the notification active in any container.\n\n      To disable an existing notification:\n      <code>\n        <notification name=\"Publication\" enabled=\"false\" />\n      </code>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationDescriptor\" />\n    <object\n      class=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationEventDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"templates\">\n    <documentation>\n      This extension point can be used to define templates for notifications.\n\n      By default inside the template files those expressions are available to use:\n\n      ${docId} - the UID of the document that produced the notification\n\n      ${author} - the user name of who or what produced the event\n\n      ${principalAuthor} - the same as ${author}\n\n      ${principalAuthor.firstName} - the first name of ${principalAuthor}\n      if defined for the corresponding user\n\n      ${principalAuthor.lastName} - the family name of ${principalAuthor}\n      if defined for the corresponding user\n\n      ${dateTime) - date and time when it happened - must be formatted according\n      to the freemaker rules\n\n      ${docUrl} - For now it displays the path to follow to get to the document\n      that was the source of the event\n\n      ${docTitle} - displays the title of the document that produced the\n      notification\n\n      ${newDocUrl} - this can display the path of the document modified/created\n      inside the document that produced the notification. This newDoc is the\n      child of the producer document.\n\n      ${newDocTitle} - the same that ${newDocUrl}, but displays the title.\n\n      ${newDocId} - the same that ${newDocUrl}, but displays the UID.\n\n      If you need to add some more variables into your templates, just put the\n      data you need to display in the notification in the eventInfo map of the\n      JMS message that is sent to queue topic/NXPMessages.\n\n      The same goes for subject but in this case there is no need to define a\n      template. Just put the string that you need to have as subject and if it\n      contains dynamic elements ${XXX}, they will be rendered just like it\n      happens in the body.\n\n      For example :\n\n      When creating the message : mesage.getEventInfo().put(\"docSize\",\n      sizeOfDocument);\n\n      In your template file : The document has ${docSize}KB.\n\n      @author Narcis Paslaru\n\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.ec.notification.service.TemplateDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"generalSettings\">\n    <documentation>\n      This extension point can be used to define general settings. For now only\n      server prefix E.g. : http://server:port/appName/\n\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.ec.notification.service.GeneralSettingsDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"notificationListenerHook\">\n    <object\n      class=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationListenerHookDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"notificationListenerVeto\">\n    <object\n      class=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationListenerVetoDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/NotificationService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notifications",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.service.NotificationContrib/Contributions/org.nuxeo.ecm.platform.notification.service.NotificationContrib--notifications",
              "id": "org.nuxeo.ecm.platform.notification.service.NotificationContrib--notifications",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"notifications\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n\n    <notification autoSubscribed=\"true\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.subscriptions.updated\" name=\"Subscriptions updated\" subject=\"New subscription\" template=\"subscriptionsUpdated\">\n      <event name=\"subscriptionAssigned\"/>\n    </notification>\n\n    <notification autoSubscribed=\"false\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.modif\" name=\"Modification\" subject=\"${docTitle} has been modified by ${author}\" template=\"modif\">\n      <event name=\"documentModified\"/>\n    </notification>\n\n    <notification autoSubscribed=\"false\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.create\" name=\"Creation\" subject=\"${docTitle} has been created by ${author}\" template=\"modif\">\n      <event name=\"documentCreated\"/>\n    </notification>\n\n    <notification autoSubscribed=\"true\" availableIn=\"Section\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.publication\" name=\"Publication\" subject=\"Document published\" subjectTemplate=\"docPublishingSubject\" template=\"publish\">\n      <event name=\"documentPublicationApproved\"/>\n      <event name=\"documentPublicationRejected\"/>\n      <event name=\"documentPublished\"/>\n    </notification>\n\n    <notification autoSubscribed=\"false\" availableIn=\"Section\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.publication\" name=\"PublicationOnClient\" subject=\"Document published\" template=\"publish\">\n      <event name=\"documentPublicationApproved\"/>\n      <event name=\"documentPublished\"/>\n    </notification>\n\n    <notification autoSubscribed=\"false\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.workflow\" name=\"Workflow Change\" subject=\"Workflow event\" template=\"workflow\">\n      <event name=\"workflowNewProcessStarted\"/>\n      <event name=\"workflowProcessEnded\"/>\n      <event name=\"workflowProcessCanceled\"/>\n      <event name=\"workflowAbandoned\"/>\n      <event name=\"workflowTaskCompleted\"/>\n      <event name=\"workflowTaskRejected\"/>\n      <event name=\"workflowTaskAssigned\"/>\n    </notification>\n\n    <notification autoSubscribed=\"false\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.appReviewStarted\" name=\"Approbation review started\" subject=\"Review started for ${docTitle}\" template=\"aprobationWorkflowStarted\">\n      <event name=\"workflowNewProcessStarted\"/>\n    </notification>\n\n    <notification autoSubscribed=\"true\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.taskAssigned\" name=\"Task assigned\" subject=\"Task Assigned for ${docTitle}\" template=\"workflowTaskAssigned\">\n      <event name=\"workflowTaskAssigned\"/>\n    </notification>\n\n    <notification autoSubscribed=\"true\" availableIn=\"all\" channel=\"email\" enabled=\"true\" label=\"label.nuxeo.notifications.email.document\" name=\"Email document\" subject=\"${mailSubject}\" template=\"emailDocument\">\n      <event name=\"emailDocumentSend\"/>\n    </notification>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--templates",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.service.NotificationContrib/Contributions/org.nuxeo.ecm.platform.notification.service.NotificationContrib--templates",
              "id": "org.nuxeo.ecm.platform.notification.service.NotificationContrib--templates",
              "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.7.9",
              "xml": "<extension point=\"templates\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n\n    <template name=\"subscriptionsUpdated\" src=\"templates/subscriptionsUpdated.ftl\"/>\n    <template name=\"modif\" src=\"templates/modif.ftl\"/>\n    <template name=\"publish\" src=\"templates/publish.ftl\"/>\n    <template name=\"docPublishingSubject\" src=\"templates/docPublishingSubject.ftl\"/>\n    <template name=\"auto\" src=\"templates/auto.ftl\"/>\n    <template name=\"workflow\" src=\"templates/workflow.ftl\"/>\n    <template name=\"aprobationWorkflowStarted\" src=\"templates/appReviewStarted.ftl\"/>\n    <template name=\"emailDocument\" src=\"templates/emailDocument.ftl\"/>\n    <template name=\"workflowTaskAssigned\" src=\"templates/workflowTaskAssigned.ftl\"/>\n    <template name=\"workflowTaskDelegated\" src=\"templates/workflowTaskDelegated.ftl\"/>\n    <template name=\"defaultNotifTemplate\" src=\"templates/defaultNotifTemplate.ftl\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notificationListenerVeto",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.service.NotificationContrib/Contributions/org.nuxeo.ecm.platform.notification.service.NotificationContrib--notificationListenerVeto",
              "id": "org.nuxeo.ecm.platform.notification.service.NotificationContrib--notificationListenerVeto",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"notificationListenerVeto\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n    <veto class=\"org.nuxeo.ecm.platform.ec.notification.VersionVeto\" name=\"versionVeto\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.service.NotificationContrib",
          "name": "org.nuxeo.ecm.platform.notification.service.NotificationContrib",
          "requirements": [],
          "resolutionOrder": 426,
          "services": [],
          "startOrder": 359,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component\n  name=\"org.nuxeo.ecm.platform.notification.service.NotificationContrib\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n    point=\"notifications\">\n\n    <notification name=\"Subscriptions updated\" channel=\"email\" enabled=\"true\" availableIn=\"Workspace\"\n      autoSubscribed=\"true\" template=\"subscriptionsUpdated\" subject=\"New subscription\" label=\"label.nuxeo.notifications.subscriptions.updated\">\n      <event name=\"subscriptionAssigned\"/>\n    </notification>\n\n    <notification name=\"Modification\" channel=\"email\" enabled=\"true\" availableIn=\"Workspace\"\n      autoSubscribed=\"false\" template=\"modif\" subject=\"${docTitle} has been modified by ${author}\" label=\"label.nuxeo.notifications.modif\">\n      <event name=\"documentModified\"/>\n    </notification>\n\n    <notification name=\"Creation\" channel=\"email\" enabled=\"true\" availableIn=\"Workspace\"\n      autoSubscribed=\"false\" template=\"modif\" subject=\"${docTitle} has been created by ${author}\" label=\"label.nuxeo.notifications.create\">\n      <event name=\"documentCreated\"/>\n    </notification>\n\n    <notification name=\"Publication\" channel=\"email\" enabled=\"true\" availableIn=\"Section\" subjectTemplate=\"docPublishingSubject\"\n      autoSubscribed=\"true\" template=\"publish\" subject=\"Document published\" label=\"label.nuxeo.notifications.publication\">\n      <event name=\"documentPublicationApproved\"/>\n      <event name=\"documentPublicationRejected\"/>\n      <event name=\"documentPublished\"/>\n    </notification>\n\n    <notification name=\"PublicationOnClient\" channel=\"email\" enabled=\"true\" availableIn=\"Section\"\n      autoSubscribed=\"false\" template=\"publish\" subject=\"Document published\" label=\"label.nuxeo.notifications.publication\">\n      <event name=\"documentPublicationApproved\"/>\n      <event name=\"documentPublished\"/>\n    </notification>\n\n    <notification name=\"Workflow Change\" channel=\"email\" enabled=\"true\" availableIn=\"Workspace\"\n      autoSubscribed=\"false\" template=\"workflow\" subject=\"Workflow event\" label=\"label.nuxeo.notifications.workflow\">\n      <event name=\"workflowNewProcessStarted\"/>\n      <event name=\"workflowProcessEnded\"/>\n      <event name=\"workflowProcessCanceled\"/>\n      <event name=\"workflowAbandoned\"/>\n      <event name=\"workflowTaskCompleted\"/>\n      <event name=\"workflowTaskRejected\"/>\n      <event name=\"workflowTaskAssigned\"/>\n    </notification>\n\n    <notification name=\"Approbation review started\" channel=\"email\" enabled=\"true\" availableIn=\"Workspace\"\n      autoSubscribed=\"false\" template=\"aprobationWorkflowStarted\" subject=\"Review started for ${docTitle}\"\n      label=\"label.nuxeo.notifications.appReviewStarted\">\n      <event name=\"workflowNewProcessStarted\"/>\n    </notification>\n\n    <notification name=\"Task assigned\" channel=\"email\" enabled=\"true\" availableIn=\"Workspace\"\n      autoSubscribed=\"true\" template=\"workflowTaskAssigned\" subject=\"Task Assigned for ${docTitle}\"\n      label=\"label.nuxeo.notifications.taskAssigned\">\n      <event name=\"workflowTaskAssigned\"/>\n    </notification>\n\n    <notification name=\"Email document\" channel=\"email\" enabled=\"true\" availableIn=\"all\"\n      autoSubscribed=\"true\" template=\"emailDocument\" subject=\"${mailSubject}\"\n      label=\"label.nuxeo.notifications.email.document\">\n      <event name=\"emailDocumentSend\"/>\n    </notification>\n\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n    point=\"templates\">\n\n    <template name=\"subscriptionsUpdated\" src=\"templates/subscriptionsUpdated.ftl\" />\n    <template name=\"modif\" src=\"templates/modif.ftl\" />\n    <template name=\"publish\" src=\"templates/publish.ftl\" />\n    <template name=\"docPublishingSubject\" src=\"templates/docPublishingSubject.ftl\" />\n    <template name=\"auto\" src=\"templates/auto.ftl\" />\n    <template name=\"workflow\" src=\"templates/workflow.ftl\" />\n    <template name=\"aprobationWorkflowStarted\" src=\"templates/appReviewStarted.ftl\" />\n    <template name=\"emailDocument\" src=\"templates/emailDocument.ftl\" />\n    <template name=\"workflowTaskAssigned\" src=\"templates/workflowTaskAssigned.ftl\"/>\n    <template name=\"workflowTaskDelegated\" src=\"templates/workflowTaskDelegated.ftl\"/>\n    <template name=\"defaultNotifTemplate\" src=\"templates/defaultNotifTemplate.ftl\" />\n\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n    point=\"notificationListenerVeto\">\n    <veto name=\"versionVeto\" class=\"org.nuxeo.ecm.platform.ec.notification.VersionVeto\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/notification-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.rendering.impl.RenderingServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n\n    A Rendering service is managing rendering engines\n\n    @author Bogdan Stefanescu <a href=\"mailto:bs@nuxeo.com\"/>\n<pre>\n    <extension point=\"engines\" target=\"org.nuxeo.ecm.platform.rendering\">\n        <engine class=\"org.nuxeo.MyEngine\" format=\"xhtml\"/>\n    </extension>\n</pre>\n",
          "documentationHtml": "<p>\nA Rendering service is managing rendering engines\n</p><p>\n</p><pre>\n\n\n\n</pre>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.rendering",
              "descriptors": [
                "org.nuxeo.ecm.platform.rendering.impl.RenderingEngineDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.rendering/ExtensionPoints/org.nuxeo.ecm.platform.rendering--engines",
              "id": "org.nuxeo.ecm.platform.rendering--engines",
              "label": "engines (org.nuxeo.ecm.platform.rendering)",
              "name": "engines",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.rendering",
          "name": "org.nuxeo.ecm.platform.rendering",
          "requirements": [],
          "resolutionOrder": 427,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.rendering",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.rendering/Services/org.nuxeo.ecm.platform.rendering.RenderingService",
              "id": "org.nuxeo.ecm.platform.rendering.RenderingService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 867,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.rendering\">\n\n  <documentation>\n    A Rendering service is managing rendering engines\n\n    @author Bogdan Stefanescu <a href=\"mailto:bs@nuxeo.com\" />\n\n    <pre>\n    <extension\n    target=\"org.nuxeo.ecm.platform.rendering\"\n    point=\"engines\">\n\n    <engine format=\"xhtml\" class=\"org.nuxeo.MyEngine\"/>\n\n    </extension>\n    </pre>\n  </documentation>\n\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.rendering.impl.RenderingServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.rendering.RenderingService\" />\n  </service>\n\n  <extension-point name=\"engines\">\n    <object\n      class=\"org.nuxeo.ecm.platform.rendering.impl.RenderingEngineDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendering-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Remove notification subscriptions from document when it is checked in.\n    \n",
              "documentationHtml": "<p>\nRemove notification subscriptions from document when it is checked in.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.listener/Contributions/org.nuxeo.ecm.platform.notification.listener--listener",
              "id": "org.nuxeo.ecm.platform.notification.listener--listener",
              "registrationOrder": 31,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <documentation>\n      Remove notification subscriptions from document when it is checked in.\n    </documentation>\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.ec.notification.NotificationCheckedInListener\" name=\"notificationCheckedInListener\" postCommit=\"false\" priority=\"-30\">\n      <event>documentCheckedIn</event>\n    </listener>\n\n    <documentation>\n      Copy relations from the source document to the newly published proxy.\n    </documentation>\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.ec.notification.ProxySubscriptionPropagationListener\" name=\"proxySubscriptionPropagationListener\" postCommit=\"false\" priority=\"-20\">\n      <event>documentProxyPublished</event>\n    </listener>\n\n    <documentation>\n     Then the notifications to subscribed users.\n    </documentation>\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.ec.notification.NotificationEventListener\" name=\"notificationListener\" postCommit=\"true\" priority=\"120\">\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.listener",
          "name": "org.nuxeo.ecm.platform.notification.listener",
          "requirements": [],
          "resolutionOrder": 428,
          "services": [],
          "startOrder": 358,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.notification.listener\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n\n    <documentation>\n      Remove notification subscriptions from document when it is checked in.\n    </documentation>\n\n    <listener name=\"notificationCheckedInListener\" async=\"false\" postCommit=\"false\"\n              class=\"org.nuxeo.ecm.platform.ec.notification.NotificationCheckedInListener\" priority=\"-30\">\n      <event>documentCheckedIn</event>\n    </listener>\n\n    <documentation>\n      Copy relations from the source document to the newly published proxy.\n    </documentation>\n\n    <listener name=\"proxySubscriptionPropagationListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.ec.notification.ProxySubscriptionPropagationListener\" priority=\"-20\">\n      <event>documentProxyPublished</event>\n    </listener>\n\n    <documentation>\n     Then the notifications to subscribed users.\n    </documentation>\n\n    <listener name=\"notificationListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.platform.ec.notification.NotificationEventListener\" priority=\"120\">\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/notification-listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.operations/Contributions/org.nuxeo.ecm.platform.ec.notification.operations--operations",
              "id": "org.nuxeo.ecm.platform.ec.notification.operations--operations",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <operation class=\"org.nuxeo.ecm.platform.ec.notification.automation.SubscribeOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.ec.notification.automation.UnsubscribeOperation\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.operations",
          "name": "org.nuxeo.ecm.platform.ec.notification.operations",
          "requirements": [],
          "resolutionOrder": 429,
          "services": [],
          "startOrder": 319,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ec.notification.operations\" version=\"1.0\">\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n\n    <operation class=\"org.nuxeo.ecm.platform.ec.notification.automation.SubscribeOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.ec.notification.automation.UnsubscribeOperation\" />\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/notification-operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notifications.adapter/Contributions/org.nuxeo.ecm.platform.ec.notifications.adapter--adapters",
              "id": "org.nuxeo.ecm.platform.ec.notifications.adapter--adapters",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n\n    <adapter class=\"org.nuxeo.ecm.platform.ec.notification.SubscriptionAdapter\" factory=\"org.nuxeo.ecm.platform.ec.notification.SubscriptionAdapterFactory\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notifications.adapter",
          "name": "org.nuxeo.ecm.platform.ec.notifications.adapter",
          "requirements": [],
          "resolutionOrder": 430,
          "services": [],
          "startOrder": 320,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.ec.notifications.adapter\">\n\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n\n    <adapter class=\"org.nuxeo.ecm.platform.ec.notification.SubscriptionAdapter\"\n      factory=\"org.nuxeo.ecm.platform.ec.notification.SubscriptionAdapterFactory\" />\n\n  </extension>\n\n\n\n\n</component>",
          "xmlFileName": "/OSGI-INF/adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.jsonEnrichers/Contributions/org.nuxeo.ecm.platform.ec.notification.jsonEnrichers--marshallers",
              "id": "org.nuxeo.ecm.platform.ec.notification.jsonEnrichers--marshallers",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.platform.ec.notification.io.NotificationsJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.jsonEnrichers",
          "name": "org.nuxeo.ecm.platform.ec.notification.jsonEnrichers",
          "requirements": [],
          "resolutionOrder": 431,
          "services": [],
          "startOrder": 318,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.ec.notification.jsonEnrichers\">\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.platform.ec.notification.io.NotificationsJsonEnricher\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/json-enrichers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notifications.coretypes/Contributions/org.nuxeo.ecm.platform.ec.notifications.coretypes--schema",
              "id": "org.nuxeo.ecm.platform.ec.notifications.coretypes--schema",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema isVersionWritable=\"true\" name=\"notification\" prefix=\"notif\" src=\"schemas/notification.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notifications.coretypes/Contributions/org.nuxeo.ecm.platform.ec.notifications.coretypes--doctype",
              "id": "org.nuxeo.ecm.platform.ec.notifications.coretypes--doctype",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"Notifiable\">\n      <schema name=\"notification\"/>\n    </facet>\n    <proxies>\n      <schema name=\"notification\"/>\n    </proxies>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notifications.coretypes",
          "name": "org.nuxeo.ecm.platform.ec.notifications.coretypes",
          "requirements": [],
          "resolutionOrder": 432,
          "services": [],
          "startOrder": 321,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.ec.notifications.coretypes\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"notification\" prefix=\"notif\" src=\"schemas/notification.xsd\" isVersionWritable=\"true\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <facet name=\"Notifiable\">\n      <schema name=\"notification\" />\n    </facet>\n    <proxies>\n      <schema name=\"notification\" />\n    </proxies>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-notification-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification",
      "id": "org.nuxeo.ecm.platform.notification",
      "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: 2023.7.9-t20240130-105130\r\nBundle-Name: NXNotification Core\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.notification\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/NotificationService.xml,OSGI-INF/notification-\r\n contrib.xml,OSGI-INF/rendering-service.xml,OSGI-INF/notification-listen\r\n er-contrib.xml,OSGI-INF/notification-operations-contrib.xml,OSGI-INF/ad\r\n apter-contrib.xml,OSGI-INF/json-enrichers-contrib.xml,OSGI-INF/core-con\r\n trib.xml\r\nExport-Package: org.nuxeo.ecm.platform.ec.notification,org.nuxeo.ecm.pla\r\n tform.ec.notification.ejb,org.nuxeo.ecm.platform.ec.notification.interf\r\n aces,org.nuxeo.ecm.platform.ec.notification.service\r\nRequire-Bundle: org.nuxeo.ecm.platform.placeful.core,org.nuxeo.ecm.platf\r\n orm.usermanager,org.nuxeo.ecm.platform.notification.api,org.nuxeo.ecm.p\r\n latform.url.api,org.nuxeo.ecm.core.event\r\n\r\n",
      "maxResolutionOrder": 432,
      "minResolutionOrder": 425,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.placeful.core",
        "org.nuxeo.ecm.platform.usermanager",
        "org.nuxeo.ecm.platform.notification.api",
        "org.nuxeo.ecm.platform.url.api",
        "org.nuxeo.ecm.core.event"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-rendition-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.rendition.api",
          "org.nuxeo.ecm.platform.rendition.core",
          "org.nuxeo.ecm.platform.rendition.publisher",
          "org.nuxeo.ecm.platform.rendition.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition",
        "id": "grp:org.nuxeo.ecm.platform.rendition",
        "name": "org.nuxeo.ecm.platform.rendition",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.rendition.api",
      "components": [],
      "fileName": "nuxeo-platform-rendition-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.api",
      "id": "org.nuxeo.ecm.platform.rendition.api",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Platform Rendition API\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.rendition.api;singleton:=tru\r\n e\r\nBundle-Vendor: Nuxeo\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-web-common",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.web.common",
          "org.nuxeo.ecm.platform.webapp.types"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web",
        "id": "grp:org.nuxeo.ecm.platform.web",
        "name": "org.nuxeo.ecm.platform.web",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.web.common",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
          "declaredStartOrder": null,
          "documentation": "\n    The pluggable authentication service defines a plugin API for the Nuxeo Authentication Filter.\n    This service let you :\n    - define new Authentication Plugins\n    - define authentication chains\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe pluggable authentication service defines a plugin API for the Nuxeo Authentication Filter.\nThis service let you :\n- define new Authentication Plugins\n- define authentication chains\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.auth.service.AuthenticationPluginDescriptor"
              ],
              "documentation": "\n      Registry for Authentication Plugins.\n      Authentication plugins are responsible for :\n      - generating the authentication prompt (if needed)\n      - get the user identity\n      - checking the user credentials if they're not login/password based\n\n      Authentication plugin must implement the NuxeoAuthenticationPlugin interface.\n\n      Default implementation of Authentication Plugins are :\n      - Form based authentication\n      - HTTP Basic Authentication\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nRegistry for Authentication Plugins.\nAuthentication plugins are responsible for :\n- generating the authentication prompt (if needed)\n- get the user identity\n- checking the user credentials if they&#39;re not login/password based\n</p><p>\nAuthentication plugin must implement the NuxeoAuthenticationPlugin interface.\n</p><p>\nDefault implementation of Authentication Plugins are :\n- Form based authentication\n- HTTP Basic Authentication\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--authenticators",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--authenticators",
              "label": "authenticators (org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService)",
              "name": "authenticators",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.auth.service.AuthenticationChainDescriptor"
              ],
              "documentation": "\n      Defines the chain of AuthenticationPlugin to use when trying to authenticate.\n      = The authentication Plugins are tried in the chain order.\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nDefines the chain of AuthenticationPlugin to use when trying to authenticate.\n&#61; The authentication Plugins are tried in the chain order.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--chain",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--chain",
              "label": "chain (org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService)",
              "name": "chain",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.auth.service.StartURLPatternDescriptor"
              ],
              "documentation": "\n      Defines a list of URL prefix that is considered safe to start a new session.\n      Typically, in default webapp you will have :\n      - GET url patterns\n      - nxstartup.faces\n      - RSS/ATOM get URL\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nDefines a list of URL prefix that is considered safe to start a new session.\nTypically, in default webapp you will have :\n- GET url patterns\n- nxstartup.faces\n- RSS/ATOM get URL\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--startURL",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--startURL",
              "label": "startURL (org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService)",
              "name": "startURL",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.auth.service.SessionManagerDescriptor"
              ],
              "documentation": "\n      Contribute a SessionManager to handle Session and url manipulation\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nContribute a SessionManager to handle Session and url manipulation\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--sessionManager",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--sessionManager",
              "label": "sessionManager (org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService)",
              "name": "sessionManager",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.auth.service.OpenUrlDescriptor"
              ],
              "documentation": "\n      Contribute pattern to define urls that can be accessed without authentication\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nContribute pattern to define urls that can be accessed without authentication\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--openUrl",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--openUrl",
              "label": "openUrl (org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService)",
              "name": "openUrl",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.auth.service.SpecificAuthChainDescriptor"
              ],
              "documentation": "\n      Contribute specific authentication chain for specific urls or request headers.\n      This is usefull to be able to change the authentication plugins used for a dedicated protocol (WSS, WebDav ...)\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nContribute specific authentication chain for specific urls or request headers.\nThis is usefull to be able to change the authentication plugins used for a dedicated protocol (WSS, WebDav ...)\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--specificChains",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--specificChains",
              "label": "specificChains (org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService)",
              "name": "specificChains",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.auth.service.LoginScreenConfig"
              ],
              "documentation": "\n      Configure the Login Screen : header, footer, styles, openid providers ...\n      <p>\n        The variable /nuxeo can be used to avoid\n        hardcoding the default application path (/nuxeo)\n      </p>\n\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nConfigure the Login Screen : header, footer, styles, openid providers ...\n</p><p>\nThe variable /nuxeo can be used to avoid\nhardcoding the default application path (/nuxeo)\n</p>\n<p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--loginScreen",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--loginScreen",
              "label": "loginScreen (org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService)",
              "name": "loginScreen",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.LoginAsComponent--implementation",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService/Contributions/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--implementation",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--implementation",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.LoginAsComponent",
                "name": "org.nuxeo.runtime.LoginAsComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"implementation\" target=\"org.nuxeo.runtime.LoginAsComponent\">\n    <implementation class=\"org.nuxeo.ecm.platform.ui.web.auth.service.LoginAsImpl\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
          "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
          "requirements": [],
          "resolutionOrder": 606,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService/Services/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 885,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n  <implementation class=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"/>\n  </service>\n\n  <documentation>\n    The pluggable authentication service defines a plugin API for the Nuxeo Authentication Filter.\n    This service let you :\n    - define new Authentication Plugins\n    - define authentication chains\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <extension target=\"org.nuxeo.runtime.LoginAsComponent\" point=\"implementation\">\n    <implementation class=\"org.nuxeo.ecm.platform.ui.web.auth.service.LoginAsImpl\"/>\n  </extension>\n\n  <extension-point name=\"authenticators\">\n    <documentation>\n      Registry for Authentication Plugins.\n      Authentication plugins are responsible for :\n      - generating the authentication prompt (if needed)\n      - get the user identity\n      - checking the user credentials if they're not login/password based\n\n      Authentication plugin must implement the NuxeoAuthenticationPlugin interface.\n\n      Default implementation of Authentication Plugins are :\n      - Form based authentication\n      - HTTP Basic Authentication\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.ui.web.auth.service.AuthenticationPluginDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"chain\">\n    <documentation>\n      Defines the chain of AuthenticationPlugin to use when trying to authenticate.\n      = The authentication Plugins are tried in the chain order.\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.ui.web.auth.service.AuthenticationChainDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"startURL\">\n    <documentation>\n      Defines a list of URL prefix that is considered safe to start a new session.\n      Typically, in default webapp you will have :\n      - GET url patterns\n      - nxstartup.faces\n      - RSS/ATOM get URL\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.ui.web.auth.service.StartURLPatternDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"sessionManager\">\n    <documentation>\n      Contribute a SessionManager to handle Session and url manipulation\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.ui.web.auth.service.SessionManagerDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"openUrl\">\n    <documentation>\n      Contribute pattern to define urls that can be accessed without authentication\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.ui.web.auth.service.OpenUrlDescriptor\"/>\n  </extension-point>\n\n\n  <extension-point name=\"specificChains\">\n    <documentation>\n      Contribute specific authentication chain for specific urls or request headers.\n      This is usefull to be able to change the authentication plugins used for a dedicated protocol (WSS, WebDav ...)\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.ui.web.auth.service.SpecificAuthChainDescriptor\"/>\n  </extension-point>\n\n\n  <extension-point name=\"loginScreen\">\n\n    <documentation>\n      Configure the Login Screen : header, footer, styles, openid providers ...\n      <p>\n        The variable ${org.nuxeo.ecm.contextPath} can be used to avoid\n        hardcoding the default application path (/nuxeo)\n      </p>\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.ui.web.auth.service.LoginScreenConfig\"/>\n\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/authentication-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--authenticators",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.defaultConfig/Contributions/org.nuxeo.ecm.platform.ui.web.auth.defaultConfig--authenticators",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.defaultConfig--authenticators",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"authenticators\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <authenticationPlugin class=\"org.nuxeo.ecm.platform.ui.web.auth.plugins.FormAuthenticator\" enabled=\"true\" name=\"FORM_AUTH\">\n      <needStartingURLSaving>true</needStartingURLSaving>\n      <parameters>\n        <parameter name=\"LoginPage\">login.jsp</parameter>\n        <parameter name=\"UsernameKey\">user_name</parameter>\n        <parameter name=\"PasswordKey\">********</parameter>\n      </parameters>\n    </authenticationPlugin>\n\n    <authenticationPlugin class=\"org.nuxeo.ecm.platform.ui.web.auth.plugins.BasicAuthenticator\" enabled=\"true\" name=\"BASIC_AUTH\">\n      <needStartingURLSaving>false</needStartingURLSaving>\n      <stateful>false</stateful>\n      <parameters>\n        <parameter name=\"RealmName\">Nuxeo 5 EP</parameter>\n        <parameter name=\"AutoPrompt\">false</parameter>\n        <parameter name=\"ForcePromptURL_RSS\">\n          getSyndicationDocument.faces\n        </parameter>\n        <parameter name=\"ForcePromptURL_RSS_SEARCH\">\n          getSyndicationSearch.faces\n        </parameter>\n        <parameter name=\"ForcePromptURL_Restlet\">restAPI/</parameter>\n        <parameter name=\"ForcePromptURL_WebEngineRest\">site/api/</parameter>\n        <parameter name=\"ForcePromptURL_WebEngineRSS\">site/sites/@rss/</parameter>\n        <parameter name=\"ForcePromptURL_WebEngineBlogsRSS\">site/blogs/@rss/</parameter>\n      </parameters>\n    </authenticationPlugin>\n\n    <authenticationPlugin class=\"org.nuxeo.ecm.platform.ui.web.auth.plugins.AnonymousAuthenticator\" enabled=\"true\" name=\"ANONYMOUS_AUTH\">\n    </authenticationPlugin>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--chain",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.defaultConfig/Contributions/org.nuxeo.ecm.platform.ui.web.auth.defaultConfig--chain",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.defaultConfig--chain",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"chain\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <authenticationChain>\n      <plugins>\n        <plugin>BASIC_AUTH</plugin>\n        <plugin>TOKEN_AUTH</plugin>\n        <plugin>OAUTH2_AUTH</plugin>\n        <plugin>JWT_AUTH</plugin>\n        <plugin>FORM_AUTH</plugin>\n        <plugin>ANONYMOUS_AUTH</plugin>\n      </plugins>\n    </authenticationChain>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--startURL",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.defaultConfig/Contributions/org.nuxeo.ecm.platform.ui.web.auth.defaultConfig--startURL",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.defaultConfig--startURL",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>nxdoc/</pattern>\n        <pattern>nxpath/</pattern>\n        <pattern>getDocument.faces</pattern>\n        <pattern>nxstartup.faces</pattern>\n        <pattern>getSyndicationDocument.faces</pattern>\n        <pattern>getSyndicationSearch.faces</pattern>\n        <pattern>nxfile/</pattern>\n        <pattern>nxbigfile/</pattern>\n        <pattern>nxbigblob/</pattern>\n        <pattern>nxpdffile/</pattern>\n        <pattern>nxeditfile/</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.auth.defaultConfig",
          "name": "org.nuxeo.ecm.platform.ui.web.auth.defaultConfig",
          "requirements": [],
          "resolutionOrder": 607,
          "services": [],
          "startOrder": 534,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.auth.defaultConfig\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"authenticators\">\n\n    <authenticationPlugin name=\"FORM_AUTH\" enabled=\"true\" class=\"org.nuxeo.ecm.platform.ui.web.auth.plugins.FormAuthenticator\">\n      <needStartingURLSaving>true</needStartingURLSaving>\n      <parameters>\n        <parameter name=\"LoginPage\">login.jsp</parameter>\n        <parameter name=\"UsernameKey\">user_name</parameter>\n        <parameter name=\"PasswordKey\">********</parameter>\n      </parameters>\n    </authenticationPlugin>\n\n    <authenticationPlugin name=\"BASIC_AUTH\" enabled=\"true\" class=\"org.nuxeo.ecm.platform.ui.web.auth.plugins.BasicAuthenticator\">\n      <needStartingURLSaving>false</needStartingURLSaving>\n      <stateful>false</stateful>\n      <parameters>\n        <parameter name=\"RealmName\">Nuxeo 5 EP</parameter>\n        <parameter name=\"AutoPrompt\">false</parameter>\n        <parameter name=\"ForcePromptURL_RSS\">\n          getSyndicationDocument.faces\n        </parameter>\n        <parameter name=\"ForcePromptURL_RSS_SEARCH\">\n          getSyndicationSearch.faces\n        </parameter>\n        <parameter name=\"ForcePromptURL_Restlet\">restAPI/</parameter>\n        <parameter name=\"ForcePromptURL_WebEngineRest\">site/api/</parameter>\n        <parameter name=\"ForcePromptURL_WebEngineRSS\">site/sites/@rss/</parameter>\n        <parameter name=\"ForcePromptURL_WebEngineBlogsRSS\">site/blogs/@rss/</parameter>\n      </parameters>\n    </authenticationPlugin>\n\n    <authenticationPlugin name=\"ANONYMOUS_AUTH\" enabled=\"true\" class=\"org.nuxeo.ecm.platform.ui.web.auth.plugins.AnonymousAuthenticator\">\n    </authenticationPlugin>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"chain\">\n\n    <authenticationChain>\n      <plugins>\n        <plugin>BASIC_AUTH</plugin>\n        <plugin>TOKEN_AUTH</plugin>\n        <plugin>OAUTH2_AUTH</plugin>\n        <plugin>JWT_AUTH</plugin>\n        <plugin>FORM_AUTH</plugin>\n        <plugin>ANONYMOUS_AUTH</plugin>\n      </plugins>\n    </authenticationChain>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"startURL\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>nxdoc/</pattern>\n        <pattern>nxpath/</pattern>\n        <pattern>getDocument.faces</pattern>\n        <pattern>nxstartup.faces</pattern>\n        <pattern>getSyndicationDocument.faces</pattern>\n        <pattern>getSyndicationSearch.faces</pattern>\n        <pattern>nxfile/</pattern>\n        <pattern>nxbigfile/</pattern>\n        <pattern>nxbigblob/</pattern>\n        <pattern>nxpdffile/</pattern>\n        <pattern>nxeditfile/</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/authentication-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
          "declaredStartOrder": null,
          "documentation": "\n    The Request Controller service provides an extension point to apply specific configuration\n    to httpRequest mapping a defined URL pattern. It's possible to handle synchronization, transaction or cache\n    configuration.\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe Request Controller service provides an extension point to apply specific configuration\nto httpRequest mapping a defined URL pattern. It&#39;s possible to handle synchronization, transaction or cache\nconfiguration.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
              "descriptors": [
                "org.nuxeo.ecm.platform.web.common.requestcontroller.service.FilterConfigDescriptor"
              ],
              "documentation": "\n      Define a new filterConfig.\n\n      -filterConfig\n        - name: name of the Filter.\n        - transactional: use transaction.\n        - synchonize: is synchronized\n        - cached: if true, add cache-control to header\n        - cacheTime: cache duration.\n        - private: if true, cache is private, public if false.\n\n      -pattern: url pattern to match\n\n      Example of a filterConfig Registration:\n\n      <code>\n    <filterConfig cached=\"true\" cachetime=\"3600\" name=\"filterName\"\n        private=\"true\" synchonize=\"true\" transactional=\"true\">\n        <pattern>/nuxeo/urlPattern/.*</pattern>\n    </filterConfig>\n</code>\n\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
              "documentationHtml": "<p>\nDefine a new filterConfig.\n</p><p>\n-filterConfig\n- name: name of the Filter.\n- transactional: use transaction.\n- synchonize: is synchronized\n- cached: if true, add cache-control to header\n- cacheTime: cache duration.\n- private: if true, cache is private, public if false.\n</p><p>\n-pattern: url pattern to match\n</p><p>\nExample of a filterConfig Registration:\n</p><p>\n</p><pre><code>    &lt;filterConfig cached&#61;&#34;true&#34; cachetime&#61;&#34;3600&#34; name&#61;&#34;filterName&#34;\n        private&#61;&#34;true&#34; synchonize&#61;&#34;true&#34; transactional&#61;&#34;true&#34;&gt;\n        &lt;pattern&gt;/nuxeo/urlPattern/.*&lt;/pattern&gt;\n    &lt;/filterConfig&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService/ExtensionPoints/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--filterConfig",
              "id": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--filterConfig",
              "label": "filterConfig (org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService)",
              "name": "filterConfig",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
              "descriptors": [
                "org.nuxeo.ecm.platform.web.common.requestcontroller.service.NuxeoCorsFilterDescriptor"
              ],
              "documentation": "\n      Add a CORS compliant url's pattern\n\n      Mandatory:\n       - name: name of the config\n       - pattern: url pattern to match\n\n      Optionnal:\n       - allowGenericHttpRequests: If false, only valid and accepted CORS\n         requests that be allowed (strict CORS filtering).\n       - allowOrigin: Whitespace-separated list of origins that the CORS\n         filter must allow.\n       - allowSubdomains: If true the CORS filter will allow requests from any\n         origin which is a subdomain origin of the allowed origins.\n       - supportedMethods: List of the supported HTTP methods.\n       - supportedHeaders: The names of the supported author request headers.\n       - exposedHeaders: List of the response headers other than simple\n         response headers that the browser should expose to the author of the\n         cross-domain request through the XMLHttpRequest.getResponseHeader()\n         method.\n       - supportsCredentials: Indicates whether user credentials, such as\n         cookies, HTTP authentication or client-side certificates, are\n         supported.\n       - maxAge: Indicates how long the results of a preflight request\n         can be cached by the web browser, in seconds.\n\n      Some samples:\n       - Minimal contribution:\n      <code>\n    <corsConfig name=\"minimal\">\n        <pattern>/nuxeo/site/.*</pattern>\n    </corsConfig>\n</code>\n\n\n       - Contribution with default values:\n      <code>\n    <corsConfig allowGenericHttpRequests=\"true\" allowOrigin=\"*\"\n        allowSubdomains=\"false\" exposedHeaders=\"\" maxAge=\"-1\"\n        name=\"defaults\" supportedHeaders=\"*\"\n        supportedMethods=\"GET, POST, HEAD, OPTIONS\" supportsCredentials=\"true\">\n        <pattern>/nuxeo/site/.*</pattern>\n    </corsConfig>\n</code>\n\n\n       - Other dummy contribution:\n      <code>\n    <corsConfig allowGenericHttpRequests=\"true\"\n        allowOrigin=\"http://example.com http://example.com:8080\"\n        allowSubdomains=\"true\" exposedHeaders=\"X-Custom-1, X-Custom-2\"\n        maxAge=\"3600\" name=\"dummy\"\n        supportedHeaders=\"Content-Type, X-Requested-With\"\n        supportedMethods=\"GET\" supportsCredentials=\"false\">\n        <pattern>/nuxeo/site/.*</pattern>\n    </corsConfig>\n</code>\n\n\n      @since 5.7.2\n    \n",
              "documentationHtml": "<p>\nAdd a CORS compliant url&#39;s pattern\n</p><p>\nMandatory:\n- name: name of the config\n- pattern: url pattern to match\n</p><p>\nOptionnal:\n- allowGenericHttpRequests: If false, only valid and accepted CORS\nrequests that be allowed (strict CORS filtering).\n- allowOrigin: Whitespace-separated list of origins that the CORS\nfilter must allow.\n- allowSubdomains: If true the CORS filter will allow requests from any\norigin which is a subdomain origin of the allowed origins.\n- supportedMethods: List of the supported HTTP methods.\n- supportedHeaders: The names of the supported author request headers.\n- exposedHeaders: List of the response headers other than simple\nresponse headers that the browser should expose to the author of the\ncross-domain request through the XMLHttpRequest.getResponseHeader()\nmethod.\n- supportsCredentials: Indicates whether user credentials, such as\ncookies, HTTP authentication or client-side certificates, are\nsupported.\n- maxAge: Indicates how long the results of a preflight request\ncan be cached by the web browser, in seconds.\n</p><p>\nSome samples:\n- Minimal contribution:\n</p><p></p><pre><code>    &lt;corsConfig name&#61;&#34;minimal&#34;&gt;\n        &lt;pattern&gt;/nuxeo/site/.*&lt;/pattern&gt;\n    &lt;/corsConfig&gt;\n</code></pre><p>\n- Contribution with default values:\n</p><p></p><pre><code>    &lt;corsConfig allowGenericHttpRequests&#61;&#34;true&#34; allowOrigin&#61;&#34;*&#34;\n        allowSubdomains&#61;&#34;false&#34; exposedHeaders&#61;&#34;&#34; maxAge&#61;&#34;-1&#34;\n        name&#61;&#34;defaults&#34; supportedHeaders&#61;&#34;*&#34;\n        supportedMethods&#61;&#34;GET, POST, HEAD, OPTIONS&#34; supportsCredentials&#61;&#34;true&#34;&gt;\n        &lt;pattern&gt;/nuxeo/site/.*&lt;/pattern&gt;\n    &lt;/corsConfig&gt;\n</code></pre><p>\n- Other dummy contribution:\n</p><p></p><pre><code>    &lt;corsConfig allowGenericHttpRequests&#61;&#34;true&#34;\n        allowOrigin&#61;&#34;http://example.com http://example.com:8080&#34;\n        allowSubdomains&#61;&#34;true&#34; exposedHeaders&#61;&#34;X-Custom-1, X-Custom-2&#34;\n        maxAge&#61;&#34;3600&#34; name&#61;&#34;dummy&#34;\n        supportedHeaders&#61;&#34;Content-Type, X-Requested-With&#34;\n        supportedMethods&#61;&#34;GET&#34; supportsCredentials&#61;&#34;false&#34;&gt;\n        &lt;pattern&gt;/nuxeo/site/.*&lt;/pattern&gt;\n    &lt;/corsConfig&gt;\n</code></pre><p>\n&#64;since 5.7.2\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService/ExtensionPoints/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--corsConfig",
              "id": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--corsConfig",
              "label": "corsConfig (org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService)",
              "name": "corsConfig",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
              "descriptors": [
                "org.nuxeo.ecm.platform.web.common.requestcontroller.service.NuxeoHeaderDescriptor"
              ],
              "documentation": "\n      Define headers to apply to the HTTP response.\n\n      -header\n      - name: name of the header.\n      - enabled: flag to enable/disable a header (default value is true)\n\n      Example of a response header Registration:\n\n      <code>\n    <header enabled=\"true\" name=\"WWW-Authenticate\">basic</header>\n</code>\n\n      @author Thierry Martins (tm@nuxeo.com)\n      @since 6.0\n    \n",
              "documentationHtml": "<p>\nDefine headers to apply to the HTTP response.\n</p><p>\n-header\n- name: name of the header.\n- enabled: flag to enable/disable a header (default value is true)\n</p><p>\nExample of a response header Registration:\n</p><p>\n</p><pre><code>    &lt;header enabled&#61;&#34;true&#34; name&#61;&#34;WWW-Authenticate&#34;&gt;basic&lt;/header&gt;\n</code></pre><p>\n&#64;since 6.0\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService/ExtensionPoints/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--responseHeaders",
              "id": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--responseHeaders",
              "label": "responseHeaders (org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService)",
              "name": "responseHeaders",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
          "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
          "requirements": [],
          "resolutionOrder": 610,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService/Services/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerManager",
              "id": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 899,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n  <implementation\n          class=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\" />\n  <documentation>\n    The Request Controller service provides an extension point to apply specific configuration\n    to httpRequest mapping a defined URL pattern. It's possible to handle synchronization, transaction or cache\n    configuration.\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerManager\" />\n  </service>\n\n  <extension-point name=\"filterConfig\">\n  <documentation>\n      Define a new filterConfig.\n\n      -filterConfig\n        - name: name of the Filter.\n        - transactional: use transaction.\n        - synchonize: is synchronized\n        - cached: if true, add cache-control to header\n        - cacheTime: cache duration.\n        - private: if true, cache is private, public if false.\n\n      -pattern: url pattern to match\n\n      Example of a filterConfig Registration:\n\n      <code>\n\t\t    <filterConfig name=\"filterName\" transactional=\"true\" synchonize=\"true\"\n\t\t     cached=\"true\" private=\"true\" cachetime=\"3600\">\n\t\t      <pattern>/nuxeo/urlPattern/.*</pattern>\n\t\t    </filterConfig>\n      </code>\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.FilterConfigDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"corsConfig\">\n    <documentation>\n      Add a CORS compliant url's pattern\n\n      Mandatory:\n       - name: name of the config\n       - pattern: url pattern to match\n\n      Optionnal:\n       - allowGenericHttpRequests: If false, only valid and accepted CORS\n         requests that be allowed (strict CORS filtering).\n       - allowOrigin: Whitespace-separated list of origins that the CORS\n         filter must allow.\n       - allowSubdomains: If true the CORS filter will allow requests from any\n         origin which is a subdomain origin of the allowed origins.\n       - supportedMethods: List of the supported HTTP methods.\n       - supportedHeaders: The names of the supported author request headers.\n       - exposedHeaders: List of the response headers other than simple\n         response headers that the browser should expose to the author of the\n         cross-domain request through the XMLHttpRequest.getResponseHeader()\n         method.\n       - supportsCredentials: Indicates whether user credentials, such as\n         cookies, HTTP authentication or client-side certificates, are\n         supported.\n       - maxAge: Indicates how long the results of a preflight request\n         can be cached by the web browser, in seconds.\n\n      Some samples:\n       - Minimal contribution:\n      <code>\n        <corsConfig name=\"minimal\">\n          <pattern>/nuxeo/site/.*</pattern>\n        </corsConfig>\n      </code>\n\n       - Contribution with default values:\n      <code>\n        <corsConfig name=\"defaults\" allowGenericHttpRequests=\"true\"\n          allowOrigin=\"*\" allowSubdomains=\"false\" supportedMethods=\"GET, POST, HEAD, OPTIONS\"\n          supportedHeaders=\"*\" exposedHeaders=\"\"\n          supportsCredentials=\"true\" maxAge=\"-1\">\n          <pattern>/nuxeo/site/.*</pattern>\n        </corsConfig>\n      </code>\n\n       - Other dummy contribution:\n      <code>\n        <corsConfig name=\"dummy\" allowGenericHttpRequests=\"true\"\n          allowOrigin=\"http://example.com http://example.com:8080\"\n          allowSubdomains=\"true\" supportedMethods=\"GET\"\n          supportedHeaders=\"Content-Type, X-Requested-With\"\n          exposedHeaders=\"X-Custom-1, X-Custom-2\"\n          supportsCredentials=\"false\" maxAge=\"3600\">\n          <pattern>/nuxeo/site/.*</pattern>\n        </corsConfig>\n      </code>\n\n      @since 5.7.2\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.NuxeoCorsFilterDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"responseHeaders\">\n    <documentation>\n      Define headers to apply to the HTTP response.\n\n      -header\n      - name: name of the header.\n      - enabled: flag to enable/disable a header (default value is true)\n\n      Example of a response header Registration:\n\n      <code>\n        <header name=\"WWW-Authenticate\" enabled=\"true\">basic</header>\n      </code>\n      @author Thierry Martins (tm@nuxeo.com)\n      @since 6.0\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.NuxeoHeaderDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/web-request-controller-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--filterConfig",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib/Contributions/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib--filterConfig",
              "id": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib--filterConfig",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filterConfig\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n\n    <filterConfig cacheTime=\"31536000\" cached=\"true\" name=\"cachednxfile\" private=\"true\" synchonize=\"false\" transactional=\"false\">\n      <!-- if url contains doc changeToken: approximately one year -->\n      <!-- transaction is manually handled in DownloadServlet -->\n      <pattern>/nuxeo/nxfile/.*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n    <filterConfig cacheTime=\"0\" cached=\"true\" name=\"nxfile\" private=\"true\" synchonize=\"false\" transactional=\"false\">\n      <!-- transaction is manually handled in DownloadServlet -->\n      <pattern>/nuxeo/nxfile/.*</pattern>\n    </filterConfig>\n    <filterConfig cached=\"true\" name=\"BigFileDownloaderRequest\" private=\"true\" synchonize=\"false\" transactional=\"false\">\n      <!-- transaction is manually handled in DownloadServlet -->\n      <pattern>/nuxeo/nxbigfile/.*</pattern>\n    </filterConfig>\n\n    <filterConfig cached=\"true\" name=\"BigZipFileDownloaderRequest\" private=\"true\" synchonize=\"true\" transactional=\"true\">\n      <pattern>/nuxeo/nxbigzipfile/.*</pattern>\n    </filterConfig>\n\n    <filterConfig cacheTime=\"3600\" cached=\"true\" name=\"img\">\n      <pattern>/nuxeo/img.*</pattern>\n    </filterConfig>\n\n    <filterConfig cacheTime=\"3600\" cached=\"true\" name=\"icons\">\n      <pattern>/nuxeo/icons.*</pattern>\n    </filterConfig>\n\n    <filterConfig cacheTime=\"3600\" cached=\"true\" name=\"js\">\n      <pattern>/nuxeo/js.*</pattern>\n    </filterConfig>\n\n    <filterConfig cacheTime=\"3600\" cached=\"true\" name=\"scripts\">\n      <pattern>/nuxeo/scripts.*</pattern>\n    </filterConfig>\n\n    <filterConfig cacheTime=\"3600\" cached=\"true\" name=\"waitdialog\">\n      <pattern>/nuxeo/waitdialog.*</pattern>\n    </filterConfig>\n\n    <filterConfig cacheTime=\"31536000\" cached=\"true\" name=\"cachedBPR\" private=\"true\" transactional=\"true\">\n      <!-- if url contains doc changeToken: approximately one year -->\n      <pattern>/nuxeo/.*/@(blob|preview|rendition).*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n\n    <filterConfig cacheTime=\"0\" cached=\"true\" name=\"BPR\" private=\"true\" transactional=\"true\">\n      <pattern>/nuxeo/.*/@(blob|preview|rendition).*</pattern>\n    </filterConfig>\n\n    <filterConfig cached=\"false\" name=\"nxadmin\" private=\"true\">\n      <pattern>/nuxeo/nxadmin/.*</pattern>\n    </filterConfig>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--responseHeaders",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib/Contributions/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib--responseHeaders",
              "id": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib--responseHeaders",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"responseHeaders\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n    <header name=\"X-UA-Compatible\">IE=10; IE=11</header>\n    <header name=\"Cache-Control\">no-cache</header>\n    <header name=\"X-Content-Type-Options\">nosniff</header>\n    <header name=\"X-XSS-Protection\">1; mode=block</header>\n    <header name=\"X-Frame-Options\">SAMEORIGIN</header>\n    <header name=\"Referrer-Policy\">strict-origin-when-cross-origin</header>\n    <!-- this is a permissive Content-Security-Policy, which should be overridden for more security -->\n    <header name=\"Content-Security-Policy\">img-src data: blob: *; default-src blob: *; script-src 'unsafe-inline' 'unsafe-eval' data: *; style-src 'unsafe-inline' *; font-src data: *</header>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib",
          "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib",
          "requirements": [],
          "resolutionOrder": 611,
          "services": [],
          "startOrder": 575,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\"\n    point=\"filterConfig\">\n\n    <filterConfig name=\"cachednxfile\" transactional=\"false\" synchonize=\"false\" cached=\"true\" private=\"true\" cacheTime=\"31536000\">\n      <!-- if url contains doc changeToken: approximately one year -->\n      <!-- transaction is manually handled in DownloadServlet -->\n      <pattern>${org.nuxeo.ecm.contextPath}/nxfile/.*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n    <filterConfig name=\"nxfile\" transactional=\"false\" synchonize=\"false\" cached=\"true\" private=\"true\" cacheTime=\"0\">\n      <!-- transaction is manually handled in DownloadServlet -->\n      <pattern>${org.nuxeo.ecm.contextPath}/nxfile/.*</pattern>\n    </filterConfig>\n    <filterConfig name=\"BigFileDownloaderRequest\" cached=\"true\" private=\"true\"\n      transactional=\"false\" synchonize=\"false\">\n      <!-- transaction is manually handled in DownloadServlet -->\n      <pattern>${org.nuxeo.ecm.contextPath}/nxbigfile/.*</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"BigZipFileDownloaderRequest\" cached=\"true\" private=\"true\"\n      transactional=\"true\" synchonize=\"true\">\n      <pattern>${org.nuxeo.ecm.contextPath}/nxbigzipfile/.*</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"img\" cached=\"true\" cacheTime=\"3600\">\n      <pattern>${org.nuxeo.ecm.contextPath}/img.*</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"icons\" cached=\"true\" cacheTime=\"3600\">\n      <pattern>${org.nuxeo.ecm.contextPath}/icons.*</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"js\" cached=\"true\" cacheTime=\"3600\">\n      <pattern>${org.nuxeo.ecm.contextPath}/js.*</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"scripts\" cached=\"true\" cacheTime=\"3600\">\n      <pattern>${org.nuxeo.ecm.contextPath}/scripts.*</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"waitdialog\" cached=\"true\" cacheTime=\"3600\">\n      <pattern>${org.nuxeo.ecm.contextPath}/waitdialog.*</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"cachedBPR\" cached=\"true\" private=\"true\" cacheTime=\"31536000\" transactional=\"true\">\n      <!-- if url contains doc changeToken: approximately one year -->\n      <pattern>${org.nuxeo.ecm.contextPath}/.*/@(blob|preview|rendition).*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"BPR\" cached=\"true\" private=\"true\" cacheTime=\"0\" transactional=\"true\">\n      <pattern>${org.nuxeo.ecm.contextPath}/.*/@(blob|preview|rendition).*</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"nxadmin\" cached=\"false\" private=\"true\">\n      <pattern>${org.nuxeo.ecm.contextPath}/nxadmin/.*</pattern>\n    </filterConfig>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\"\n    point=\"responseHeaders\">\n    <header name=\"X-UA-Compatible\">IE=10; IE=11</header>\n    <header name=\"Cache-Control\">no-cache</header>\n    <header name=\"X-Content-Type-Options\">nosniff</header>\n    <header name=\"X-XSS-Protection\">1; mode=block</header>\n    <header name=\"X-Frame-Options\">${nuxeo.frame.options:=SAMEORIGIN}</header>\n    <header name=\"Referrer-Policy\">${nuxeo.referrer.policy:=strict-origin-when-cross-origin}</header>\n    <!-- this is a permissive Content-Security-Policy, which should be overridden for more security -->\n    <header name=\"Content-Security-Policy\">img-src data: blob: *; default-src blob: *; script-src 'unsafe-inline' 'unsafe-eval' data: *; style-src 'unsafe-inline' *; font-src data: *</header>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/web-request-controller-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingComponent",
          "declaredStartOrder": null,
          "documentation": "\n\t\tThe pluggable exception service. All exceptions that\n\t\tbubbles up outside\n\t\tnuxeo are caught by the NuxeoExceptionFilter.\n\t\tThis\n\t\tservice customize the handler that will deal with an exception.\n\t\t@author Alexandre Russel (arussel@nuxeo.com), Benjamin JALON (bjalon@nuxeo.com)\n\t\n",
          "documentationHtml": "<p>\nThe pluggable exception service. All exceptions that\nbubbles up outside\nnuxeo are caught by the NuxeoExceptionFilter.\nThis\nservice customize the handler that will deal with an exception.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
              "descriptors": [
                "org.nuxeo.ecm.platform.web.common.exceptionhandling.descriptor.ExceptionHandlerDescriptor"
              ],
              "documentation": "\n\t\t\tDefine an exceptionHandler that manages exceptions\n\t\t\tTo override just contribute again on the extension point,\n\t\t\tparameters will be keep. Default contributed is DefaultNuxeoExceptionHandler.\n\t\t\n",
              "documentationHtml": "<p>\nDefine an exceptionHandler that manages exceptions\nTo override just contribute again on the extension point,\nparameters will be keep. Default contributed is DefaultNuxeoExceptionHandler.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService/ExtensionPoints/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--exceptionhandler",
              "id": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--exceptionhandler",
              "label": "exceptionhandler (org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService)",
              "name": "exceptionhandler",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
              "descriptors": [
                "org.nuxeo.ecm.platform.web.common.exceptionhandling.descriptor.ErrorHandlersDescriptor"
              ],
              "documentation": "\n\t\t\tDefine a set key/exception to be used to output error\n\t\t\tmessage\n\t\t\n",
              "documentationHtml": "<p>\nDefine a set key/exception to be used to output error\nmessage\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService/ExtensionPoints/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--errorhandlers",
              "id": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--errorhandlers",
              "label": "errorhandlers (org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService)",
              "name": "errorhandlers",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
              "descriptors": [
                "org.nuxeo.ecm.platform.web.common.exceptionhandling.descriptor.RequestDumpDescriptor"
              ],
              "documentation": "\n\t\t\tDefine a class that will take a request and output a\n\t\t\tstring dumping\n\t\t\tinformations.\n\t  \n",
              "documentationHtml": "<p>\nDefine a class that will take a request and output a\nstring dumping\ninformations.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService/ExtensionPoints/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--requestdump",
              "id": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--requestdump",
              "label": "requestdump (org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService)",
              "name": "requestdump",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
              "descriptors": [
                "org.nuxeo.ecm.platform.web.common.exceptionhandling.descriptor.ListenerDescriptor"
              ],
              "documentation": "\n\t\t\tDefine a listener to exception handling.\n\t\t\n",
              "documentationHtml": "<p>\nDefine a listener to exception handling.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService/ExtensionPoints/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--listener",
              "id": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--listener",
              "label": "listener (org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService)",
              "name": "listener",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
          "name": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
          "requirements": [],
          "resolutionOrder": 613,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService/Services/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
              "id": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 897,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n\tname=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\">\n\t<service>\n\t\t<provide\n\t\t\tinterface=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\" />\n\t</service>\n\t<implementation\n\t\tclass=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingComponent\" />\n\t<documentation>\n\t\tThe pluggable exception service. All exceptions that\n\t\tbubbles up outside\n\t\tnuxeo are caught by the NuxeoExceptionFilter.\n\t\tThis\n\t\tservice customize the handler that will deal with an exception.\n\t\t@author Alexandre Russel (arussel@nuxeo.com), Benjamin JALON (bjalon@nuxeo.com)\n\t</documentation>\n\t<extension-point name=\"exceptionhandler\">\n\t\t<documentation>\n\t\t\tDefine an exceptionHandler that manages exceptions\n\t\t\tTo override just contribute again on the extension point,\n\t\t\tparameters will be keep. Default contributed is DefaultNuxeoExceptionHandler.\n\t\t</documentation>\n\t\t<object\n\t\t\tclass=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.descriptor.ExceptionHandlerDescriptor\" />\n\t</extension-point>\n\t<extension-point name=\"errorhandlers\">\n\t\t<documentation>\n\t\t\tDefine a set key/exception to be used to output error\n\t\t\tmessage\n\t\t</documentation>\n\t\t<object\n\t\t\tclass=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.descriptor.ErrorHandlersDescriptor\" />\n\t</extension-point>\n\t<extension-point name=\"requestdump\">\n\t\t<documentation>\n\t\t\tDefine a class that will take a request and output a\n\t\t\tstring dumping\n\t\t\tinformations.\n\t  </documentation>\n\t\t<object\n\t\t\tclass=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.descriptor.RequestDumpDescriptor\" />\n\t</extension-point>\n\t<extension-point name=\"listener\">\n\t\t<documentation>\n\t\t\tDefine a listener to exception handling.\n\t\t</documentation>\n\t\t<object\n\t\t\tclass=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.descriptor.ListenerDescriptor\" />\n\t</extension-point>\n</component>\n",
          "xmlFileName": "/OSGI-INF/exception-handling-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--errorhandlers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib/Contributions/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib--errorhandlers",
              "id": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib--errorhandlers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "name": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"errorhandlers\" target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\">\n    <errorHandlers bundle=\"messages\" defaultpage=\"/nuxeo_error.jsp\" loggerName=\"nuxeo-error-log\">\n      <handlers>\n        <handler code=\"404\" error=\".*DocumentNotFoundException\" message=\"Error.Document.Not.Found\"/>\n        <handler code=\"403\" error=\".*SecurityException\" message=\"Error.Insuffisant.Rights\" page=\"/nuxeo_error_security.jsp\"/>\n      </handlers>\n    </errorHandlers>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--requestdump",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib/Contributions/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib--requestdump",
              "id": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib--requestdump",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "name": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"requestdump\" target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\">\n    <requestdump class=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.DefaultRequestDumper\">\n      <!-- you can add names of attributes you don't want to see listed in the request dump.\n        <notListed>\n        <attribute>javax.servlet.forward.request_uri</attribute>\n        </notListed>\n      -->\n    </requestdump>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--exceptionhandler",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib/Contributions/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib--exceptionhandler",
              "id": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib--exceptionhandler",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "name": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"exceptionhandler\" target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\">\n    <exceptionHandler class=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.DefaultNuxeoExceptionHandler\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib",
          "name": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib",
          "requirements": [],
          "resolutionOrder": 614,
          "services": [],
          "startOrder": 573,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\"\n    point=\"errorhandlers\">\n    <errorHandlers bundle=\"messages\" loggerName=\"nuxeo-error-log\"\n      defaultpage=\"/nuxeo_error.jsp\">\n      <handlers>\n        <handler error=\".*DocumentNotFoundException\" code=\"404\"\n          message=\"Error.Document.Not.Found\" />\n        <handler error=\".*SecurityException\" code=\"403\"\n          message=\"Error.Insuffisant.Rights\" page=\"/nuxeo_error_security.jsp\" />\n      </handlers>\n    </errorHandlers>\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\"\n    point=\"requestdump\">\n    <requestdump\n      class=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.DefaultRequestDumper\">\n      <!-- you can add names of attributes you don't want to see listed in the request dump.\n        <notListed>\n        <attribute>javax.servlet.forward.request_uri</attribute>\n        </notListed>\n      -->\n    </requestdump>\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\"\n    point=\"exceptionhandler\">\n    <exceptionHandler class=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.DefaultNuxeoExceptionHandler\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/exception-handling-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.EventService--listeners",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.adminStatusListener.contrib/Contributions/org.nuxeo.ecm.platform.web.common.adminStatusListener.contrib--listeners",
              "id": "org.nuxeo.ecm.platform.web.common.adminStatusListener.contrib--listeners",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.EventService",
                "name": "org.nuxeo.runtime.EventService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listeners\" target=\"org.nuxeo.runtime.EventService\">\n    <listener class=\"org.nuxeo.ecm.platform.web.common.admin.AdministrativeStatusListener\">\n      <topic>administrativeStatus</topic>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.adminStatusListener.contrib",
          "name": "org.nuxeo.ecm.platform.web.common.adminStatusListener.contrib",
          "requirements": [],
          "resolutionOrder": 617,
          "services": [],
          "startOrder": 572,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.web.common.adminStatusListener.contrib\">\n\n  <extension target=\"org.nuxeo.runtime.EventService\" point=\"listeners\">\n    <listener class=\"org.nuxeo.ecm.platform.web.common.admin.AdministrativeStatusListener\">\n      <topic>administrativeStatus</topic>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-management-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.web.common.locale.LocaleComponent",
          "declaredStartOrder": null,
          "documentation": "\n    Provide locale and timezone.\n  \n",
          "documentationHtml": "<p>\nProvide locale and timezone.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.web.common.locale",
              "descriptors": [
                "org.nuxeo.ecm.platform.web.common.locale.LocaleProviderDescriptor"
              ],
              "documentation": "\n      This extension will provide the unique locale provider to be used.\n      Adding a requirement to the existing default implementation is\n      mandatory to make sure it is overriden.\n      Implementation class should\n      implement {@see\n      org.nuxeo.ecm.platform.web.common.locale.LocaleProvider}\n      An\n      example:\n      <code>\n    <component name=\"org.nuxeo.ecm.platform.profile.locale.contrib.example\">\n        <require>org.nuxeo.ecm.platform.web.common.locale.default.contrib\n          </require>\n        <extension point=\"providers\" target=\"org.nuxeo.ecm.platform.web.common.locale\">\n            <provider class=\"org.nuxeo.ecm.user.center.profile.localeProvider.UserLocaleProvider\"/>\n        </extension>\n    </component>\n</code>\n\n      @author Sun Seng David TAN (stan@nuxeo.com)\n      @author Stephane Lacoin\n      (slacoin@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nThis extension will provide the unique locale provider to be used.\nAdding a requirement to the existing default implementation is\nmandatory to make sure it is overriden.\nImplementation class should\nimplement {&#64;see\norg.nuxeo.ecm.platform.web.common.locale.LocaleProvider}\nAn\nexample:\n</p><p></p><pre><code>    &lt;component name&#61;&#34;org.nuxeo.ecm.platform.profile.locale.contrib.example&#34;&gt;\n        &lt;require&gt;org.nuxeo.ecm.platform.web.common.locale.default.contrib\n          &lt;/require&gt;\n        &lt;extension point&#61;&#34;providers&#34; target&#61;&#34;org.nuxeo.ecm.platform.web.common.locale&#34;&gt;\n            &lt;provider class&#61;&#34;org.nuxeo.ecm.user.center.profile.localeProvider.UserLocaleProvider&#34;/&gt;\n        &lt;/extension&gt;\n    &lt;/component&gt;\n</code></pre><p>\n(slacoin&#64;nuxeo.com)\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.locale/ExtensionPoints/org.nuxeo.ecm.platform.web.common.locale--providers",
              "id": "org.nuxeo.ecm.platform.web.common.locale--providers",
              "label": "providers (org.nuxeo.ecm.platform.web.common.locale)",
              "name": "providers",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.locale",
          "name": "org.nuxeo.ecm.platform.web.common.locale",
          "requirements": [],
          "resolutionOrder": 618,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.web.common.locale",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.locale/Services/org.nuxeo.ecm.platform.web.common.locale.LocaleProvider",
              "id": "org.nuxeo.ecm.platform.web.common.locale.LocaleProvider",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 898,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.web.common.locale\">\n  <implementation\n    class=\"org.nuxeo.ecm.platform.web.common.locale.LocaleComponent\" />\n  <documentation>\n    Provide locale and timezone.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.web.common.locale.LocaleProvider\" />\n  </service>\n  <extension-point name=\"providers\">\n    <documentation>\n      This extension will provide the unique locale provider to be used.\n      Adding a requirement to the existing default implementation is\n      mandatory to make sure it is overriden.\n      Implementation class should\n      implement {@see\n      org.nuxeo.ecm.platform.web.common.locale.LocaleProvider}\n      An\n      example:\n      <code>\n        <component\n          name=\"org.nuxeo.ecm.platform.profile.locale.contrib.example\">\n          <require>org.nuxeo.ecm.platform.web.common.locale.default.contrib\n          </require>\n          <extension target=\"org.nuxeo.ecm.platform.web.common.locale\"\n            point=\"providers\">\n            <provider\n              class=\"org.nuxeo.ecm.user.center.profile.localeProvider.UserLocaleProvider\" />\n          </extension>\n        </component>\n      </code>\n      @author Sun Seng David TAN (stan@nuxeo.com)\n      @author Stephane Lacoin\n      (slacoin@nuxeo.com)\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.web.common.locale.LocaleProviderDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/locale-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.locale--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.locale.default.contrib/Contributions/org.nuxeo.ecm.platform.web.common.locale.default.contrib--providers",
              "id": "org.nuxeo.ecm.platform.web.common.locale.default.contrib--providers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.locale",
                "name": "org.nuxeo.ecm.platform.web.common.locale",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.web.common.locale\">\n    <provider class=\"org.nuxeo.ecm.platform.web.common.locale.DefaultLocaleProvider\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.common.locale.default.contrib",
          "name": "org.nuxeo.ecm.platform.web.common.locale.default.contrib",
          "requirements": [],
          "resolutionOrder": 619,
          "services": [],
          "startOrder": 574,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.web.common.locale.default.contrib\">\n  <extension target=\"org.nuxeo.ecm.platform.web.common.locale\" point=\"providers\">\n    <provider class=\"org.nuxeo.ecm.platform.web.common.locale.DefaultLocaleProvider\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/locale-default-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--loginScreen",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.login/Contributions/org.nuxeo.ecm.platform.ui.web.login--loginScreen",
              "id": "org.nuxeo.ecm.platform.ui.web.login--loginScreen",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"loginScreen\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <loginScreenConfig>\n      <defaultLocale>en</defaultLocale>\n      <supportedLocales>\n        <locale>en_GB</locale>\n        <locale>en_US</locale>\n      </supportedLocales>\n    </loginScreenConfig>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.login",
          "name": "org.nuxeo.ecm.platform.ui.web.login",
          "requirements": [],
          "resolutionOrder": 620,
          "services": [],
          "startOrder": 540,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.ui.web.login\" version=\"1.0\">\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"loginScreen\">\n    <loginScreenConfig>\n      <defaultLocale>en</defaultLocale>\n      <supportedLocales>\n        <locale>en_GB</locale>\n        <locale>en_US</locale>\n      </supportedLocales>\n    </loginScreenConfig>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/login-screen-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that allows to disable strict CORS checks when a request has Origin: null.\n      This may happen for local files, or for a JavaScript-triggered redirect.\n      Setting this to true may expose the application to CSRF problems from files\n      locally hosted on the user's disk.\n\n      @since 10.3\n    \n",
              "documentationHtml": "<p>\nProperty that allows to disable strict CORS checks when a request has Origin: null.\nThis may happen for local files, or for a JavaScript-triggered redirect.\nSetting this to true may expose the application to CSRF problems from files\nlocally hosted on the user&#39;s disk.\n</p><p>\n&#64;since 10.3\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.cors/Contributions/org.nuxeo.ecm.platform.ui.web.cors--configuration",
              "id": "org.nuxeo.ecm.platform.ui.web.cors--configuration",
              "registrationOrder": 48,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that allows to disable strict CORS checks when a request has Origin: null.\n      This may happen for local files, or for a JavaScript-triggered redirect.\n      Setting this to true may expose the application to CSRF problems from files\n      locally hosted on the user's disk.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.cors.allowNullOrigin\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.ui.web.cors",
          "name": "org.nuxeo.ecm.platform.ui.web.cors",
          "requirements": [],
          "resolutionOrder": 622,
          "services": [],
          "startOrder": 536,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.cors\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that allows to disable strict CORS checks when a request has Origin: null.\n      This may happen for local files, or for a JavaScript-triggered redirect.\n      Setting this to true may expose the application to CSRF problems from files\n      locally hosted on the user's disk.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.cors.allowNullOrigin\">false</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/cors-configuration.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Properties controlling idempotent requests TTL and KeyValue storename.\n\n      Default TTL in seconds matches 1 day.\n\n      @since 11.5\n    \n",
              "documentationHtml": "<p>\nProperties controlling idempotent requests TTL and KeyValue storename.\n</p><p>\nDefault TTL in seconds matches 1 day.\n</p><p>\n&#64;since 11.5\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.idempotency/Contributions/org.nuxeo.ecm.platform.web.idempotency--configuration",
              "id": "org.nuxeo.ecm.platform.web.idempotency--configuration",
              "registrationOrder": 49,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Properties controlling idempotent requests TTL and KeyValue storename.\n\n      Default TTL in seconds matches 1 day.\n\n      @since 11.5\n    </documentation>\n    <property name=\"org.nuxeo.request.idempotency.ttl.duration\">1d</property>\n    <property name=\"org.nuxeo.request.idempotency.keyvaluestore.name\">idempotentrequest</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common/org.nuxeo.ecm.platform.web.idempotency",
          "name": "org.nuxeo.ecm.platform.web.idempotency",
          "requirements": [],
          "resolutionOrder": 623,
          "services": [],
          "startOrder": 576,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.web.idempotency\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Properties controlling idempotent requests TTL and KeyValue storename.\n\n      Default TTL in seconds matches 1 day.\n\n      @since 11.5\n    </documentation>\n    <property name=\"org.nuxeo.request.idempotency.ttl.duration\">1d</property>\n    <property name=\"org.nuxeo.request.idempotency.keyvaluestore.name\">idempotentrequest</property>\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/idempotency-configuration.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-web-common-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.web.common",
      "id": "org.nuxeo.ecm.platform.web.common",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.ui.web.auth,org.nuxeo.ecm.platfor\r\n m.ui.web.auth.interfaces,org.nuxeo.ecm.platform.ui.web.auth.plugins,org\r\n .nuxeo.ecm.platform.ui.web.auth.service,org.nuxeo.ecm.platform.ui.web.c\r\n ache,org.nuxeo.ecm.platform.ui.web.download,org.nuxeo.ecm.platform.web.\r\n common.ajax,org.nuxeo.ecm.platform.web.common.ajax.service,org.nuxeo.ec\r\n m.platform.web.common.exceptionhandling,org.nuxeo.ecm.platform.web.comm\r\n on.exceptionhandling.descriptor,org.nuxeo.ecm.platform.web.common.excep\r\n tionhandling.service,org.nuxeo.ecm.platform.web.common.requestcontrolle\r\n r.filter,org.nuxeo.ecm.platform.web.common.requestcontroller.service,or\r\n g.nuxeo.ecm.platform.web.common.resources,org.nuxeo.ecm.platform.web.co\r\n mmon.vh\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo ECM Web Common framework\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nNuxeo-Component: OSGI-INF/authentication-framework.xml,OSGI-INF/authenti\r\n cation-contrib.xml,OSGI-INF/web-request-controller-framework.xml,OSGI-I\r\n NF/web-request-controller-contrib.xml,OSGI-INF/exception-handling-servi\r\n ce.xml,OSGI-INF/exception-handling-contrib.xml,OSGI-INF/core-management\r\n -contrib.xml,OSGI-INF/locale-framework.xml,OSGI-INF/locale-default-cont\r\n rib.xml,OSGI-INF/login-screen-config.xml,OSGI-INF/cors-configuration.xm\r\n l,OSGI-INF/idempotency-configuration.xml\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.web.common;singleton:=true\r\nImport-Package: javax.faces.context,javax.security.auth,javax.security.a\r\n uth.callback,javax.security.auth.login,javax.servlet,javax.servlet.http\r\n ,org.apache.commons.httpclient,org.apache.commons.httpclient.methods,or\r\n g.apache.commons.httpclient.params,org.apache.commons.logging,org.nuxeo\r\n .common.utils,org.nuxeo.common.utils.i18n,org.nuxeo.common.xmap.annotat\r\n ion,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,org.n\r\n uxeo.ecm.core.api.blobholder,org.nuxeo.ecm.core.api.repository,org.nuxe\r\n o.ecm.core.event,org.nuxeo.ecm.core.event.impl,org.nuxeo.ecm.core.manag\r\n ement.api,org.nuxeo.ecm.core.utils,org.nuxeo.ecm.platform.api.login,org\r\n .nuxeo.ecm.platform.login,org.nuxeo.ecm.platform.usermanager,org.nuxeo.\r\n runtime,org.nuxeo.runtime.api,org.nuxeo.runtime.model,org.nuxeo.runtime\r\n .services.event,org.nuxeo.runtime.transaction\r\n\r\n",
      "maxResolutionOrder": 623,
      "minResolutionOrder": 606,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-ui-web",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.ui",
          "org.nuxeo.ecm.platform.ui.select2",
          "org.nuxeo.ecm.platform.uidgen.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui",
        "id": "grp:org.nuxeo.ecm.platform.ui",
        "name": "org.nuxeo.ecm.platform.ui",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.ui",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--sessionManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.auth.JSFConfig/Contributions/org.nuxeo.ecm.platform.ui.web.auth.JSFConfig--sessionManager",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.JSFConfig--sessionManager",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"sessionManager\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <sessionManager class=\"org.nuxeo.ecm.platform.ui.web.auth.plugins.SeamJsfSessionManager\" enabled=\"true\" name=\"SeamJsf\">\n    </sessionManager>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--openUrl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.auth.JSFConfig/Contributions/org.nuxeo.ecm.platform.ui.web.auth.JSFConfig--openUrl",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.JSFConfig--openUrl",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"openUrl\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <openUrl name=\"SystemLogRestlet\">\n      <grantPattern>/nuxeo/restAPI/systemLog</grantPattern>\n    </openUrl>\n    <openUrl name=\"SeamRemotingInterfaceResources\">\n      <grantPattern>/nuxeo/seam/resource/remoting/interface.js.*</grantPattern>\n    </openUrl>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.auth.JSFConfig",
          "name": "org.nuxeo.ecm.platform.ui.web.auth.JSFConfig",
          "requirements": [],
          "resolutionOrder": 536,
          "services": [],
          "startOrder": 532,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.auth.JSFConfig\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"sessionManager\">\n\n    <sessionManager name=\"SeamJsf\" enabled=\"true\"\n      class=\"org.nuxeo.ecm.platform.ui.web.auth.plugins.SeamJsfSessionManager\">\n    </sessionManager>\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"openUrl\">\n    <openUrl name=\"SystemLogRestlet\">\n      <grantPattern>${org.nuxeo.ecm.contextPath}/restAPI/systemLog</grantPattern>\n    </openUrl>\n    <openUrl name=\"SeamRemotingInterfaceResources\">\n      <grantPattern>${org.nuxeo.ecm.contextPath}/seam/resource/remoting/interface.js.*</grantPattern>\n    </openUrl>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/authentication-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
          "declaredStartOrder": null,
          "documentation": "\n    The Pluggable Restlet service provides extension point to register new Restlets and\n    handle their configuration (Seam or Conversation usage).\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe Pluggable Restlet service provides extension point to register new Restlets and\nhandle their configuration (Seam or Conversation usage).\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.restAPI.service.RestletPluginDescriptor"
              ],
              "documentation": "\n\n      @author Thierry Delprat (td@nuxeo.com)\n      This extension point lets you contribute new Restlets: ie, new REST API executor.\n      Sample contribution:\n      <restletPlugin\n    class=\"implementation class, you can use BaseNuxeoRestlet as a base clas\"\n    enabled=\"true\" name=\"name of the restlet\"\n    useConversation=\"true/false : indicate if Seam conversation must be restored\" useSeam=\"true/false : indicate if Seam components will be used\">\n    <urlPatterns>\n        <urlPattern>/{repo}/{docid}/pluginUpload</urlPattern>\n    </urlPatterns>\n</restletPlugin>\n",
              "documentationHtml": "<p>\nThis extension point lets you contribute new Restlets: ie, new REST API executor.\nSample contribution:\n\n\n/{repo}/{docid}/pluginUpload\n\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService--restlets",
              "id": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService--restlets",
              "label": "restlets (org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService)",
              "name": "restlets",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
          "name": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
          "requirements": [],
          "resolutionOrder": 537,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService/Services/org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
              "id": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 889,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\">\n\n  <implementation\n          class=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\" />\n  </service>\n  <documentation>\n    The Pluggable Restlet service provides extension point to register new Restlets and\n    handle their configuration (Seam or Conversation usage).\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <extension-point name=\"restlets\">\n    <documentation>\n      @author Thierry Delprat (td@nuxeo.com)\n      This extension point lets you contribute new Restlets: ie, new REST API executor.\n      Sample contribution:\n      <restletPlugin\n              name=\"name of the restlet\"\n              class=\"implementation class, you can use BaseNuxeoRestlet as a base clas\"\n              enabled=\"true\"\n              useSeam=\"true/false : indicate if Seam components will be used\"\n              useConversation=\"true/false : indicate if Seam conversation must be restored\">\n        <urlPatterns>\n          <urlPattern>/{repo}/{docid}/pluginUpload</urlPattern>\n        </urlPatterns>\n      </restletPlugin>\n    </documentation>\n\n    <object\n            class=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.RestletPluginDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/restAPI-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Create a File document via upload\n      POST /nuxeo/restAPI/{repoId}/{docId}/{filename}/upload\n    \n",
              "documentationHtml": "<p>\nCreate a File document via upload\nPOST /nuxeo/restAPI/{repoId}/{docId}/{filename}/upload\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService--restlets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.restAPI.contrib/Contributions/org.nuxeo.ecm.platform.ui.web.restAPI.contrib--restlets",
              "id": "org.nuxeo.ecm.platform.ui.web.restAPI.contrib--restlets",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
                "name": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"restlets\" target=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\">\n\n    <documentation>\n      Create a File document via upload\n      POST /nuxeo/restAPI/{repoId}/{docId}/{filename}/upload\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.UploadRestlet\" enabled=\"true\" name=\"upload\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/{filename}/upload</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Restlet for uploading a file via the Plugin (linked to FileManager)\n      (ie create a document from a file)\n      POST /nuxeo/restAPI/{repoId}/{docId}/pluginUpload/{path}\n      POST /nuxeo/restAPI/{repoId}/{docId}/createFromFile/{path}\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.PluginUploadRestlet\" enabled=\"true\" name=\"pluginUpload\" useConversation=\"false\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/pluginUpload</urlPattern>\n        <urlPattern>/{repo}/{docid}/createFromFile</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Simple restlet to browse content\n      GET /nuxeo/restAPI/browse\n      GET /nuxeo/restAPI/{repoId}/browse\n      GET /nuxeo/restAPI/{repoId}/{docId}/browse\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.BrowseRestlet\" enabled=\"true\" name=\"browse\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/browse</urlPattern>\n        <urlPattern>/{repo}/browse</urlPattern>\n        <urlPattern>/{repo}/{docid}/browse</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/{repoId}/{docId}/export\n      =&gt; export a document and possibly associated tree\n\n      GET /nuxeo/restAPI/{repoId}/{docId}/exportSingle\n      =&gt; export a single document\n\n      GET /nuxeo/restAPI/{repoId}/{docId}/exportTree\n      =&gt; export a document tree\n\n      Associated GET parameters are :\n      - format : xml/zip\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.ExportRestlet\" enabled=\"true\" name=\"export\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/export</urlPattern>\n        <urlPattern>/{repo}/{docid}/exportSingle</urlPattern>\n        <urlPattern>/{repo}/{docid}/exportTree</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Allows lock manipulation via Restlet API:\n      GET /nuxeo/restAPI/{repoId}/{docId}/Locking/lock\n      GET /nuxeo/restAPI/{repoId}/{docId}/Locking/unlock\n      GET /nuxeo/restAPI/{repoId}/{docId}/Locking/status\n      GET /nuxeo/restAPI/{repoId}/{docId}/Locking/state\n      LOCK /nuxeo/restAPI/{repoId}/{docId}/Locking\n      UNLOCK /nuxeo/restAPI/{repoId}/{docId}/Locking\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.LockingRestlet\" enabled=\"true\" name=\"locking\" useConversation=\"false\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/Locking</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/{repoId}/{docId}/downloadFile\n      or equivalently with optional query parameters:\n      GET /nuxeo/restAPI/{repoId}/{docId}/downloadFile?schema=file&amp;blobField=content&amp;filenameField=filename\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.DownloadFileRestlet\" enabled=\"true\" name=\"downloadFileRestlet\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/downloadFile</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Upload a file in an existing document\n      POST /nuxeo/restAPI/{repo}/{docid}/{filename}/uploadFile\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.UploadFileRestlet\" enabled=\"true\" name=\"uploadFileRestlet\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/{filename}/uploadFile</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/{repo}/{parentdocid}/createDocument\n      or equivalently with optional query paramaters:\n      GET /nuxeo/restAPI/{repo}/{parentdocid}/createDocument?docType=File\n      or\n      POST /nuxeo/restAPI/{repo}/{parentdocid}/createDocument\n      with arguments with initial values of the documents fields as string valued properties\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.CreateDocumentRestlet\" enabled=\"true\" name=\"createDocumentRestlet\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{parentdocid}/createDocument</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Allows deleting documents via Restlet API:\n      GET /nuxeo/restAPI/{repoId}/{docId}/deleteDocumentRestlet\n      GET /nuxeo/restAPI/{repoId}/{docId}/delete\n      GET /nuxeo/restAPI/{repoId}/deleteDocumentByPath?path=/default-domain/workspaces/doc1\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.DeleteDocumentRestlet\" enabled=\"true\" name=\"deleteDocumentRestlet\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/deleteDocumentRestlet</urlPattern>\n        <urlPattern>/{repo}/{docid}/delete</urlPattern>\n        <urlPattern>/{repo}/deleteDocumentByPath</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Allows to update document properties via Restlet API:\n      GET /nuxeo/restAPI/{repoId}/{docId}/updateDocumentRestlet?prop1=value1\n      GET /nuxeo/restAPI/{repoId}/{docId}/update?prop1=value1\n      example : http://127.0.0.1:8080/nuxeo/restAPI/default/1fee4b3e-8b8e-494e-b0a5-eef5113fb5a7/updateDocumentRestlet?dublincore:description=No%20comment\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.UpdateDocumentRestlet\" enabled=\"true\" name=\"updateDocumentRestlet\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/updateDocumentRestlet</urlPattern>\n        <urlPattern>/{repo}/{docid}/update</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/creationContainerList\n      or equivalently with optional query paramaters (where docType is the\n      type of the document to create):\n      GET /nuxeo/restAPI/creationContainerList?docType=File\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.CreationContainerListRestlet\" enabled=\"true\" name=\"creationFolderListRestlet\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/creationContainerList</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/opensearch?q=keywords\n\n      Perform a document search on the ecm:fulltext index and return the\n      results as a RSS 2.0 file with opensearch.org metadata\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.OpenSearchRestlet\" enabled=\"true\" name=\"openSearchRestlet\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/opensearch</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/directoryCacheInvalidate\n      GET /nuxeo/restAPI/directoryCacheInvalidate?directory=userDirectory&amp;directory=groupDirectory\n\n      Invalidate the cache of the requested directories or of all directories if not directory name is given as parameter.\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.DirectoryCacheRestlet\" enabled=\"true\" name=\"directoryCache\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/directoryCacheInvalidate</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/systemLog?token=1234&amp;level=INFO&amp;message=something\n\n      Log something in the system logs of the server. The token has to match\n      the system property org.nuxeo.systemlog.token.\n    </documentation>\n    <restletPlugin class=\"org.nuxeo.ecm.platform.ui.web.restAPI.SystemLogRestlet\" enabled=\"true\" name=\"systemLog\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/systemLog</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.restAPI.contrib",
          "name": "org.nuxeo.ecm.platform.ui.web.restAPI.contrib",
          "requirements": [],
          "resolutionOrder": 538,
          "services": [],
          "startOrder": 543,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.restAPI.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\"\n      point=\"restlets\">\n\n    <documentation>\n      Create a File document via upload\n      POST /nuxeo/restAPI/{repoId}/{docId}/{filename}/upload\n    </documentation>\n    <restletPlugin\n        name=\"upload\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.UploadRestlet\"\n        enabled=\"true\"\n        useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/{filename}/upload</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Restlet for uploading a file via the Plugin (linked to FileManager)\n      (ie create a document from a file)\n      POST /nuxeo/restAPI/{repoId}/{docId}/pluginUpload/{path}\n      POST /nuxeo/restAPI/{repoId}/{docId}/createFromFile/{path}\n    </documentation>\n    <restletPlugin\n        name=\"pluginUpload\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.PluginUploadRestlet\"\n        enabled=\"true\"\n        useSeam=\"false\"\n        useConversation=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/pluginUpload</urlPattern>\n        <urlPattern>/{repo}/{docid}/createFromFile</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Simple restlet to browse content\n      GET /nuxeo/restAPI/browse\n      GET /nuxeo/restAPI/{repoId}/browse\n      GET /nuxeo/restAPI/{repoId}/{docId}/browse\n    </documentation>\n    <restletPlugin\n        name=\"browse\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.BrowseRestlet\"\n        enabled=\"true\"\n        useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/browse</urlPattern>\n        <urlPattern>/{repo}/browse</urlPattern>\n        <urlPattern>/{repo}/{docid}/browse</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/{repoId}/{docId}/export\n      => export a document and possibly associated tree\n\n      GET /nuxeo/restAPI/{repoId}/{docId}/exportSingle\n      => export a single document\n\n      GET /nuxeo/restAPI/{repoId}/{docId}/exportTree\n      => export a document tree\n\n      Associated GET parameters are :\n      - format : xml/zip\n    </documentation>\n    <restletPlugin\n        name=\"export\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.ExportRestlet\"\n        enabled=\"true\"\n        useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/export</urlPattern>\n        <urlPattern>/{repo}/{docid}/exportSingle</urlPattern>\n        <urlPattern>/{repo}/{docid}/exportTree</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Allows lock manipulation via Restlet API:\n      GET /nuxeo/restAPI/{repoId}/{docId}/Locking/lock\n      GET /nuxeo/restAPI/{repoId}/{docId}/Locking/unlock\n      GET /nuxeo/restAPI/{repoId}/{docId}/Locking/status\n      GET /nuxeo/restAPI/{repoId}/{docId}/Locking/state\n      LOCK /nuxeo/restAPI/{repoId}/{docId}/Locking\n      UNLOCK /nuxeo/restAPI/{repoId}/{docId}/Locking\n    </documentation>\n    <restletPlugin\n        name=\"locking\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.LockingRestlet\"\n        enabled=\"true\"\n        useSeam=\"false\"\n        useConversation=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/Locking</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/{repoId}/{docId}/downloadFile\n      or equivalently with optional query parameters:\n      GET /nuxeo/restAPI/{repoId}/{docId}/downloadFile?schema=file&amp;blobField=content&amp;filenameField=filename\n    </documentation>\n    <restletPlugin\n        name=\"downloadFileRestlet\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.DownloadFileRestlet\"\n        enabled=\"true\"\n        useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/downloadFile</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Upload a file in an existing document\n      POST /nuxeo/restAPI/{repo}/{docid}/{filename}/uploadFile\n    </documentation>\n    <restletPlugin\n        name=\"uploadFileRestlet\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.UploadFileRestlet\"\n        enabled=\"true\"\n        useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/{filename}/uploadFile</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/{repo}/{parentdocid}/createDocument\n      or equivalently with optional query paramaters:\n      GET /nuxeo/restAPI/{repo}/{parentdocid}/createDocument?docType=File\n      or\n      POST /nuxeo/restAPI/{repo}/{parentdocid}/createDocument\n      with arguments with initial values of the documents fields as string valued properties\n    </documentation>\n    <restletPlugin\n        name=\"createDocumentRestlet\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.CreateDocumentRestlet\"\n        enabled=\"true\"\n        useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{parentdocid}/createDocument</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Allows deleting documents via Restlet API:\n      GET /nuxeo/restAPI/{repoId}/{docId}/deleteDocumentRestlet\n      GET /nuxeo/restAPI/{repoId}/{docId}/delete\n      GET /nuxeo/restAPI/{repoId}/deleteDocumentByPath?path=/default-domain/workspaces/doc1\n    </documentation>\n    <restletPlugin\n        name=\"deleteDocumentRestlet\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.DeleteDocumentRestlet\"\n        enabled=\"true\"\n        useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/deleteDocumentRestlet</urlPattern>\n        <urlPattern>/{repo}/{docid}/delete</urlPattern>\n        <urlPattern>/{repo}/deleteDocumentByPath</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      Allows to update document properties via Restlet API:\n      GET /nuxeo/restAPI/{repoId}/{docId}/updateDocumentRestlet?prop1=value1\n      GET /nuxeo/restAPI/{repoId}/{docId}/update?prop1=value1\n      example : http://127.0.0.1:8080/nuxeo/restAPI/default/1fee4b3e-8b8e-494e-b0a5-eef5113fb5a7/updateDocumentRestlet?dublincore:description=No%20comment\n    </documentation>\n    <restletPlugin\n        name=\"updateDocumentRestlet\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.UpdateDocumentRestlet\"\n        enabled=\"true\"\n        useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/{repo}/{docid}/updateDocumentRestlet</urlPattern>\n        <urlPattern>/{repo}/{docid}/update</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/creationContainerList\n      or equivalently with optional query paramaters (where docType is the\n      type of the document to create):\n      GET /nuxeo/restAPI/creationContainerList?docType=File\n    </documentation>\n    <restletPlugin\n        name=\"creationFolderListRestlet\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.CreationContainerListRestlet\"\n        enabled=\"true\"\n        useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/creationContainerList</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/opensearch?q=keywords\n\n      Perform a document search on the ecm:fulltext index and return the\n      results as a RSS 2.0 file with opensearch.org metadata\n    </documentation>\n    <restletPlugin name=\"openSearchRestlet\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.OpenSearchRestlet\"\n        enabled=\"true\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/opensearch</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/directoryCacheInvalidate\n      GET /nuxeo/restAPI/directoryCacheInvalidate?directory=userDirectory&amp;directory=groupDirectory\n\n      Invalidate the cache of the requested directories or of all directories if not directory name is given as parameter.\n    </documentation>\n    <restletPlugin name=\"directoryCache\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.DirectoryCacheRestlet\"\n        enabled=\"true\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/directoryCacheInvalidate</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n    <documentation>\n      GET /nuxeo/restAPI/systemLog?token=1234&amp;level=INFO&amp;message=something\n\n      Log something in the system logs of the server. The token has to match\n      the system property org.nuxeo.systemlog.token.\n    </documentation>\n    <restletPlugin name=\"systemLog\"\n        class=\"org.nuxeo.ecm.platform.ui.web.restAPI.SystemLogRestlet\"\n        enabled=\"true\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/systemLog</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/restAPI-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.ui.web.rest.services.URLServiceComponent",
          "declaredStartOrder": null,
          "documentation": "\n    The URL service provides extension points for url generation and related\n    actions.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe URL service provides extension points for url generation and related\nactions.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.rest.URLService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.rest.descriptors.URLPatternDescriptor"
              ],
              "documentation": "\n      URL patterns are used on the web layer to perform actions when a url is\n      entered, and to rewrite urls after a post.\n\n      They are designed to use a given codec.\n    \n",
              "documentationHtml": "<p>\nURL patterns are used on the web layer to perform actions when a url is\nentered, and to rewrite urls after a post.\n</p><p>\nThey are designed to use a given codec.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.rest.URLService/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.rest.URLService--urlpatterns",
              "id": "org.nuxeo.ecm.platform.ui.web.rest.URLService--urlpatterns",
              "label": "urlpatterns (org.nuxeo.ecm.platform.ui.web.rest.URLService)",
              "name": "urlpatterns",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.EventService--listeners",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.rest.URLService/Contributions/org.nuxeo.ecm.platform.ui.web.rest.URLService--listeners",
              "id": "org.nuxeo.ecm.platform.ui.web.rest.URLService--listeners",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.EventService",
                "name": "org.nuxeo.runtime.EventService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listeners\" target=\"org.nuxeo.runtime.EventService\">\n    <listener class=\"org.nuxeo.ecm.platform.ui.web.rest.services.URLPolicyServiceCacheFlusher\">\n      <topic>org.nuxeo.runtime.reload</topic>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.rest.URLService",
          "name": "org.nuxeo.ecm.platform.ui.web.rest.URLService",
          "requirements": [],
          "resolutionOrder": 539,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.ui.web.rest.URLService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.rest.URLService/Services/org.nuxeo.ecm.platform.ui.web.rest.api.URLPolicyService",
              "id": "org.nuxeo.ecm.platform.ui.web.rest.api.URLPolicyService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 888,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.ui.web.rest.URLService\">\n\n  <documentation>\n    The URL service provides extension points for url generation and related\n    actions.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.ui.web.rest.services.URLServiceComponent\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.ui.web.rest.api.URLPolicyService\" />\n  </service>\n\n  <extension-point name=\"urlpatterns\">\n    <documentation>\n      URL patterns are used on the web layer to perform actions when a url is\n      entered, and to rewrite urls after a post.\n\n      They are designed to use a given codec.\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.ui.web.rest.descriptors.URLPatternDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.runtime.EventService\" point=\"listeners\">\n    <listener\n      class=\"org.nuxeo.ecm.platform.ui.web.rest.services.URLPolicyServiceCacheFlusher\">\n      <topic>org.nuxeo.runtime.reload</topic>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/urlservice-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Contributions for basic rest navigation through the application.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nContributions for basic rest navigation through the application.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Basic url pattern using the doc id codec: it places the application in the\n      document context described by the url and sets current tabs.\n\n      Additional url pattern using the doc path codec.\n    \n",
              "documentationHtml": "<p>\nBasic url pattern using the doc id codec: it places the application in the\ndocument context described by the url and sets current tabs.\n</p><p>\nAdditional url pattern using the doc path codec.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.rest.URLService--urlpatterns",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.rest.URLService.contrib/Contributions/org.nuxeo.ecm.platform.ui.web.rest.URLService.contrib--urlpatterns",
              "id": "org.nuxeo.ecm.platform.ui.web.rest.URLService.contrib--urlpatterns",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.rest.URLService",
                "name": "org.nuxeo.ecm.platform.ui.web.rest.URLService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"urlpatterns\" target=\"org.nuxeo.ecm.platform.ui.web.rest.URLService\">\n\n    <documentation>\n      Basic url pattern using the doc id codec: it places the application in the\n      document context described by the url and sets current tabs.\n\n      Additional url pattern using the doc path codec.\n    </documentation>\n\n    <urlPattern enabled=\"true\" name=\"id\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>true</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>docid</codecName>\n      <actionBinding>#{restHelper.initContextFromRestRequest}</actionBinding>\n      <documentViewBinding>#{restHelper.documentView}</documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.newDocumentView}\n      </newDocumentViewBinding>\n      <bindings>\n        <binding callGetter=\"false\" name=\"tabId\">\n          #{webActions.currentTabId}\n        </binding>\n        <binding callGetter=\"false\" name=\"subTabId\">\n          #{webActions.currentSubTabId}\n        </binding>\n        <binding name=\"tabIds\">#{webActions.currentTabIds}</binding>\n        <binding callGetter=\"false\" name=\"language\">\n          #{restHelper.localeString}\n        </binding>\n      </bindings>\n    </urlPattern>\n\n    <urlPattern enabled=\"true\" name=\"default\">\n      <defaultURLPolicy>true</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>true</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>docpath</codecName>\n      <actionBinding>#{restHelper.initContextFromRestRequest}</actionBinding>\n      <documentViewBinding>#{restHelper.documentView}</documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.newDocumentView}\n      </newDocumentViewBinding>\n      <bindings>\n        <binding callGetter=\"false\" name=\"tabId\">\n          #{webActions.currentTabId}\n        </binding>\n        <binding callGetter=\"false\" name=\"subTabId\">\n          #{webActions.currentSubTabId}\n        </binding>\n        <binding name=\"tabIds\">#{webActions.currentTabIds}</binding>\n        <binding callGetter=\"false\" name=\"language\">\n          #{restHelper.localeString}\n        </binding>\n        <binding callGetter=\"false\" name=\"mainTabId\">\n          #{webActions.currentTabIds}\n        </binding>\n      </bindings>\n    </urlPattern>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.rest.URLService.contrib",
          "name": "org.nuxeo.ecm.platform.ui.web.rest.URLService.contrib",
          "requirements": [],
          "resolutionOrder": 540,
          "services": [],
          "startOrder": 542,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.rest.URLService.contrib\">\n  <documentation>\n    Contributions for basic rest navigation through the application.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.rest.URLService\"\n    point=\"urlpatterns\">\n\n    <documentation>\n      Basic url pattern using the doc id codec: it places the application in the\n      document context described by the url and sets current tabs.\n\n      Additional url pattern using the doc path codec.\n    </documentation>\n\n    <urlPattern name=\"id\" enabled=\"true\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>true</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>docid</codecName>\n      <actionBinding>#{restHelper.initContextFromRestRequest}</actionBinding>\n      <documentViewBinding>#{restHelper.documentView}</documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.newDocumentView}\n      </newDocumentViewBinding>\n      <bindings>\n        <binding name=\"tabId\" callGetter=\"false\">\n          #{webActions.currentTabId}\n        </binding>\n        <binding name=\"subTabId\" callGetter=\"false\">\n          #{webActions.currentSubTabId}\n        </binding>\n        <binding name=\"tabIds\">#{webActions.currentTabIds}</binding>\n        <binding name=\"language\" callGetter=\"false\">\n          #{restHelper.localeString}\n        </binding>\n      </bindings>\n    </urlPattern>\n\n    <urlPattern name=\"default\" enabled=\"true\">\n      <defaultURLPolicy>true</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>true</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>docpath</codecName>\n      <actionBinding>#{restHelper.initContextFromRestRequest}</actionBinding>\n      <documentViewBinding>#{restHelper.documentView}</documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.newDocumentView}\n      </newDocumentViewBinding>\n      <bindings>\n        <binding name=\"tabId\" callGetter=\"false\">\n          #{webActions.currentTabId}\n        </binding>\n        <binding name=\"subTabId\" callGetter=\"false\">\n          #{webActions.currentSubTabId}\n        </binding>\n        <binding name=\"tabIds\">#{webActions.currentTabIds}</binding>\n        <binding name=\"language\" callGetter=\"false\">\n          #{restHelper.localeString}\n        </binding>\n        <binding name=\"mainTabId\" callGetter=\"false\">\n          #{webActions.currentTabIds}\n        </binding>\n      </bindings>\n    </urlPattern>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/urlservice-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The HTMLEditorPLuginService provide extension points to configure TinyMCE in Nuxeo.\n    @author Thomas Roger (troger@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe HTMLEditorPLuginService provide extension points to configure TinyMCE in Nuxeo.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginDescriptor"
              ],
              "documentation": "\n\n      @author Thomas Roger(troger@nuxeo.com)\n      This extension point let you contribute new plugins to TinyMCE.\n      Sample contribution :\n      <htmlEditorPlugin\n    pluginButtonName=\"name of the plugin's button\"\n    pluginName=\"name of the plugin\" toolbarName=\"toolbar where to put the button\"/>\n",
              "documentationHtml": "<p>\nThis extension point let you contribute new plugins to TinyMCE.\nSample contribution :\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl--plugins",
              "id": "org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl--plugins",
              "label": "plugins (org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl)",
              "name": "plugins",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl",
          "name": "org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl",
          "requirements": [],
          "resolutionOrder": 541,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl/Services/org.nuxeo.ecm.platform.ui.web.htmleditor.api.HtmlEditorPluginService",
              "id": "org.nuxeo.ecm.platform.ui.web.htmleditor.api.HtmlEditorPluginService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 887,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl\">\n\n  <documentation>\n    The HTMLEditorPLuginService provide extension points to configure TinyMCE in Nuxeo.\n    @author Thomas Roger (troger@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide\n        interface=\"org.nuxeo.ecm.platform.ui.web.htmleditor.api.HtmlEditorPluginService\"/>\n  </service>\n\n  <implementation\n      class=\"org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl\"/>\n\n  <extension-point name=\"plugins\">\n    <documentation>\n      @author Thomas Roger(troger@nuxeo.com)\n      This extension point let you contribute new plugins to TinyMCE.\n      Sample contribution :\n      <htmlEditorPlugin\n          pluginName=\"name of the plugin\"\n          pluginButtonName=\"name of the plugin's button\"\n          toolbarName=\"toolbar where to put the button\">\n      </htmlEditorPlugin>\n    </documentation>\n\n    <object\n        class=\"org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginDescriptor\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/htmleditor-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl--plugins",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.htmleditor.contrib/Contributions/org.nuxeo.ecm.platform.ui.web.htmleditor.contrib--plugins",
              "id": "org.nuxeo.ecm.platform.ui.web.htmleditor.contrib--plugins",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl",
                "name": "org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"plugins\" target=\"org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl\">\n\n   <htmlEditorPlugin pluginButtonName=\"nuxeolink\" pluginName=\"nuxeolink\" toolbarName=\"theme_advanced_buttons3_add\">\n   </htmlEditorPlugin>\n\n   <htmlEditorPlugin pluginButtonName=\"nuxeoimageupload\" pluginName=\"nuxeoimageupload\" toolbarName=\"theme_advanced_buttons3_add\">\n   </htmlEditorPlugin>\n\n   <htmlEditorPlugin pluginButtonName=\"fullscreen\" pluginName=\"fullscreen\" toolbarName=\"theme_advanced_buttons3_add\">\n   </htmlEditorPlugin>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.htmleditor.contrib",
          "name": "org.nuxeo.ecm.platform.ui.web.htmleditor.contrib",
          "requirements": [],
          "resolutionOrder": 542,
          "services": [],
          "startOrder": 539,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.htmleditor.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.htmleditor.service.HtmlEditorPluginServiceImpl\"\n      point=\"plugins\">\n\n   <htmlEditorPlugin\n           pluginName=\"nuxeolink\"\n           pluginButtonName=\"nuxeolink\"\n           toolbarName=\"theme_advanced_buttons3_add\">\n   </htmlEditorPlugin>\n\n   <htmlEditorPlugin\n           pluginName=\"nuxeoimageupload\"\n           pluginButtonName=\"nuxeoimageupload\"\n           toolbarName=\"theme_advanced_buttons3_add\">\n   </htmlEditorPlugin>\n\n   <htmlEditorPlugin\n           pluginName=\"fullscreen\"\n           pluginButtonName=\"fullscreen\"\n           toolbarName=\"theme_advanced_buttons3_add\">\n   </htmlEditorPlugin>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/htmleditor-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--filterConfig",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.RequestControllerService.contrib/Contributions/org.nuxeo.ecm.platform.ui.web.RequestControllerService.contrib--filterConfig",
              "id": "org.nuxeo.ecm.platform.ui.web.RequestControllerService.contrib--filterConfig",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filterConfig\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n\n    <filterConfig name=\"SeamRemoting\" synchonize=\"false\" transactional=\"true\">\n      <pattern>/nuxeo/seam/resource/remoting/execute.*</pattern>\n    </filterConfig>\n\n    <filterConfig cacheTime=\"3600\" cached=\"true\" name=\"SeamRemotingInterface\">\n     <pattern>/nuxeo/seam/resource/remoting/interface.js.*</pattern>\n    </filterConfig>\n\n    <filterConfig cacheTime=\"3600\" cached=\"true\" name=\"tinymce\">\n      <pattern>/nuxeo/tinymce.*</pattern>\n    </filterConfig>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.RequestControllerService.contrib",
          "name": "org.nuxeo.ecm.platform.ui.web.RequestControllerService.contrib",
          "requirements": [],
          "resolutionOrder": 543,
          "services": [],
          "startOrder": 529,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.RequestControllerService.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\"\n    point=\"filterConfig\">\n\n    <filterConfig name=\"SeamRemoting\" transactional=\"true\" synchonize=\"false\">\n      <pattern>${org.nuxeo.ecm.contextPath}/seam/resource/remoting/execute.*</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"SeamRemotingInterface\" cached=\"true\" cacheTime=\"3600\">\n     <pattern>${org.nuxeo.ecm.contextPath}/seam/resource/remoting/interface.js.*</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"tinymce\" cached=\"true\" cacheTime=\"3600\">\n      <pattern>${org.nuxeo.ecm.contextPath}/tinymce.*</pattern>\n    </filterConfig>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/request-controler-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.ui.web.seamremoting.SeamRemotingJSBuilderComponent",
          "declaredStartOrder": null,
          "documentation": "\n      Manages Seam components that have a JS remoting interface that must be automatically included in default Nuxeo Pages.\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nManages Seam components that have a JS remoting interface that must be automatically included in default Nuxeo Pages.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.seamremoting.RemotableSeamBeansDescriptor"
              ],
              "documentation": "\n      @author Thierry Delprat (td@nuxeo.com)\n      Registers JS Remotable Seam Beans by their names\n    \n",
              "documentationHtml": "<p>\nRegisters JS Remotable Seam Beans by their names\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent--remotableSeamBeans",
              "id": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent--remotableSeamBeans",
              "label": "remotableSeamBeans (org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent)",
              "name": "remotableSeamBeans",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent",
          "name": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent",
          "requirements": [],
          "resolutionOrder": 544,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent/Services/org.nuxeo.ecm.platform.ui.web.seamremoting.SeamRemotingJSBuilderService",
              "id": "org.nuxeo.ecm.platform.ui.web.seamremoting.SeamRemotingJSBuilderService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 884,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent\">\n\n  <implementation\n      class=\"org.nuxeo.ecm.platform.ui.web.seamremoting.SeamRemotingJSBuilderComponent\"/>\n\n  <documentation>\n      Manages Seam components that have a JS remoting interface that must be automatically included in default Nuxeo Pages.\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide\n        interface=\"org.nuxeo.ecm.platform.ui.web.seamremoting.SeamRemotingJSBuilderService\"/>\n  </service>\n\n  <extension-point name=\"remotableSeamBeans\">\n    <documentation>\n      @author Thierry Delprat (td@nuxeo.com)\n      Registers JS Remotable Seam Beans by their names\n    </documentation>\n    <object\n        class=\"org.nuxeo.ecm.platform.ui.web.seamremoting.RemotableSeamBeansDescriptor\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/seamremotingjsbuilder-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.EventService--listeners",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.ui.jsf.reload/Contributions/org.nuxeo.ecm.ui.jsf.reload--listeners",
              "id": "org.nuxeo.ecm.ui.jsf.reload--listeners",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.EventService",
                "name": "org.nuxeo.runtime.EventService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listeners\" target=\"org.nuxeo.runtime.EventService\">\n    <listener class=\"org.nuxeo.ecm.platform.ui.web.reload.NuxeoJSFReloadHandler\">\n      <topic>org.nuxeo.runtime.reload</topic>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.ui.jsf.reload",
          "name": "org.nuxeo.ecm.ui.jsf.reload",
          "requirements": [],
          "resolutionOrder": 545,
          "services": [],
          "startOrder": 598,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.ui.jsf.reload\">\n\n  <extension target=\"org.nuxeo.runtime.EventService\" point=\"listeners\">\n    <listener class=\"org.nuxeo.ecm.platform.ui.web.reload.NuxeoJSFReloadHandler\">\n      <topic>org.nuxeo.runtime.reload</topic>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/reload-jsf-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.cache.CacheService--caches",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.tag.fn.cache/Contributions/org.nuxeo.ecm.platform.ui.web.tag.fn.cache--caches",
              "id": "org.nuxeo.ecm.platform.ui.web.tag.fn.cache--caches",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.cache.CacheService",
                "name": "org.nuxeo.ecm.core.cache.CacheService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"caches\" target=\"org.nuxeo.ecm.core.cache.CacheService\">\n\n    <cache name=\"userDisplayName\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n      <ttl>30</ttl>\n    </cache>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.tag.fn.cache",
          "name": "org.nuxeo.ecm.platform.ui.web.tag.fn.cache",
          "requirements": [],
          "resolutionOrder": 546,
          "services": [],
          "startOrder": 544,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.tag.fn.cache\">\n\n  <extension target=\"org.nuxeo.ecm.core.cache.CacheService\" point=\"caches\">\n\n    <cache name=\"userDisplayName\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n      <ttl>30</ttl>\n    </cache>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/username-cache-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService",
          "declaredStartOrder": null,
          "documentation": "\n    Registry for JSF File Uploaders.\n  \n",
          "documentationHtml": "<p>\nRegistry for JSF File Uploaders.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService",
              "descriptors": [
                "org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService--uploader",
              "id": "org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService--uploader",
              "label": "uploader (org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService)",
              "name": "uploader",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService--uploader",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService/Contributions/org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService--uploader",
              "id": "org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService--uploader",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService",
                "name": "org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"uploader\" target=\"org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService\">\n    <uploader class=\"org.nuxeo.ecm.platform.ui.web.component.file.HTMLBlobUploader\" id=\"HTML\" order=\"10\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService",
          "name": "org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService",
          "requirements": [],
          "resolutionOrder": 547,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService/Services/org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService",
              "id": "org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 886,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService\" version=\"1.0.0\">\n\n  <documentation>\n    Registry for JSF File Uploaders.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService\" />\n  </service>\n\n  <extension-point name=\"uploader\">\n    <object class=\"org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderDescriptor\" />\n  </extension-point>\n\n  <!-- register the default one -->\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.component.file.JSFBlobUploaderService\" point=\"uploader\">\n    <uploader id=\"HTML\" order=\"10\" class=\"org.nuxeo.ecm.platform.ui.web.component.file.HTMLBlobUploader\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/jsfblobuploader-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      This contribution is the default contribution for JSF configurations.\n\n      Here are more details about some of them:\n      <ul>\n    <li>\n        <strong>nuxeo.jsf.enableDoubleClickShield</strong>: enables a shield on forms to prevent users from\n          submitting twice the same form (accidental double-click).\n        </li>\n    <li>\n\n        <strong>nuxeo.jsf.defaultBytePrefixFormat</strong>: defines the default byte prefix format used by the\n          printFileSize JSF function, that displays a pretty print of the size of a file. Available formats are \"SI\",\n          \"IEC\" or \"JEDEC\". See <a\n            href=\"http://en.wikipedia.org/wiki/Byte\" target=\"_blank\">the Wikipedia article on\n          Byte</a> for more information on those formats.\n        </li>\n</ul>\n\n\n      @since 7.4\n    \n",
              "documentationHtml": "<p>\nThis contribution is the default contribution for JSF configurations.\n</p><p>\nHere are more details about some of them:\n</p><ul><li>\n<strong>nuxeo.jsf.enableDoubleClickShield</strong>: enables a shield on forms to prevent users from\nsubmitting twice the same form (accidental double-click).\n</li><li>\n<p>\n<strong>nuxeo.jsf.defaultBytePrefixFormat</strong>: defines the default byte prefix format used by the\nprintFileSize JSF function, that displays a pretty print of the size of a file. Available formats are &#34;SI&#34;,\n&#34;IEC&#34; or &#34;JEDEC&#34;. See <a href=\"http://en.wikipedia.org/wiki/Byte\" target=\"_blank\" rel=\"noopener noreferrer\">the Wikipedia article on\nByte</a> for more information on those formats.\n</p></li></ul>\n<p>\n&#64;since 7.4\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.configuration.default/Contributions/org.nuxeo.ecm.platform.ui.web.configuration.default--configuration",
              "id": "org.nuxeo.ecm.platform.ui.web.configuration.default--configuration",
              "registrationOrder": 41,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n\n    <documentation>\n      This contribution is the default contribution for JSF configurations.\n\n      Here are more details about some of them:\n      <ul>\n        <li>\n          <strong>nuxeo.jsf.enableDoubleClickShield</strong>: enables a shield on forms to prevent users from\n          submitting twice the same form (accidental double-click).\n        </li>\n        <li>\n          <strong>nuxeo.jsf.defaultBytePrefixFormat</strong>: defines the default byte prefix format used by the\n          printFileSize JSF function, that displays a pretty print of the size of a file. Available formats are \"SI\",\n          \"IEC\" or \"JEDEC\". See <a href=\"http://en.wikipedia.org/wiki/Byte\" target=\"_blank\">the Wikipedia article on\n          Byte</a> for more information on those formats.\n        </li>\n      </ul>\n\n      @since 7.4\n    </documentation>\n\n    <property name=\"nuxeo.jsf.enableDoubleClickShield\">true</property>\n    <property name=\"nuxeo.jsf.defaultBytePrefixFormat\">SI</property>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that allows removing merging features on alias tags\n      (nxu:set), useful for backport of optimization on maintenance branches.\n\n      @since 6.0\n    \n",
              "documentationHtml": "<p>\nProperty that allows removing merging features on alias tags\n(nxu:set), useful for backport of optimization on maintenance branches.\n</p><p>\n&#64;since 6.0\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.configuration.default/Contributions/org.nuxeo.ecm.platform.ui.web.configuration.default--configuration1",
              "id": "org.nuxeo.ecm.platform.ui.web.configuration.default--configuration1",
              "registrationOrder": 42,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that allows removing merging features on alias tags\n      (nxu:set), useful for backport of optimization on maintenance branches.\n\n      @since 6.0\n    </documentation>\n    <property name=\"nuxeo.jsf.removeAliasOptims\">false</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that allows removing optimization features on alias\n      tags (nxu:set and associated), useful for backport of optimization on\n      maintenance branches.\n\n      @since 8.2\n    \n",
              "documentationHtml": "<p>\nProperty that allows removing optimization features on alias\ntags (nxu:set and associated), useful for backport of optimization on\nmaintenance branches.\n</p><p>\n&#64;since 8.2\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.configuration.default/Contributions/org.nuxeo.ecm.platform.ui.web.configuration.default--configuration2",
              "id": "org.nuxeo.ecm.platform.ui.web.configuration.default--configuration2",
              "registrationOrder": 43,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that allows removing optimization features on alias\n      tags (nxu:set and associated), useful for backport of optimization on\n      maintenance branches.\n\n      @since 8.2\n    </documentation>\n    <property name=\"nuxeo.jsf.removeAliasOptimsReloaded\">false</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.configuration.default/Contributions/org.nuxeo.ecm.platform.ui.web.configuration.default--configuration3",
              "id": "org.nuxeo.ecm.platform.ui.web.configuration.default--configuration3",
              "registrationOrder": 44,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <property name=\"nuxeo.jsf.debug.log_min_duration_ms\">-1</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that allows an alternative management of missing rows in an EditableModel object.\n\n      @since 10.3\n    \n",
              "documentationHtml": "<p>\nProperty that allows an alternative management of missing rows in an EditableModel object.\n</p><p>\n&#64;since 10.3\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.configuration.default/Contributions/org.nuxeo.ecm.platform.ui.web.configuration.default--configuration4",
              "id": "org.nuxeo.ecm.platform.ui.web.configuration.default--configuration4",
              "registrationOrder": 45,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that allows an alternative management of missing rows in an EditableModel object.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.jsf.skipMissingRow\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.configuration.default",
          "name": "org.nuxeo.ecm.platform.ui.web.configuration.default",
          "requirements": [],
          "resolutionOrder": 548,
          "services": [],
          "startOrder": 535,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.ui.web.configuration.default\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n\n    <documentation>\n      This contribution is the default contribution for JSF configurations.\n\n      Here are more details about some of them:\n      <ul>\n        <li>\n          <strong>nuxeo.jsf.enableDoubleClickShield</strong>: enables a shield on forms to prevent users from\n          submitting twice the same form (accidental double-click).\n        </li>\n        <li>\n          <strong>nuxeo.jsf.defaultBytePrefixFormat</strong>: defines the default byte prefix format used by the\n          printFileSize JSF function, that displays a pretty print of the size of a file. Available formats are \"SI\",\n          \"IEC\" or \"JEDEC\". See <a href=\"http://en.wikipedia.org/wiki/Byte\" target=\"_blank\">the Wikipedia article on\n          Byte</a> for more information on those formats.\n        </li>\n      </ul>\n\n      @since 7.4\n    </documentation>\n\n    <property name=\"nuxeo.jsf.enableDoubleClickShield\">true</property>\n    <property name=\"nuxeo.jsf.defaultBytePrefixFormat\">SI</property>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that allows removing merging features on alias tags\n      (nxu:set), useful for backport of optimization on maintenance branches.\n\n      @since 6.0\n    </documentation>\n    <property name=\"nuxeo.jsf.removeAliasOptims\">false</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that allows removing optimization features on alias\n      tags (nxu:set and associated), useful for backport of optimization on\n      maintenance branches.\n\n      @since 8.2\n    </documentation>\n    <property name=\"nuxeo.jsf.removeAliasOptimsReloaded\">false</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\"\n    point=\"configuration\">\n    <property name=\"nuxeo.jsf.debug.log_min_duration_ms\">-1</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that allows an alternative management of missing rows in an EditableModel object.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.jsf.skipMissingRow\">false</property>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/jsfconfiguration-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--loginScreen",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.login.startup.page.jsf.contrib/Contributions/org.nuxeo.login.startup.page.jsf.contrib--loginScreen",
              "id": "org.nuxeo.login.startup.page.jsf.contrib--loginScreen",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"loginScreen\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <loginScreenConfig>\n      <startupPages>\n        <startupPage id=\"jsf\" priority=\"10\">\n          <path>nxstartup.faces</path>\n        </startupPage>\n      </startupPages>\n    </loginScreenConfig>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.login.startup.page.jsf.contrib",
          "name": "org.nuxeo.login.startup.page.jsf.contrib",
          "requirements": [],
          "resolutionOrder": 549,
          "services": [],
          "startOrder": 678,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.login.startup.page.jsf.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"loginScreen\">\n    <loginScreenConfig>\n      <startupPages>\n        <startupPage id=\"jsf\" priority=\"10\">\n          <path>nxstartup.faces</path>\n        </startupPage>\n      </startupPages>\n    </loginScreenConfig>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/login-startup-page-jsf-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentValidationService--activations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.DocumentValidationService.activations/Contributions/org.nuxeo.ecm.platform.ui.web.DocumentValidationService.activations--activations",
              "id": "org.nuxeo.ecm.platform.ui.web.DocumentValidationService.activations--activations",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentValidationService",
                "name": "org.nuxeo.ecm.core.api.DocumentValidationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"activations\" target=\"org.nuxeo.ecm.core.api.DocumentValidationService\">\n    <validation activated=\"true\" context=\"jsfValidator\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.web.DocumentValidationService.activations",
          "name": "org.nuxeo.ecm.platform.ui.web.DocumentValidationService.activations",
          "requirements": [],
          "resolutionOrder": 550,
          "services": [],
          "startOrder": 528,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.DocumentValidationService.activations\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentValidationService\" point=\"activations\">\n    <validation context=\"jsfValidator\" activated=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/documentvalidationservice-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService--codecs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.url.codec.jsf.contribs/Contributions/org.nuxeo.url.codec.jsf.contribs--codecs",
              "id": "org.nuxeo.url.codec.jsf.contribs--codecs",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"codecs\" target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\">\n    <documentViewCodec class=\"org.nuxeo.ui.web.url.codec.JSFNotificationDocumentIdCodec\" enabled=\"true\" name=\"notificationDocId\" prefix=\"nxdoc\" priority=\"10\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui/org.nuxeo.url.codec.jsf.contribs",
          "name": "org.nuxeo.url.codec.jsf.contribs",
          "requirements": [],
          "resolutionOrder": 551,
          "services": [],
          "startOrder": 752,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.url.codec.jsf.contribs\">\n\n  <extension target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\" point=\"codecs\">\n    <documentViewCodec name=\"notificationDocId\" enabled=\"true\" prefix=\"nxdoc\" priority=\"10\"\n      class=\"org.nuxeo.ui.web.url.codec.JSFNotificationDocumentIdCodec\" />\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/url-codecs-jsf-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-ui-web-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui",
      "id": "org.nuxeo.ecm.platform.ui",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.ui.web.api,org.nuxeo.ecm.platform\r\n .ui.web.binding,org.nuxeo.ecm.platform.ui.web.cache,org.nuxeo.ecm.platf\r\n orm.ui.web.component,org.nuxeo.ecm.platform.ui.web.component.date,org.n\r\n uxeo.ecm.platform.ui.web.component.document,org.nuxeo.ecm.platform.ui.w\r\n eb.component.editor,org.nuxeo.ecm.platform.ui.web.component.file,org.nu\r\n xeo.ecm.platform.ui.web.component.list,org.nuxeo.ecm.platform.ui.web.co\r\n nverter,org.nuxeo.ecm.platform.ui.web.directory,org.nuxeo.ecm.platform.\r\n ui.web.htmleditor.api,org.nuxeo.ecm.platform.ui.web.htmleditor.service,\r\n org.nuxeo.ecm.platform.ui.web.invalidations,org.nuxeo.ecm.platform.ui.w\r\n eb.lifecycle,org.nuxeo.ecm.platform.ui.web.model,org.nuxeo.ecm.platform\r\n .ui.web.model.impl,org.nuxeo.ecm.platform.ui.web.multipart,org.nuxeo.ec\r\n m.platform.ui.web.pagination,org.nuxeo.ecm.platform.ui.web.pathelements\r\n ,org.nuxeo.ecm.platform.ui.web.rest,org.nuxeo.ecm.platform.ui.web.rest.\r\n api,org.nuxeo.ecm.platform.ui.web.rest.descriptors,org.nuxeo.ecm.platfo\r\n rm.ui.web.rest.services,org.nuxeo.ecm.platform.ui.web.restAPI,org.nuxeo\r\n .ecm.platform.ui.web.restAPI.service,org.nuxeo.ecm.platform.ui.web.rich\r\n faces,org.nuxeo.ecm.platform.ui.web.seamremoting,org.nuxeo.ecm.platform\r\n .ui.web.shield,org.nuxeo.ecm.platform.ui.web.tag.fn,org.nuxeo.ecm.platf\r\n orm.ui.web.tag.handler,org.nuxeo.ecm.platform.ui.web.tag.jsf,org.nuxeo.\r\n ecm.platform.ui.web.tag.jsf.html,org.nuxeo.ecm.platform.ui.web.util,org\r\n .nuxeo.ecm.platform.ui.web.util.files\r\nPrivate-Package: .\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo ECM Web Platform Fragment\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nRequire-Bundle: org.nuxeo.ecm.platform.mimetype.api\r\nNuxeo-Component: OSGI-INF/authentication-contrib.xml,OSGI-INF/restAPI-fr\r\n amework.xml,OSGI-INF/restAPI-contrib.xml,OSGI-INF/urlservice-framework.\r\n xml,OSGI-INF/urlservice-contrib.xml,OSGI-INF/htmleditor-framework.xml,O\r\n SGI-INF/htmleditor-contrib.xml,OSGI-INF/request-controler-contrib.xml,O\r\n SGI-INF/seamremotingjsbuilder-framework.xml,OSGI-INF/reload-jsf-contrib\r\n .xml,OSGI-INF/username-cache-config.xml,OSGI-INF/jsfblobuploader-servic\r\n e.xml,OSGI-INF/jsfconfiguration-properties.xml,OSGI-INF/login-startup-p\r\n age-jsf-contrib.xml,OSGI-INF/documentvalidationservice-contrib.xml,OSGI\r\n -INF/url-codecs-jsf-contrib.xml\r\nImport-Package: com.noelios.restlet.ext.servlet;resolution:=optional,com\r\n .noelios.restlet.http;resolution:=optional,com.sun.facelets;resolution:\r\n =optional,com.sun.facelets.component;resolution:=optional,com.sun.facel\r\n ets.el;resolution:=optional,com.sun.facelets.tag;resolution:=optional,c\r\n om.sun.facelets.tag.jsf;resolution:=optional,com.sun.facelets.tag.jsf.h\r\n tml;resolution:=optional,com.sun.facelets.util;resolution:=optional,com\r\n .sun.faces.lifecycle;resolution:=optional,com.sun.faces.renderkit.html_\r\n basic;resolution:=optional,com.sun.faces.util;resolution:=optional,java\r\n x.annotation;version=\"1.0\",javax.ejb,javax.el,javax.faces,javax.faces.a\r\n pplication,javax.faces.component,javax.faces.component.html,javax.faces\r\n .context,javax.faces.convert,javax.faces.el,javax.faces.event,javax.fac\r\n es.lifecycle,javax.faces.model,javax.faces.render,javax.faces.validator\r\n ,javax.faces.webapp,javax.interceptor,javax.naming,javax.security.auth.\r\n login,javax.servlet;resolution:=optional,javax.servlet.http,javax.servl\r\n et.jsp.tagext;resolution:=optional,javax.transaction;version=\"1.1\",org.\r\n ajax4jsf.javascript;resolution:=optional,org.ajax4jsf.resource;resoluti\r\n on:=optional,org.ajax4jsf.webapp.taglib;resolution:=optional,org.apache\r\n .commons.fileupload,org.apache.commons.fileupload.disk,org.apache.commo\r\n ns.fileupload.servlet,org.apache.commons.lang,org.apache.commons.loggin\r\n g,org.dom4j,org.dom4j.dom,org.dom4j.io,org.dom4j.tree;version=\"1.6.1\",o\r\n rg.jboss.seam,org.jboss.seam.annotations;resolution:=optional,org.jboss\r\n .seam.annotations.intercept;resolution:=optional,org.jboss.seam.annotat\r\n ions.remoting;resolution:=optional,org.jboss.seam.annotations.web;resol\r\n ution:=optional,org.jboss.seam.contexts;resolution:=optional,org.jboss.\r\n seam.core,org.jboss.seam.faces,org.jboss.seam.intercept,org.jboss.seam.\r\n mock,org.jboss.seam.servlet,org.jboss.seam.transaction,org.jboss.seam.u\r\n i.component;resolution:=optional,org.jboss.seam.ui.component.html;resol\r\n ution:=optional,org.jboss.seam.util,org.jboss.seam.web,org.nuxeo.common\r\n .utils,org.nuxeo.common.utils.i18n,org.nuxeo.common.xmap.annotation,org\r\n .nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,org.nuxeo.ec\r\n m.core.api.facet,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.core.api.imp\r\n l.blob,org.nuxeo.ecm.core.api.model,org.nuxeo.ecm.core.api.model.impl,o\r\n rg.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.core.api.security,org.nu\r\n xeo.ecm.core.io,org.nuxeo.ecm.core.io.impl,org.nuxeo.ecm.core.io.impl.p\r\n lugins,org.nuxeo.ecm.core.query.sql,org.nuxeo.ecm.core.query.sql.model,\r\n org.nuxeo.ecm.core.schema,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm\r\n .core.search.api.client.querymodel,org.nuxeo.ecm.core.utils,org.nuxeo.e\r\n cm.directory;api=split,org.nuxeo.ecm.directory.api,org.nuxeo.ecm.platfo\r\n rm.actions,org.nuxeo.ecm.platform.el,org.nuxeo.ecm.platform.filemanager\r\n .api,org.nuxeo.ecm.platform.mimetype,org.nuxeo.ecm.platform.mimetype.in\r\n terfaces,org.nuxeo.ecm.platform.types,org.nuxeo.ecm.platform.types.adap\r\n ter,org.nuxeo.ecm.platform.ui.web.auth,org.nuxeo.ecm.platform.ui.web.au\r\n th.plugins,org.nuxeo.ecm.platform.ui.web.model,org.nuxeo.ecm.platform.u\r\n i.web.model.impl,org.nuxeo.ecm.platform.url,org.nuxeo.ecm.platform.url.\r\n api,org.nuxeo.ecm.platform.url.codec,org.nuxeo.ecm.platform.usermanager\r\n ,org.nuxeo.ecm.platform.util,org.nuxeo.ecm.platform.web.common.exceptio\r\n nhandling,org.nuxeo.ecm.platform.web.common.exceptionhandling.service,o\r\n rg.nuxeo.ecm.platform.web.common.resources,org.nuxeo.ecm.platform.web.c\r\n ommon.vh,org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runtime.mode\r\n l,org.nuxeo.runtime.transaction,org.restlet;resolution:=optional,org.re\r\n stlet.data;resolution:=optional,org.restlet.resource;resolution:=option\r\n al,org.restlet.util;resolution:=optional,org.w3c.dom,org.xml.sax\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.ui;singleton:=true\r\nBundle-Activator: org.nuxeo.ecm.platform.ui.web.UIWebActivator\r\n\r\n",
      "maxResolutionOrder": 551,
      "minResolutionOrder": 536,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.mimetype.api"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-versioning-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.versioning",
          "org.nuxeo.ecm.platform.versioning.api"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.versioning",
        "id": "grp:org.nuxeo.ecm.platform.versioning",
        "name": "org.nuxeo.ecm.platform.versioning",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.versioning",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.versioning.service.VersioningManagerImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Component giving access to a few utility methods related to versioning.\n  \n",
          "documentationHtml": "<p>\nComponent giving access to a few utility methods related to versioning.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.versioning/org.nuxeo.ecm.platform.versioning/org.nuxeo.ecm.platform.versioning.VersioningManager",
          "name": "org.nuxeo.ecm.platform.versioning.VersioningManager",
          "requirements": [],
          "resolutionOrder": 584,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.versioning.VersioningManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.versioning/org.nuxeo.ecm.platform.versioning/org.nuxeo.ecm.platform.versioning.VersioningManager/Services/org.nuxeo.ecm.platform.versioning.api.VersioningManager",
              "id": "org.nuxeo.ecm.platform.versioning.api.VersioningManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 894,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.versioning.VersioningManager\">\n  <documentation>\n    Component giving access to a few utility methods related to versioning.\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.versioning.service.VersioningManagerImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.versioning.api.VersioningManager\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/versioningmanager-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-versioning-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.versioning/org.nuxeo.ecm.platform.versioning",
      "id": "org.nuxeo.ecm.platform.versioning",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.versioning,org.nuxeo.ecm.platform\r\n .versioning.ejb,org.nuxeo.ecm.platform.versioning.listeners,org.nuxeo.e\r\n cm.platform.versioning.service,schema\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo Versioning\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: false\r\nNuxeo-Component: OSGI-INF/versioningmanager-service.xml\r\nImport-Package: javax.annotation;version=\"1.0\",javax.ejb,javax.naming,ja\r\n vax.persistence,org.apache.commons.logging,org.nuxeo.common.collections\r\n ,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.core.api.event,org.nuxe\r\n o.ecm.core.event,org.nuxeo.ecm.core.event.impl,org.nuxeo.ecm.core.schem\r\n a,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm.core.utils,org.nuxeo.ec\r\n m.directory;api=split,org.nuxeo.ecm.platform.versioning.api,org.nuxeo.o\r\n sgi,org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.versioning\r\nRequire-Bundle: org.nuxeo.ecm.core\r\n\r\n",
      "maxResolutionOrder": 584,
      "minResolutionOrder": 584,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-salesforce-core",
      "artifactVersion": "2023.0.2",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.salesforce.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.salesforce",
        "id": "grp:org.nuxeo.salesforce",
        "name": "org.nuxeo.salesforce",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "[![Build Status](https://qa.nuxeo.org/jenkins/buildStatus/icon?job=addons_nuxeo-salesforce-master)](https://qa.nuxeo.org/jenkins/job/addons_nuxeo-salesforce-master/)\n\n# Nuxeo Salesforce\n\nThis project provide an integration of Nuxeo inside Salesforce pages. The project is made of two modules: the Nuxeo plugin bundle `nuxeo-salesforce-core` and the LWC salesforce application `nuxeo-sfdc`.   \n\nHere, you can find more details about the **[Nuxeo LWC Application](nuxeo-sfdc/README.md)**.\n\n##License\n\n(C) Copyright 2015 Nuxeo SA (http://nuxeo.com/). This is unpublished proprietary source code of Nuxeo SA. All rights reserved. Notice of copyright on this source code does not indicate publication.\n    \n",
            "digest": "2692aa0dfa96d6bcea7bbe188193c6ed",
            "encoding": "UTF-8",
            "length": 702,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.salesforce.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--operation",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.automation.contrib/Contributions/org.nuxeo.salesforce.automation.contrib--operation",
              "id": "org.nuxeo.salesforce.automation.contrib--operation",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "name": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"operation\" target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\">\n    <scriptedOperation id=\"Salesforce.TouchSFLibrary\">\n      <inputType>document</inputType>\n      <outputType>document</outputType>\n      <category>javascript</category>\n      <param name=\"update\" type=\"Boolean\"/>\n      <param name=\"record\" type=\"Object\"/>\n      <script>\n        <![CDATA[function run(input, params) {\n            var sfobject = JSON.parse(params.record);\n            var update = params.update;\n            var properties = {\n                 \"dc:title\" : sfobject.Name,\n                 \"sf:objectId\" : sfobject.Id,\n                 \"sf:objectType\" : sfobject.sobjectType,\n                 \"dc:description\" : sfobject.Description || '',\n            };\n            if ('Amount' in sfobject) {\n                properties[\"sf:objectAmount\"] = sfobject.Amount ? sfobject.Amount.toString() : null;\n            }\n            if (update) {\n                return Document.Update(input, { 'properties': properties });\n            } else {\n                var docs = Repository.Query(null, {\n                    'query': \"SELECT * FROM Document WHERE ecm:isTrashed = 0 AND sf:objectId = '\" + sfobject.Id + \"' AND ecm:isVersion = 0 AND ecm:mixinType != 'HiddenInNavigation'\",\n                });\n                if (docs.length > 0) {\n                    return Repository.GetDocument(null, { 'value': docs[0].id });\n                } else {\n                    return Document.Create(input, {\n                        \"type\" : \"Workspace\",\n                        \"name\" : sfobject.Name.replace(/[^A-Za-z0-9_.-]+/g, '-'),\n                        \"properties\" : properties\n                    });\n                }\n            }\n        }]]>\n      </script>\n    </scriptedOperation>\n\n    <scriptedOperation id=\"Salesforce.LinkAsSource\">\n      <inputType>document</inputType>\n      <outputType>document</outputType>\n      <category>Salesforce</category>\n      <param name=\"unlink\" type=\"Boolean\"/>\n      <param name=\"record\" type=\"Object\"/>\n      <script>\n        <![CDATA[function run(input, params) {\n            var sfobject = JSON.parse(params.record);\n            Auth.LoginAs(null, {\n            \t'name': null\n            }); // login as sys admin\n            var doc = Salesforce.LinkDocument(input, {\n            \t'unlink': params.unlink,\n            \t'objectId': sfobject.Id \n            });\n            Audit.LogEvent(input, {\n            \t'event': params.unlink ? 'DocumentUnlinkedFromSalesforceObject' : 'DocumentLinkedToSalesforceObject',\n            \t'category': 'Salesforce',\n            \t'comment': sfobject.Name + ' - ' +sfobject.Id \n            })\n            return doc;\n        }]]>\n      </script>\n    </scriptedOperation>\n    \n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.automation.contrib",
          "name": "org.nuxeo.salesforce.automation.contrib",
          "requirements": [],
          "resolutionOrder": 835,
          "services": [],
          "startOrder": 726,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.salesforce.automation.contrib\">\n  <extension\n          target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\"\n          point=\"operation\">\n    <scriptedOperation id=\"Salesforce.TouchSFLibrary\">\n      <inputType>document</inputType>\n      <outputType>document</outputType>\n      <category>javascript</category>\n      <param name=\"update\" type=\"Boolean\"/>\n      <param name=\"record\" type=\"Object\"/>\n      <script>\n        <![CDATA[function run(input, params) {\n            var sfobject = JSON.parse(params.record);\n            var update = params.update;\n            var properties = {\n                 \"dc:title\" : sfobject.Name,\n                 \"sf:objectId\" : sfobject.Id,\n                 \"sf:objectType\" : sfobject.sobjectType,\n                 \"dc:description\" : sfobject.Description || '',\n            };\n            if ('Amount' in sfobject) {\n                properties[\"sf:objectAmount\"] = sfobject.Amount ? sfobject.Amount.toString() : null;\n            }\n            if (update) {\n                return Document.Update(input, { 'properties': properties });\n            } else {\n                var docs = Repository.Query(null, {\n                    'query': \"SELECT * FROM Document WHERE ecm:isTrashed = 0 AND sf:objectId = '\" + sfobject.Id + \"' AND ecm:isVersion = 0 AND ecm:mixinType != 'HiddenInNavigation'\",\n                });\n                if (docs.length > 0) {\n                    return Repository.GetDocument(null, { 'value': docs[0].id });\n                } else {\n                    return Document.Create(input, {\n                        \"type\" : \"Workspace\",\n                        \"name\" : sfobject.Name.replace(/[^A-Za-z0-9_.-]+/g, '-'),\n                        \"properties\" : properties\n                    });\n                }\n            }\n        }]]>\n      </script>\n    </scriptedOperation>\n\n    <scriptedOperation id=\"Salesforce.LinkAsSource\">\n      <inputType>document</inputType>\n      <outputType>document</outputType>\n      <category>Salesforce</category>\n      <param name=\"unlink\" type=\"Boolean\"/>\n      <param name=\"record\" type=\"Object\"/>\n      <script>\n        <![CDATA[function run(input, params) {\n            var sfobject = JSON.parse(params.record);\n            Auth.LoginAs(null, {\n            \t'name': null\n            }); // login as sys admin\n            var doc = Salesforce.LinkDocument(input, {\n            \t'unlink': params.unlink,\n            \t'objectId': sfobject.Id \n            });\n            Audit.LogEvent(input, {\n            \t'event': params.unlink ? 'DocumentUnlinkedFromSalesforceObject' : 'DocumentLinkedToSalesforceObject',\n            \t'category': 'Salesforce',\n            \t'comment': sfobject.Name + ' - ' +sfobject.Id \n            })\n            return doc;\n        }]]>\n      </script>\n    </scriptedOperation>\n    \n  </extension>\n    \n</component>\n",
          "xmlFileName": "/OSGI-INF/automation-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.schema.contrib/Contributions/org.nuxeo.salesforce.schema.contrib--schema",
              "id": "org.nuxeo.salesforce.schema.contrib--schema",
              "registrationOrder": 49,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"salesforce\" prefix=\"sf\" src=\"schema/salesforce.xsd\"/>\n    <schema name=\"salesforce_search\" prefix=\"sfs\" src=\"schema/salesforce_search.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.schema.contrib/Contributions/org.nuxeo.salesforce.schema.contrib--doctype",
              "id": "org.nuxeo.salesforce.schema.contrib--doctype",
              "registrationOrder": 47,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"salesforce\">\n      <schema name=\"salesforce\"/>\n    </facet>\n    <doctype append=\"true\" name=\"Workspace\">\n      <facet name=\"salesforce\"/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"SalesforceSearch\">\n      <facet name=\"HiddenInNavigation\"/>\n      <schema name=\"salesforce_search\"/>\n    </doctype>\n    \n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.schema.contrib",
          "name": "org.nuxeo.salesforce.schema.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 836,
          "services": [],
          "startOrder": 729,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.salesforce.schema.contrib\">\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"schema\">\n    <schema name=\"salesforce\" prefix=\"sf\" src=\"schema/salesforce.xsd\"/>\n    <schema name=\"salesforce_search\" prefix=\"sfs\" src=\"schema/salesforce_search.xsd\"/>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"doctype\">\n    <facet name=\"salesforce\">\n      <schema name=\"salesforce\" />\n    </facet>\n    <doctype name=\"Workspace\" append=\"true\">\n      <facet name=\"salesforce\"/>\n    </doctype>\n\n    <doctype name=\"SalesforceSearch\" extends=\"Document\">\n      <facet name=\"HiddenInNavigation\" />\n      <schema name=\"salesforce_search\" />\n    </doctype>\n    \n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/schema-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--corsConfig",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.cors/Contributions/org.nuxeo.salesforce.cors--corsConfig",
              "id": "org.nuxeo.salesforce.cors--corsConfig",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"corsConfig\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n    <corsConfig name=\"nuxeo-sfdc\" supportedMethods=\"GET,POST,HEAD,OPTIONS,DELETE,PUT\">\n      <pattern>/nuxeo/.*</pattern>\n    </corsConfig>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.cors",
          "name": "org.nuxeo.salesforce.cors",
          "requirements": [],
          "resolutionOrder": 837,
          "services": [],
          "startOrder": 728,
          "version": "2023.0.2",
          "xmlFileContent": "<component name=\"org.nuxeo.salesforce.cors\">\n  <extension target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\" point=\"corsConfig\">\n    <corsConfig name=\"nuxeo-sfdc\" supportedMethods=\"GET,POST,HEAD,OPTIONS,DELETE,PUT\">\n      <pattern>/nuxeo/.*</pattern>\n    </corsConfig>\n  </extension>\n</component>\n\n",
          "xmlFileName": "/OSGI-INF/cors-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--sessionManager",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.auth.contrib/Contributions/org.nuxeo.salesforce.auth.contrib--sessionManager",
              "id": "org.nuxeo.salesforce.auth.contrib--sessionManager",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"sessionManager\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <sessionManager class=\"org.nuxeo.salesforce.SalesforceSessionManager\" enabled=\"true\" name=\"Salesforce\">\n    </sessionManager>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.auth.contrib",
          "name": "org.nuxeo.salesforce.auth.contrib",
          "requirements": [],
          "resolutionOrder": 838,
          "services": [],
          "startOrder": 725,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.salesforce.auth.contrib\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"sessionManager\">\n\n    <sessionManager name=\"Salesforce\" enabled=\"true\"\n      class=\"org.nuxeo.salesforce.SalesforceSessionManager\">\n    </sessionManager>\n  </extension>\n    \n</component>",
          "xmlFileName": "/OSGI-INF/auth-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.services.resource.ResourceService--resources",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.business-metadata/Contributions/org.nuxeo.salesforce.business-metadata--resources",
              "id": "org.nuxeo.salesforce.business-metadata--resources",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.services.resource.ResourceService",
                "name": "org.nuxeo.runtime.services.resource.ResourceService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.runtime.services.resource.ResourceService\">\n    <!-- resource name=\"salesforce-business-metadata\">salesforce-business-metadata.ftl</resource -->\n    <resource name=\"salesforce-business-metadata\">OSGI-INF/salesforce-business-metadata.ftl</resource>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--operation",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.business-metadata/Contributions/org.nuxeo.salesforce.business-metadata--operation",
              "id": "org.nuxeo.salesforce.business-metadata--operation",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "name": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"operation\" target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\">\n\n\t<!--\n\tAn operation which is generating a HTML fragment displaying the business metadata    \n\t-->\n    <scriptedOperation id=\"Salesforce.RenderBusinessMetadata\">\n      <inputType>document</inputType>\n      <outputType>blob</outputType>\n      <category>Salesforce</category>\n\t  <param name=\"lang\" type=\"String\"/>\n\t        \n      <script>\n        <![CDATA[function run(input, params) {\n        \t// push the client language in the context\n        \tctx.SALESFORCE_LANG = params.lang;\n        \tvar blob = Render.Document(input, {\n        \t\ttemplate: 'template:salesforce-business-metadata'        \t\t\n        \t});\n        \t\n        \treturn blob.getString(); // return the html fragment as a string\n        }]]>\n      </script>\n    </scriptedOperation>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.business-metadata",
          "name": "org.nuxeo.salesforce.business-metadata",
          "requirements": [],
          "resolutionOrder": 839,
          "services": [],
          "startOrder": 727,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.salesforce.business-metadata\">\n\n  <!-- \n  Register the template to be used by Salesforce.RenderBusinessMetadata\n  See com.quandora.web.rendering.api.DefaultDocumentView for all the fields available on a Document object in a freemarker template\n  See org.nuxeo.ecm.automation.core.scripting.Scripting initBindings method for global variables available in the template \n  You can debug by putting the  resource inside the data/resources folder and referencing it using the relative name from that folder. \n  -->\n  <extension target=\"org.nuxeo.runtime.services.resource.ResourceService\" point=\"resources\">\n    <!-- resource name=\"salesforce-business-metadata\">salesforce-business-metadata.ftl</resource -->\n    <resource name=\"salesforce-business-metadata\">OSGI-INF/salesforce-business-metadata.ftl</resource>\n  </extension>\n\n  <extension\n          target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\"\n          point=\"operation\">\n\n\t<!--\n\tAn operation which is generating a HTML fragment displaying the business metadata    \n\t-->\n    <scriptedOperation id=\"Salesforce.RenderBusinessMetadata\">\n      <inputType>document</inputType>\n      <outputType>blob</outputType>\n      <category>Salesforce</category>\n\t  <param name=\"lang\" type=\"String\" />\n\t        \n      <script>\n        <![CDATA[function run(input, params) {\n        \t// push the client language in the context\n        \tctx.SALESFORCE_LANG = params.lang;\n        \tvar blob = Render.Document(input, {\n        \t\ttemplate: 'template:salesforce-business-metadata'        \t\t\n        \t});\n        \t\n        \treturn blob.getString(); // return the html fragment as a string\n        }]]>\n      </script>\n    </scriptedOperation>\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/business-metadata.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.salesforce.SalesforceComponent",
          "declaredStartOrder": null,
          "documentation": "\n  A service to configure remote a remote Nuxeo Salesforce application connecting to this Nuxeo instance. \n  \n",
          "documentationHtml": "<p>\nA service to configure remote a remote Nuxeo Salesforce application connecting to this Nuxeo instance.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.salesforce.SalesforceComponent",
              "descriptors": [
                "org.nuxeo.salesforce.config.LibraryAppConfigDescriptor",
                "org.nuxeo.salesforce.config.DocListAppConfigDescriptor",
                "org.nuxeo.salesforce.config.SearchAppConfigDescriptor"
              ],
              "documentation": "Configure the library app\n",
              "documentationHtml": "<p>\nConfigure the library app</p>",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/ExtensionPoints/org.nuxeo.salesforce.SalesforceComponent--config",
              "id": "org.nuxeo.salesforce.SalesforceComponent--config",
              "label": "config (org.nuxeo.salesforce.SalesforceComponent)",
              "name": "config",
              "version": "2023.0.2"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--operations",
              "id": "org.nuxeo.salesforce.SalesforceComponent--operations",
              "registrationOrder": 35,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.salesforce.config.SalesforceConfigProvider\"/>\n    <operation class=\"org.nuxeo.salesforce.config.SalesforceValidateConnection\"/>\n    <operation class=\"org.nuxeo.salesforce.operations.LinkDocument\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.automation.server.AutomationServer--bindings",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--bindings",
              "id": "org.nuxeo.salesforce.SalesforceComponent--bindings",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"bindings\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <binding name=\"Salesforce.ConfigProvider\"/>\n    <binding name=\"Salesforce.ValidateConnection\"/>\n    <binding name=\"Salesforce.LinkDocument\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--marshallers",
              "id": "org.nuxeo.salesforce.SalesforceComponent--marshallers",
              "registrationOrder": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n      <register class=\"org.nuxeo.salesforce.enrichers.ExternalDownloadURLJsonEnricher\" enable=\"true\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.salesforce.SalesforceComponent--config",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--config",
              "id": "org.nuxeo.salesforce.SalesforceComponent--config",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.salesforce.SalesforceComponent",
                "name": "org.nuxeo.salesforce.SalesforceComponent",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"config\" target=\"org.nuxeo.salesforce.SalesforceComponent\">\n      <library>\n        <!-- title>Nuxeo Library</title -->\n      \t<root>/default-domain/workspaces</root>\n      \t<nuxeo-drive>true</nuxeo-drive>\n      \t<!-- \n      \tyou can control the visibility of these columns: type, size, author, lastModified.\n      \tThe default is to hide the type column. \n      \t-->\n      \t<doclist-hidden-columns>type</doclist-hidden-columns>\n      \t<!--\n      \tYou can control which doc tab, data section, doc action or nav actions are visible. \n      \tIf not specified or empty all items are visible:\n      \t<doc-tabs>preview,data,history</doc-tabs>  \n      \t<data-sections>metadata,business-metadata,attachments,renditions,mlt</data-sections>\n      \t<doc-actions>edit,open,download,upload,lock</doc-actions>\n      \t<nav-actions>download,open,edit,delete</nav-actions>\n      \tThe custom nav. actions are added to the built-in nav-actions. You should define a label, a Salesforce icon ID \n      \tand an operation to be invoked bny the action \n      \t<custom-nav-actions>\n      \t\t<action name='myaction' label=\"My Action\" icon=\"action:new_note\" operation=\"Salesforce.MyAction\" />\n      \t\t...\n      \t</custom-nav-actions>\n      \t\n      \tTo add custom user fields:\n        <user-fields>NuxeoUserId__c,Team__c</user-fields>\n        \n        You can change the default open action to open the document in nuxeo:\n        (The default is to open the document in the document viewer on the right of the listing.)   \n        <open-doc-in-nuxeo>true</open-doc-in-nuxeo>\n        \n      \t<preview>\n      \tfunction(doc) {\n      \t\t// the doc object is an instance of the FileDoc class from force-app/main/default/lwc/nuxeoClient/model.js\n      \t\t// the doc.doc object is the Nuxeo document defined in nuxeo javascript client.\n      \t\t// Refer to FileDoc for more on the API it expose.\n      \t\t// You can return null (or falsy) to let the client use the default rendition detection.         \t\t\n      \t\treturn {\n      \t\t\tviewer: \"video\" | \"audio\" | \"image\" | \"pdf\" | \"html\" | \"text\" | \"binary\",\n      \t\t\trendition: renditionId\n      \t\t\tcontent: xpath\n      \t\t\ttype: mime-type // optional mime type - must be specified for videos.\n      \t\t}\n      \t}\n      \t</preview>\n      \t -->\n      </library>\n      <listing>\n        <!-- title>Nuxeo Documents</title -->\n      \t<nuxeo-drive>true</nuxeo-drive>      \t\n      \t<upload>true</upload>\n      \t<link-operation>Salesforce.LinkAsSource</link-operation>\n      \t<link-test>\n      \tfunction(doc, recordId) {\n            var source = doc.properties['dc:source'];\n            return source ? source === recordId || source.split(',').indexOf(recordId) &gt; -1 : false;\n      \t}\n      \t</link-test>\n      \t<!--\n      \tThe query element defines a custom javascript function to be used by the client to create the search call \n      \tfor the listing and listing search requests.    \n      \tThe context object describe the client context and can be used to compute the page provider or other parameters\n      \tto pass to the search. The context object contains the following properties: repositoryName, appType, appConfig, \n      \trecordId, recordType, record and env. The **env** property is a custom environment object \n      \tthat can be defined by external components. (by default it is an empty object)\n      \t\n      \tNote that we wrap the recordId inside % characters - to be able to use the LIKE operator in the fixed part of the sfdc_linked_docs page provider     \n      \t -->\n      \t<query>\n      \tfunction(context, params) {\n      \t\tparams.pageProvider = \"sfdc_linked_docs\";\n      \t\tparams.recordId = '%'+context.recordId+'%';\n      \t}\n      \t</query>\n      \t<!-- \n      \tyou can control the visibility of these columns: type, size, author, lastModified.\n      \tThe default is to hide the type column. \n      \t-->\n      \t<doclist-hidden-columns>type</doclist-hidden-columns>      \t\n      </listing>\n      <search>\n        <!--  title>Nuxeo Search</title -->\n        <nuxeo-drive>true</nuxeo-drive>\n      \t<page-provider>default_search</page-provider>\n      </search>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--providers",
              "id": "org.nuxeo.salesforce.SalesforceComponent--providers",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n  \t<coreQueryPageProvider name=\"sfdc_load_library\">\n      <searchDocumentType>SalesforceSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n      \t  ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isTrashed = 0\n      \t</fixedPart>\n        <predicate operator=\"=\" parameter=\"sf:objectId\">\n          <field name=\"recordId\" schema=\"salesforce_search\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"false\" column=\"dc:created\"/>      \n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>  \t\n  \n  \t<coreQueryPageProvider name=\"sfdc_linked_docs\">\n      <searchDocumentType>SalesforceSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n      \t  ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isTrashed = 0 AND dc:source LIKE :recordId\n      \t</fixedPart>\n        <predicate operator=\"FULLTEXT\" parameter=\"ecm:fulltext\">\n          <field name=\"ecm_fulltext\" schema=\"salesforce_search\"/>\n        </predicate>\n      </whereClause>\n      <quickFilters>\n        <quickFilter name=\"noFolder\">\n          <clause>ecm:mixinType != 'Folderish'</clause>\n        </quickFilter>\n      </quickFilters>\n      <!--  sort column=\"dc:modified\" ascending=\"false\" / -->\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>  \t\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--contextHelpers",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--contextHelpers",
              "id": "org.nuxeo.salesforce.SalesforceComponent--contextHelpers",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"contextHelpers\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <contextHelper class=\"org.nuxeo.salesforce.SalesforceFunctions\" id=\"Salesforce\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent",
          "name": "org.nuxeo.salesforce.SalesforceComponent",
          "requirements": [],
          "resolutionOrder": 840,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.salesforce.SalesforceComponent",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Services/org.nuxeo.salesforce.SalesforceComponent",
              "id": "org.nuxeo.salesforce.SalesforceComponent",
              "overriden": false,
              "version": "2023.0.2"
            }
          ],
          "startOrder": 929,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.salesforce.SalesforceComponent\" version=\"1.0\">\n  <documentation>\n  A service to configure remote a remote Nuxeo Salesforce application connecting to this Nuxeo instance. \n  </documentation>\n\n  <implementation class=\"org.nuxeo.salesforce.SalesforceComponent\"/>\n\n  <service>\n\t  <provide interface=\"org.nuxeo.salesforce.SalesforceComponent\" />\n  </service>\n\n  <extension-point name=\"config\">\n    <documentation>Configure the library app</documentation>\n    <object class=\"org.nuxeo.salesforce.config.LibraryAppConfigDescriptor\"/>\n    <object class=\"org.nuxeo.salesforce.config.DocListAppConfigDescriptor\"/>\n    <object class=\"org.nuxeo.salesforce.config.SearchAppConfigDescriptor\"/>\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.salesforce.config.SalesforceConfigProvider\" />\n    <operation class=\"org.nuxeo.salesforce.config.SalesforceValidateConnection\" />\n    <operation class=\"org.nuxeo.salesforce.operations.LinkDocument\" />\n  </extension>\n  <extension target=\"org.nuxeo.ecm.automation.server.AutomationServer\" point=\"bindings\">\n    <binding name=\"Salesforce.ConfigProvider\"></binding>\n    <binding name=\"Salesforce.ValidateConnection\"></binding>\n    <binding name=\"Salesforce.LinkDocument\"></binding>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n      <register class=\"org.nuxeo.salesforce.enrichers.ExternalDownloadURLJsonEnricher\" enable=\"true\" />\n  </extension>\n\n  <!-- \n  Default configuration. \n  -->\n  <extension target=\"org.nuxeo.salesforce.SalesforceComponent\"\n      point=\"config\">\n      <library>\n        <!-- title>Nuxeo Library</title -->\n      \t<root>/default-domain/workspaces</root>\n      \t<nuxeo-drive>true</nuxeo-drive>\n      \t<!-- \n      \tyou can control the visibility of these columns: type, size, author, lastModified.\n      \tThe default is to hide the type column. \n      \t-->\n      \t<doclist-hidden-columns>type</doclist-hidden-columns>\n      \t<!--\n      \tYou can control which doc tab, data section, doc action or nav actions are visible. \n      \tIf not specified or empty all items are visible:\n      \t<doc-tabs>preview,data,history</doc-tabs>  \n      \t<data-sections>metadata,business-metadata,attachments,renditions,mlt</data-sections>\n      \t<doc-actions>edit,open,download,upload,lock</doc-actions>\n      \t<nav-actions>download,open,edit,delete</nav-actions>\n      \tThe custom nav. actions are added to the built-in nav-actions. You should define a label, a Salesforce icon ID \n      \tand an operation to be invoked bny the action \n      \t<custom-nav-actions>\n      \t\t<action name='myaction' label=\"My Action\" icon=\"action:new_note\" operation=\"Salesforce.MyAction\" />\n      \t\t...\n      \t</custom-nav-actions>\n      \t\n      \tTo add custom user fields:\n        <user-fields>NuxeoUserId__c,Team__c</user-fields>\n        \n        You can change the default open action to open the document in nuxeo:\n        (The default is to open the document in the document viewer on the right of the listing.)   \n        <open-doc-in-nuxeo>true</open-doc-in-nuxeo>\n        \n      \t<preview>\n      \tfunction(doc) {\n      \t\t// the doc object is an instance of the FileDoc class from force-app/main/default/lwc/nuxeoClient/model.js\n      \t\t// the doc.doc object is the Nuxeo document defined in nuxeo javascript client.\n      \t\t// Refer to FileDoc for more on the API it expose.\n      \t\t// You can return null (or falsy) to let the client use the default rendition detection.         \t\t\n      \t\treturn {\n      \t\t\tviewer: \"video\" | \"audio\" | \"image\" | \"pdf\" | \"html\" | \"text\" | \"binary\",\n      \t\t\trendition: renditionId\n      \t\t\tcontent: xpath\n      \t\t\ttype: mime-type // optional mime type - must be specified for videos.\n      \t\t}\n      \t}\n      \t</preview>\n      \t -->\n      </library>\n      <listing>\n        <!-- title>Nuxeo Documents</title -->\n      \t<nuxeo-drive>true</nuxeo-drive>      \t\n      \t<upload>true</upload>\n      \t<link-operation>Salesforce.LinkAsSource</link-operation>\n      \t<link-test>\n      \tfunction(doc, recordId) {\n            var source = doc.properties['dc:source'];\n            return source ? source === recordId || source.split(',').indexOf(recordId) > -1 : false;\n      \t}\n      \t</link-test>\n      \t<!--\n      \tThe query element defines a custom javascript function to be used by the client to create the search call \n      \tfor the listing and listing search requests.    \n      \tThe context object describe the client context and can be used to compute the page provider or other parameters\n      \tto pass to the search. The context object contains the following properties: repositoryName, appType, appConfig, \n      \trecordId, recordType, record and env. The **env** property is a custom environment object \n      \tthat can be defined by external components. (by default it is an empty object)\n      \t\n      \tNote that we wrap the recordId inside % characters - to be able to use the LIKE operator in the fixed part of the sfdc_linked_docs page provider     \n      \t -->\n      \t<query>\n      \tfunction(context, params) {\n      \t\tparams.pageProvider = \"sfdc_linked_docs\";\n      \t\tparams.recordId = '%'+context.recordId+'%';\n      \t}\n      \t</query>\n      \t<!-- \n      \tyou can control the visibility of these columns: type, size, author, lastModified.\n      \tThe default is to hide the type column. \n      \t-->\n      \t<doclist-hidden-columns>type</doclist-hidden-columns>      \t\n      </listing>\n      <search>\n        <!--  title>Nuxeo Search</title -->\n        <nuxeo-drive>true</nuxeo-drive>\n      \t<page-provider>default_search</page-provider>\n      </search>\n  </extension>\n\n  <!-- default listing page provider -->\n  <!-- \n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n  \t<coreQueryPageProvider name=\"sfdc_linked_docs\">\n  \t  <pattern>\n      \tSELECT * FROM Document WHERE ecm:mixinType != 'HiddenInNavigation'\n          AND ecm:isVersion = 0\n          AND ecm:isTrashed = 0\n          AND dc:source = ? \n      </pattern>\n      <quickFilters>\n        <quickFilter name=\"noFolder\">\n          <clause>ecm:mixinType != 'Folderish'</clause>\n        </quickFilter>\n      </quickFilters>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>  \t\n  </extension>\n-->\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n  \t<coreQueryPageProvider name=\"sfdc_load_library\">\n      <searchDocumentType>SalesforceSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n      \t  ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isTrashed = 0\n      \t</fixedPart>\n        <predicate parameter=\"sf:objectId\" operator=\"=\">\n          <field schema=\"salesforce_search\" name=\"recordId\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"dc:created\" ascending=\"false\" />      \n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>  \t\n  \n  \t<coreQueryPageProvider name=\"sfdc_linked_docs\">\n      <searchDocumentType>SalesforceSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n      \t  ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isTrashed = 0 AND dc:source LIKE :recordId\n      \t</fixedPart>\n        <predicate parameter=\"ecm:fulltext\" operator=\"FULLTEXT\">\n          <field schema=\"salesforce_search\" name=\"ecm_fulltext\" />\n        </predicate>\n      </whereClause>\n      <quickFilters>\n        <quickFilter name=\"noFolder\">\n          <clause>ecm:mixinType != 'Folderish'</clause>\n        </quickFilter>\n      </quickFilters>\n      <!--  sort column=\"dc:modified\" ascending=\"false\" / -->\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>  \t\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n             point=\"contextHelpers\">\n    <contextHelper id=\"Salesforce\" class=\"org.nuxeo.salesforce.SalesforceFunctions\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/SalesforceComponent.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.salesforce.jwt.JWTExchangeComponent",
          "declaredStartOrder": null,
          "documentation": "\n  A service to store public and private RSA keys in a directory \n  \n",
          "documentationHtml": "<p>\nA service to store public and private RSA keys in a directory\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.salesforce.jwt.JWTExchangeComponent",
              "descriptors": [
                "org.nuxeo.salesforce.jwt.SubjectMappingDescriptor"
              ],
              "documentation": "\n    Customize the way JWT subjects are mapped to Nuxeo users. \n    A different mapping can be defined for each issuer.\n    \n",
              "documentationHtml": "<p>\nCustomize the way JWT subjects are mapped to Nuxeo users.\nA different mapping can be defined for each issuer.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/ExtensionPoints/org.nuxeo.salesforce.jwt.JWTExchangeComponent--subject-mapping",
              "id": "org.nuxeo.salesforce.jwt.JWTExchangeComponent--subject-mapping",
              "label": "subject-mapping (org.nuxeo.salesforce.jwt.JWTExchangeComponent)",
              "name": "subject-mapping",
              "version": "2023.0.2"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/Contributions/org.nuxeo.salesforce.jwt.JWTExchangeComponent--schema",
              "id": "org.nuxeo.salesforce.jwt.JWTExchangeComponent--schema",
              "registrationOrder": 50,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"jwt_keystore\" src=\"schema/jwt_keystore.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/Contributions/org.nuxeo.salesforce.jwt.JWTExchangeComponent--directories",
              "id": "org.nuxeo.salesforce.jwt.JWTExchangeComponent--directories",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n    <directory extends=\"template-directory\" name=\"jwt_keystore\">\n      <schema>jwt_keystore</schema>\n      <idField>id</idField>\n      <autoincrementIdField>true</autoincrementIdField>\n      <types>\n        <type>system</type>\n      </types>\n      <permissions>\n        <permission name=\"Read\">\n          <group>__Nobody__</group>\n        </permission>\n      </permissions>\n    </directory>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/Contributions/org.nuxeo.salesforce.jwt.JWTExchangeComponent--marshallers",
              "id": "org.nuxeo.salesforce.jwt.JWTExchangeComponent--marshallers",
              "registrationOrder": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.salesforce.jwt.keystore.JWTKeyWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.salesforce.jwt.keystore.JWTKeyListWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent",
          "name": "org.nuxeo.salesforce.jwt.JWTExchangeComponent",
          "requirements": [],
          "resolutionOrder": 841,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.salesforce.jwt.JWTExchangeComponent",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/Services/org.nuxeo.salesforce.jwt.JWTUserResolver",
              "id": "org.nuxeo.salesforce.jwt.JWTUserResolver",
              "overriden": false,
              "version": "2023.0.2"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.salesforce.jwt.JWTExchangeComponent",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/Services/org.nuxeo.salesforce.jwt.keystore.JWTKeyStore",
              "id": "org.nuxeo.salesforce.jwt.keystore.JWTKeyStore",
              "overriden": false,
              "version": "2023.0.2"
            }
          ],
          "startOrder": 930,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.salesforce.jwt.JWTExchangeComponent\">\n\n  <documentation>\n  A service to store public and private RSA keys in a directory \n  </documentation>\n\n  <implementation class=\"org.nuxeo.salesforce.jwt.JWTExchangeComponent\"/>\n\n  <service>\n\t  <provide interface=\"org.nuxeo.salesforce.jwt.JWTUserResolver\" />  \n\t  <provide interface=\"org.nuxeo.salesforce.jwt.keystore.JWTKeyStore\" />\t  \n  </service>\n\n  <extension-point name=\"subject-mapping\">\n    <documentation>\n    Customize the way JWT subjects are mapped to Nuxeo users. \n    A different mapping can be defined for each issuer.\n    </documentation>\n    <object class=\"org.nuxeo.salesforce.jwt.SubjectMappingDescriptor\"/>\n  </extension-point>\n<!-- \n  Example: \n  <extension target=\"org.nuxeo.salesforce.jwt.JWTExchangeComponent\" point=\"subject-mapping\">\n    <subject-mapping issuer=\"sfdc\" default=\"test\" />\n  </extension>\n-->\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"jwt_keystore\" src=\"schema/jwt_keystore.xsd\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n    <directory name=\"jwt_keystore\" extends=\"template-directory\">\n      <schema>jwt_keystore</schema>\n      <idField>id</idField>\n      <autoincrementIdField>true</autoincrementIdField>\n      <types>\n        <type>system</type>\n      </types>\n      <permissions>\n        <permission name=\"Read\">\n          <group>__Nobody__</group>\n        </permission>\n      </permissions>\n    </directory>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.salesforce.jwt.keystore.JWTKeyWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.salesforce.jwt.keystore.JWTKeyListWriter\" enable=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/JWTKeyStoreComponent.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-salesforce-core-2023.0.2.jar",
      "groupId": "org.nuxeo.salesforce",
      "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core",
      "id": "org.nuxeo.salesforce.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.7\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.qualifier\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo Salesforce Core\r\nBundle-RequiredExecutionEnvironment: JavaSE-17\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.salesforce.core\r\nNuxeo-WebModule: org.nuxeo.salesforce.web.WebApp;headless=true;name=sale\r\n sforce;package=org/nuxeo/salesforce/web\r\nNuxeo-Component: OSGI-INF/automation-contrib.xml,OSGI-INF/schema-contrib\r\n .xml,OSGI-INF/cors-config.xml,OSGI-INF/auth-contrib.xml,OSGI-INF/busine\r\n ss-metadata.xml,OSGI-INF/SalesforceComponent.xml,OSGI-INF/JWTKeyStoreCo\r\n mponent.xml\r\n\r\n",
      "maxResolutionOrder": 841,
      "minResolutionOrder": 835,
      "packages": [
        "nuxeo-salesforce"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://qa.nuxeo.org/jenkins/buildStatus/icon?job=addons_nuxeo-salesforce-master)](https://qa.nuxeo.org/jenkins/job/addons_nuxeo-salesforce-master/)\n\n# Nuxeo Salesforce\n\nThis project provide an integration of Nuxeo inside Salesforce pages. The project is made of two modules: the Nuxeo plugin bundle `nuxeo-salesforce-core` and the LWC salesforce application `nuxeo-sfdc`.   \n\nHere, you can find more details about the **[Nuxeo LWC Application](nuxeo-sfdc/README.md)**.\n\n##License\n\n(C) Copyright 2015 Nuxeo SA (http://nuxeo.com/). This is unpublished proprietary source code of Nuxeo SA. All rights reserved. Notice of copyright on this source code does not indicate publication.\n    \n",
        "digest": "2692aa0dfa96d6bcea7bbe188193c6ed",
        "encoding": "UTF-8",
        "length": 702,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.0.2"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-routing-rest-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.restapi.server.routing"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.routing",
        "id": "grp:org.nuxeo.ecm.routing",
        "name": "org.nuxeo.ecm.routing",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.restapi.server.routing",
      "components": [],
      "fileName": "nuxeo-routing-rest-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.routing",
      "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.restapi.server.routing",
      "id": "org.nuxeo.ecm.platform.restapi.server.routing",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: nuxeo-routing-rest-api\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.restapi.server.routing;singl\r\n eton:=true\r\nFragment-Host: org.nuxeo.ecm.platform.restapi.server\r\nBundle-Vendor: Nuxeo\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-rest-api-io",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.restapi.io",
          "org.nuxeo.ecm.platform.restapi.server",
          "org.nuxeo.ecm.platform.restapi.server.login.tokenauth",
          "org.nuxeo.ecm.platform.restapi.server.search"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi",
        "id": "grp:org.nuxeo.ecm.platform.restapi",
        "name": "org.nuxeo.ecm.platform.restapi",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.restapi.io",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.io/org.nuxeo.ecm.platform.restapi.io.marshallers/Contributions/org.nuxeo.ecm.platform.restapi.io.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.restapi.io.marshallers--marshallers",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.capabilities.CapabilitiesJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.BinaryManagerStatusJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ConfigurationPropertiesJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.MigrationJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.MigrationListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ProbeInfoJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ProbeInfoListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ProbeStatusJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ScheduleJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ScheduleListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.SimplifiedServerInfoJsonWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.io/org.nuxeo.ecm.platform.restapi.io.marshallers",
          "name": "org.nuxeo.ecm.platform.restapi.io.marshallers",
          "requirements": [],
          "resolutionOrder": 719,
          "services": [],
          "startOrder": 440,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.restapi.io.marshallers\">\n\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.capabilities.CapabilitiesJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.BinaryManagerStatusJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ConfigurationPropertiesJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.MigrationJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.MigrationListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ProbeInfoJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ProbeInfoListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ProbeStatusJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ScheduleJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.ScheduleListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.jaxrs.io.management.SimplifiedServerInfoJsonWriter\" enable=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-rest-api-io-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.io",
      "id": "org.nuxeo.ecm.platform.restapi.io",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: nuxeo-restapi-io\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.restapi.io;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/marshallers-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 719,
      "minResolutionOrder": 719,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-theme-migration",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.theme.migration",
          "org.nuxeo.theme.styling"
        ],
        "hierarchyPath": "/grp:org.nuxeo.theme",
        "id": "grp:org.nuxeo.theme",
        "name": "org.nuxeo.theme",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.theme.migration",
      "components": [
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.theme.jsf",
            "org.nuxeo.theme.nuxeo.default",
            "org.nuxeo.theme.core",
            "org.nuxeo.theme.fragments",
            "org.nuxeo.theme.html"
          ],
          "componentClass": "org.nuxeo.theme.migration.service.ThemeMigrationService",
          "declaredStartOrder": null,
          "documentation": "Compat registration of theme service\n",
          "documentationHtml": "<p>\nCompat registration of theme service</p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--registries",
                "org.nuxeo.theme.nuxeo.default--registries",
                "org.nuxeo.theme.core--registries",
                "org.nuxeo.theme.fragments--registries",
                "org.nuxeo.theme.html--registries"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.RegistryType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--registries",
              "id": "org.nuxeo.theme.services.ThemeService--registries",
              "label": "registries (org.nuxeo.theme.services.ThemeService)",
              "name": "registries",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--elements",
                "org.nuxeo.theme.nuxeo.default--elements",
                "org.nuxeo.theme.core--elements",
                "org.nuxeo.theme.fragments--elements",
                "org.nuxeo.theme.html--elements"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.ElementType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--elements",
              "id": "org.nuxeo.theme.services.ThemeService--elements",
              "label": "elements (org.nuxeo.theme.services.ThemeService)",
              "name": "elements",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--fragments",
                "org.nuxeo.theme.nuxeo.default--fragments",
                "org.nuxeo.theme.core--fragments",
                "org.nuxeo.theme.fragments--fragments",
                "org.nuxeo.theme.html--fragments"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.FragmentType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--fragments",
              "id": "org.nuxeo.theme.services.ThemeService--fragments",
              "label": "fragments (org.nuxeo.theme.services.ThemeService)",
              "name": "fragments",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--models",
                "org.nuxeo.theme.nuxeo.default--models",
                "org.nuxeo.theme.core--models",
                "org.nuxeo.theme.fragments--models",
                "org.nuxeo.theme.html--models"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.ModelType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--models",
              "id": "org.nuxeo.theme.services.ThemeService--models",
              "label": "models (org.nuxeo.theme.services.ThemeService)",
              "name": "models",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--formats",
                "org.nuxeo.theme.nuxeo.default--formats",
                "org.nuxeo.theme.core--formats",
                "org.nuxeo.theme.fragments--formats",
                "org.nuxeo.theme.html--formats"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.FormatType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--formats",
              "id": "org.nuxeo.theme.services.ThemeService--formats",
              "label": "formats (org.nuxeo.theme.services.ThemeService)",
              "name": "formats",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--format-filters",
                "org.nuxeo.theme.nuxeo.default--format-filters",
                "org.nuxeo.theme.core--format-filters",
                "org.nuxeo.theme.fragments--format-filters",
                "org.nuxeo.theme.html--format-filters"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.FormatFilterType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--format-filters",
              "id": "org.nuxeo.theme.services.ThemeService--format-filters",
              "label": "format-filters (org.nuxeo.theme.services.ThemeService)",
              "name": "format-filters",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--standalone-filters",
                "org.nuxeo.theme.nuxeo.default--standalone-filters",
                "org.nuxeo.theme.core--standalone-filters",
                "org.nuxeo.theme.fragments--standalone-filters",
                "org.nuxeo.theme.html--standalone-filters"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.StandaloneFilterType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--standalone-filters",
              "id": "org.nuxeo.theme.services.ThemeService--standalone-filters",
              "label": "standalone-filters (org.nuxeo.theme.services.ThemeService)",
              "name": "standalone-filters",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--resources",
                "org.nuxeo.theme.nuxeo.default--resources",
                "org.nuxeo.theme.core--resources",
                "org.nuxeo.theme.fragments--resources",
                "org.nuxeo.theme.html--resources"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.ecm.web.resources.core.ResourceDescriptor",
                "org.nuxeo.theme.migration.service.descriptors.BankImport"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--resources",
              "id": "org.nuxeo.theme.services.ThemeService--resources",
              "label": "resources (org.nuxeo.theme.services.ThemeService)",
              "name": "resources",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--views",
                "org.nuxeo.theme.nuxeo.default--views",
                "org.nuxeo.theme.core--views",
                "org.nuxeo.theme.fragments--views",
                "org.nuxeo.theme.html--views"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.ViewType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--views",
              "id": "org.nuxeo.theme.services.ThemeService--views",
              "label": "views (org.nuxeo.theme.services.ThemeService)",
              "name": "views",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--engines",
                "org.nuxeo.theme.nuxeo.default--engines",
                "org.nuxeo.theme.core--engines",
                "org.nuxeo.theme.fragments--engines",
                "org.nuxeo.theme.html--engines"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.EngineType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--engines",
              "id": "org.nuxeo.theme.services.ThemeService--engines",
              "label": "engines (org.nuxeo.theme.services.ThemeService)",
              "name": "engines",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--template-engines",
                "org.nuxeo.theme.nuxeo.default--template-engines",
                "org.nuxeo.theme.core--template-engines",
                "org.nuxeo.theme.fragments--template-engines",
                "org.nuxeo.theme.html--template-engines"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.TemplateEngineType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--template-engines",
              "id": "org.nuxeo.theme.services.ThemeService--template-engines",
              "label": "template-engines (org.nuxeo.theme.services.ThemeService)",
              "name": "template-engines",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--negotiations",
                "org.nuxeo.theme.nuxeo.default--negotiations",
                "org.nuxeo.theme.core--negotiations",
                "org.nuxeo.theme.fragments--negotiations",
                "org.nuxeo.theme.html--negotiations"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.NegotiationType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--negotiations",
              "id": "org.nuxeo.theme.services.ThemeService--negotiations",
              "label": "negotiations (org.nuxeo.theme.services.ThemeService)",
              "name": "negotiations",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--themes",
                "org.nuxeo.theme.nuxeo.default--themes",
                "org.nuxeo.theme.core--themes",
                "org.nuxeo.theme.fragments--themes",
                "org.nuxeo.theme.html--themes"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.ThemeDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--themes",
              "id": "org.nuxeo.theme.services.ThemeService--themes",
              "label": "themes (org.nuxeo.theme.services.ThemeService)",
              "name": "themes",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--themesets",
                "org.nuxeo.theme.nuxeo.default--themesets",
                "org.nuxeo.theme.core--themesets",
                "org.nuxeo.theme.fragments--themesets",
                "org.nuxeo.theme.html--themesets"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.ThemeSet"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--themesets",
              "id": "org.nuxeo.theme.services.ThemeService--themesets",
              "label": "themesets (org.nuxeo.theme.services.ThemeService)",
              "name": "themesets",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--perspectives",
                "org.nuxeo.theme.nuxeo.default--perspectives",
                "org.nuxeo.theme.core--perspectives",
                "org.nuxeo.theme.fragments--perspectives",
                "org.nuxeo.theme.html--perspectives"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.PerspectiveType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--perspectives",
              "id": "org.nuxeo.theme.services.ThemeService--perspectives",
              "label": "perspectives (org.nuxeo.theme.services.ThemeService)",
              "name": "perspectives",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--applications",
                "org.nuxeo.theme.nuxeo.default--applications",
                "org.nuxeo.theme.core--applications",
                "org.nuxeo.theme.fragments--applications",
                "org.nuxeo.theme.html--applications"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.ApplicationType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--applications",
              "id": "org.nuxeo.theme.services.ThemeService--applications",
              "label": "applications (org.nuxeo.theme.services.ThemeService)",
              "name": "applications",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--shortcuts",
                "org.nuxeo.theme.nuxeo.default--shortcuts",
                "org.nuxeo.theme.core--shortcuts",
                "org.nuxeo.theme.fragments--shortcuts",
                "org.nuxeo.theme.html--shortcuts"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.ShortcutType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--shortcuts",
              "id": "org.nuxeo.theme.services.ThemeService--shortcuts",
              "label": "shortcuts (org.nuxeo.theme.services.ThemeService)",
              "name": "shortcuts",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--presets",
                "org.nuxeo.theme.nuxeo.default--presets",
                "org.nuxeo.theme.core--presets",
                "org.nuxeo.theme.fragments--presets",
                "org.nuxeo.theme.html--presets"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.PaletteType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--presets",
              "id": "org.nuxeo.theme.services.ThemeService--presets",
              "label": "presets (org.nuxeo.theme.services.ThemeService)",
              "name": "presets",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--vocabularies",
                "org.nuxeo.theme.nuxeo.default--vocabularies",
                "org.nuxeo.theme.core--vocabularies",
                "org.nuxeo.theme.fragments--vocabularies",
                "org.nuxeo.theme.html--vocabularies"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.VocabularyType"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--vocabularies",
              "id": "org.nuxeo.theme.services.ThemeService--vocabularies",
              "label": "vocabularies (org.nuxeo.theme.services.ThemeService)",
              "name": "vocabularies",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.theme.jsf--banks",
                "org.nuxeo.theme.nuxeo.default--banks",
                "org.nuxeo.theme.core--banks",
                "org.nuxeo.theme.fragments--banks",
                "org.nuxeo.theme.html--banks"
              ],
              "componentId": "org.nuxeo.theme.services.ThemeService",
              "descriptors": [
                "org.nuxeo.theme.migration.service.descriptors.ResourceBank"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/ExtensionPoints/org.nuxeo.theme.services.ThemeService--banks",
              "id": "org.nuxeo.theme.services.ThemeService--banks",
              "label": "banks (org.nuxeo.theme.services.ThemeService)",
              "name": "banks",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.theme.styling.service--negotiations",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService/Contributions/org.nuxeo.theme.services.ThemeService--negotiations",
              "id": "org.nuxeo.theme.services.ThemeService--negotiations",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.theme.styling.service",
                "name": "org.nuxeo.theme.styling.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"negotiations\" target=\"org.nuxeo.theme.styling.service\">\n    <negotiation target=\"jsfThemeCompatTemplate\">\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPage\" order=\"100\">\n        <property name=\"jsfThemeCompatTemplate\">/pages/workspace_page.xhtml</property>\n      </negotiator>\n    </negotiation>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration/org.nuxeo.theme.services.ThemeService",
          "name": "org.nuxeo.theme.services.ThemeService",
          "requirements": [
            "org.nuxeo.ecm.platform.WebResources",
            "org.nuxeo.theme.nuxeo.webapp"
          ],
          "resolutionOrder": 919,
          "services": [],
          "startOrder": 933,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.theme.services.ThemeService\">\n  <documentation>Compat registration of theme service</documentation>\n\n  <require>org.nuxeo.ecm.platform.WebResources</require>\n  <require>org.nuxeo.theme.nuxeo.webapp</require>\n\n  <!-- compat aliases for old components that might still be required -->\n  <alias>org.nuxeo.theme.core</alias>\n  <alias>org.nuxeo.theme.fragments</alias>\n  <alias>org.nuxeo.theme.html</alias>\n  <alias>org.nuxeo.theme.jsf</alias>\n  <alias>org.nuxeo.theme.nuxeo.default</alias>\n\n  <implementation class=\"org.nuxeo.theme.migration.service.ThemeMigrationService\" />\n\n  <extension-point name=\"registries\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.RegistryType\" />\n  </extension-point>\n\n  <extension-point name=\"elements\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.ElementType\" />\n  </extension-point>\n\n  <extension-point name=\"fragments\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.FragmentType\" />\n  </extension-point>\n\n  <extension-point name=\"models\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.ModelType\" />\n  </extension-point>\n\n  <extension-point name=\"formats\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.FormatType\" />\n  </extension-point>\n\n  <extension-point name=\"format-filters\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.FormatFilterType\" />\n  </extension-point>\n\n  <extension-point name=\"standalone-filters\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.StandaloneFilterType\" />\n  </extension-point>\n\n  <extension-point name=\"resources\">\n    <object class=\"org.nuxeo.ecm.web.resources.core.ResourceDescriptor\" />\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.BankImport\" />\n  </extension-point>\n\n  <extension-point name=\"views\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.ViewType\" />\n  </extension-point>\n\n  <extension-point name=\"engines\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.EngineType\" />\n  </extension-point>\n\n  <extension-point name=\"template-engines\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.TemplateEngineType\" />\n  </extension-point>\n\n  <extension-point name=\"negotiations\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.NegotiationType\" />\n  </extension-point>\n\n  <extension-point name=\"themes\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.ThemeDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"themesets\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.ThemeSet\" />\n  </extension-point>\n\n  <extension-point name=\"perspectives\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.PerspectiveType\" />\n  </extension-point>\n\n  <extension-point name=\"applications\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.ApplicationType\" />\n  </extension-point>\n\n  <extension-point name=\"shortcuts\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.ShortcutType\" />\n  </extension-point>\n\n  <extension-point name=\"presets\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.PaletteType\" />\n  </extension-point>\n\n  <extension-point name=\"vocabularies\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.VocabularyType\" />\n  </extension-point>\n\n  <extension-point name=\"banks\">\n    <object class=\"org.nuxeo.theme.migration.service.descriptors.ResourceBank\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.theme.styling.service\" point=\"negotiations\">\n    <negotiation target=\"jsfThemeCompatTemplate\">\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPage\"\n        order=\"100\">\n        <property name=\"jsfThemeCompatTemplate\">/pages/workspace_page.xhtml</property>\n      </negotiator>\n    </negotiation>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/theme-compat-framework.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-theme-migration-2023.7.9.jar",
      "groupId": "org.nuxeo.theme",
      "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.migration",
      "id": "org.nuxeo.theme.migration",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240205-105359\r\nBundle-Name: NXThemes Migration\r\nBundle-SymbolicName: org.nuxeo.theme.migration;singleton:=true\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: web\r\nRequire-Bundle: org.nuxeo.ecm.platform.ui,org.nuxeo.theme.styling\r\nNuxeo-Component: OSGI-INF/theme-compat-framework.xml\r\n\r\n",
      "maxResolutionOrder": 919,
      "minResolutionOrder": 919,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.ui",
        "org.nuxeo.theme.styling"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-admin-center-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.admin.center.analytics.dashboards",
          "org.nuxeo.admin.center.jsf",
          "org.nuxeo.admin.center.monitoring",
          "org.nuxeo.admin.center.oauth.opensocial"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin",
        "id": "grp:org.nuxeo.admin",
        "name": "org.nuxeo.admin",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.admin.center",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center/org.nuxeo.admin.pageproviders/Contributions/org.nuxeo.admin.pageproviders--providers",
              "id": "org.nuxeo.admin.pageproviders--providers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"permissions_purge\">\n      <searchDocumentType>PermissionsSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart statement=\"SELECT ecm:uuid, dc:title, ecm:acl/*1/principal, ecm:acl/*1/creator, ecm:acl/*1/permission, ecm:acl/*1/begin, ecm:acl/*1/end, ecm:acl/*1/status FROM Document\">\n          ecm:mixinType != 'HiddenInNavigation'\n          AND ecm:isVersion = 0\n          AND SORTED_COLUMN IS NOT NULL\n        </fixedPart>\n        <predicate operator=\"IN\" parameter=\"ecm:acl/*1/principal\">\n          <field name=\"ace_username\" schema=\"permissions_search\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"ecm:ancestorId\">\n          <field name=\"ecm_ancestorIds\" schema=\"permissions_search\"/>\n        </predicate>\n      </whereClause>\n      <pageSize>20</pageSize>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n    </genericPageProvider>\n\n    <coreQueryPageProvider name=\"permissions_search_folders\">\n      <pattern escapeParameters=\"true\" quoteParameters=\"false\">\n        SELECT * FROM Document WHERE dc:title LIKE '?%' AND ecm:mixinType = 'Folderish'\n        AND ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND\n        ecm:isTrashed = 0\n      </pattern>\n      <pageSize>10</pageSize>\n    </coreQueryPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\" name=\"EVENTS_VIEW\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate operator=\"BETWEEN\" parameter=\"log.eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.category\">\n          <field name=\"eventCategory\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.principalName\">\n          <field name=\"principalName\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"false\" column=\"log.eventDate\"/>\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\" name=\"PERMISSIONS_SEARCH\">\n      <searchDocumentType>PermissionsSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart escapeParameters=\"false\" quoteParameters=\"false\" statement=\"SELECT ecm:uuid, dc:title, ecm:acl/*1/principal, ecm:acl/*1/creator, ecm:acl/*1/permission,               ecm:acl/*1/begin, ecm:acl/*1/end, ecm:acl/*1/status FROM Document\">\n          ecm:mixinType != 'HiddenInNavigation'\n          AND ecm:isVersion = 0\n          AND SORTED_COLUMN IS NOT NULL\n          ?\n        </fixedPart>\n        <predicate operator=\"IN\" parameter=\"ecm:acl/*1/principal\">\n          <field name=\"ace_username\" schema=\"permissions_search\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"ecm:acl/*1/creator\">\n          <field name=\"ace_creator\" schema=\"permissions_search\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"ecm:acl/*1/permission\">\n          <field name=\"ace_permission\" schema=\"permissions_search\"/>\n        </predicate>\n        <predicate operator=\"&lt;=\" parameter=\"ecm:acl/*1/begin\">\n          <field name=\"ace_begin\" schema=\"permissions_search\"/>\n        </predicate>\n        <predicate operator=\">=\" parameter=\"ecm:acl/*1/end\">\n          <field name=\"ace_end\" schema=\"permissions_search\"/>\n        </predicate>\n        <predicate operator=\"LIKE\" parameter=\"ecm:acl/*1/name\">\n          <field name=\"ace_acl_name\" schema=\"permissions_search\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"ecm:ancestorId\">\n          <field name=\"ecm_ancestorIds\" schema=\"permissions_search\"/>\n        </predicate>\n      </whereClause>\n      <parameter>#{adminPermissionsActions.ACEStatusFixedPart}</parameter>\n      <pageSize>20</pageSize>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n    </genericPageProvider>\n\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center/org.nuxeo.admin.pageproviders",
          "name": "org.nuxeo.admin.pageproviders",
          "requirements": [],
          "resolutionOrder": 29,
          "services": [],
          "startOrder": 37,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.admin.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n             point=\"providers\">\n\n    <genericPageProvider name=\"permissions_purge\"\n                         class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\">\n      <searchDocumentType>PermissionsSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart\n            statement=\"SELECT ecm:uuid, dc:title, ecm:acl/*1/principal, ecm:acl/*1/creator, ecm:acl/*1/permission, ecm:acl/*1/begin, ecm:acl/*1/end, ecm:acl/*1/status FROM Document\">\n          ecm:mixinType != 'HiddenInNavigation'\n          AND ecm:isVersion = 0\n          AND SORTED_COLUMN IS NOT NULL\n        </fixedPart>\n        <predicate parameter=\"ecm:acl/*1/principal\" operator=\"IN\">\n          <field schema=\"permissions_search\" name=\"ace_username\"/>\n        </predicate>\n        <predicate parameter=\"ecm:ancestorId\" operator=\"IN\">\n          <field schema=\"permissions_search\" name=\"ecm_ancestorIds\"/>\n        </predicate>\n      </whereClause>\n      <pageSize>20</pageSize>\n      <sort column=\"dc:title\" ascending=\"true\"/>\n    </genericPageProvider>\n\n    <coreQueryPageProvider name=\"permissions_search_folders\">\n      <pattern quoteParameters=\"false\" escapeParameters=\"true\">\n        SELECT * FROM Document WHERE dc:title LIKE '?%' AND ecm:mixinType = 'Folderish'\n        AND ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND\n        ecm:isTrashed = 0\n      </pattern>\n      <pageSize>10</pageSize>\n    </coreQueryPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\" name=\"EVENTS_VIEW\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate parameter=\"log.eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\"/>\n          <field schema=\"basicauditsearch\" name=\"endDate\"/>\n        </predicate>\n        <predicate parameter=\"log.category\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventCategory\"/>\n        </predicate>\n        <predicate parameter=\"log.eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\"/>\n        </predicate>\n        <predicate parameter=\"log.principalName\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"principalName\"/>\n        </predicate>\n      </whereClause>\n      <sort column=\"log.eventDate\" ascending=\"false\"/>\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.query.nxql.CoreQueryAndFetchPageProvider\"\n                         name=\"PERMISSIONS_SEARCH\">\n      <searchDocumentType>PermissionsSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart quoteParameters=\"false\" escapeParameters=\"false\"\n                   statement=\"SELECT ecm:uuid, dc:title, ecm:acl/*1/principal, ecm:acl/*1/creator, ecm:acl/*1/permission,\n              ecm:acl/*1/begin, ecm:acl/*1/end, ecm:acl/*1/status FROM Document\">\n          ecm:mixinType != 'HiddenInNavigation'\n          AND ecm:isVersion = 0\n          AND SORTED_COLUMN IS NOT NULL\n          ?\n        </fixedPart>\n        <predicate parameter=\"ecm:acl/*1/principal\" operator=\"IN\">\n          <field schema=\"permissions_search\" name=\"ace_username\"/>\n        </predicate>\n        <predicate parameter=\"ecm:acl/*1/creator\" operator=\"IN\">\n          <field schema=\"permissions_search\" name=\"ace_creator\"/>\n        </predicate>\n        <predicate parameter=\"ecm:acl/*1/permission\" operator=\"IN\">\n          <field schema=\"permissions_search\" name=\"ace_permission\"/>\n        </predicate>\n        <predicate parameter=\"ecm:acl/*1/begin\" operator=\"&lt;=\">\n          <field schema=\"permissions_search\" name=\"ace_begin\"/>\n        </predicate>\n        <predicate parameter=\"ecm:acl/*1/end\" operator=\"&gt;=\">\n          <field schema=\"permissions_search\" name=\"ace_end\"/>\n        </predicate>\n        <predicate parameter=\"ecm:acl/*1/name\" operator=\"LIKE\">\n          <field schema=\"permissions_search\" name=\"ace_acl_name\"/>\n        </predicate>\n        <predicate parameter=\"ecm:ancestorId\" operator=\"IN\">\n          <field schema=\"permissions_search\" name=\"ecm_ancestorIds\"/>\n        </predicate>\n      </whereClause>\n      <parameter>#{adminPermissionsActions.ACEStatusFixedPart}</parameter>\n      <pageSize>20</pageSize>\n      <sort column=\"dc:title\" ascending=\"true\"/>\n    </genericPageProvider>\n\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageproviders-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that disables checks on package version when\n      updating the Studio package from the admin tab.\n    \n",
              "documentationHtml": "<p>\nProperty that disables checks on package version when\nupdating the Studio package from the admin tab.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center/org.nuxeo.ecm.platform.admin.properties/Contributions/org.nuxeo.ecm.platform.admin.properties--configuration",
              "id": "org.nuxeo.ecm.platform.admin.properties--configuration",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that disables checks on package version when\n      updating the Studio package from the admin tab.\n    </documentation>\n    <property name=\"studio.snapshot.disablePkgValidation\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center/org.nuxeo.ecm.platform.admin.properties",
          "name": "org.nuxeo.ecm.platform.admin.properties",
          "requirements": [],
          "resolutionOrder": 30,
          "services": [],
          "startOrder": 260,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.admin.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that disables checks on package version when\n      updating the Studio package from the admin tab.\n    </documentation>\n    <property name=\"studio.snapshot.disablePkgValidation\">false</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/admin-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center/org.nuxeo.admin.workmanager/Contributions/org.nuxeo.admin.workmanager--queues",
              "id": "org.nuxeo.admin.workmanager--queues",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"permissionsPurge\">\n      <maxThreads>1</maxThreads>\n      <category>permissionsPurge</category>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center/org.nuxeo.admin.workmanager",
          "name": "org.nuxeo.admin.workmanager",
          "requirements": [],
          "resolutionOrder": 31,
          "services": [],
          "startOrder": 39,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.admin.workmanager\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"permissionsPurge\">\n      <maxThreads>1</maxThreads>\n      <category>permissionsPurge</category>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/workmanager-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center/org.nuxeo.platform.admin.operation/Contributions/org.nuxeo.platform.admin.operation--operations",
              "id": "org.nuxeo.platform.admin.operation--operations",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.admin.operation.HotReloadStudioSnapshot\"/>\n    <operation class=\"org.nuxeo.ecm.admin.operation.PermissionsPurge\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center/org.nuxeo.platform.admin.operation",
          "name": "org.nuxeo.platform.admin.operation",
          "requirements": [],
          "resolutionOrder": 32,
          "services": [],
          "startOrder": 700,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.platform.admin.operation\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.ecm.admin.operation.HotReloadStudioSnapshot\" />\n    <operation class=\"org.nuxeo.ecm.admin.operation.PermissionsPurge\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/operation-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center/org.nuxeo.admin.core.types/Contributions/org.nuxeo.admin.core.types--schema",
              "id": "org.nuxeo.admin.core.types--schema",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"permissions_search\" prefix=\"rs\" src=\"schemas/permissions_search.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center/org.nuxeo.admin.core.types/Contributions/org.nuxeo.admin.core.types--doctype",
              "id": "org.nuxeo.admin.core.types--doctype",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"Document\" name=\"PermissionsSearch\">\n      <schema name=\"permissions_search\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center/org.nuxeo.admin.core.types",
          "name": "org.nuxeo.admin.core.types",
          "requirements": [
            "org.nuxeo.ecm.core.schema.TypeService",
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 159,
          "services": [],
          "startOrder": 36,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.admin.core.types\">\n\n  <require>org.nuxeo.ecm.core.schema.TypeService</require>\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"permissions_search\" prefix=\"rs\" src=\"schemas/permissions_search.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <doctype name=\"PermissionsSearch\" extends=\"Document\">\n      <schema name=\"permissions_search\" />\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-types-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-admin-center-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center",
      "id": "org.nuxeo.admin.center",
      "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: 1\r\nBundle-Version: 0.0.1\r\nBundle-Name: Nuxeo Admin Center\r\nBundle-SymbolicName: org.nuxeo.admin.center;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/core-types-contrib.xml,OSGI-INF/pageproviders-\r\n contrib.xml,OSGI-INF/admin-properties.xml,OSGI-INF/workmanager-contrib.\r\n xml,OSGI-INF/operation-contrib.xml\r\nExport-Package: i18n\r\nNuxeo-WebModule: org.nuxeo.ecm.webengine.app.WebEngineModule;headless=tr\r\n ue\r\n\r\n",
      "maxResolutionOrder": 159,
      "minResolutionOrder": 29,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-opencmis-bindings",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.opencmis.bindings",
          "org.nuxeo.ecm.core.opencmis.impl"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis",
        "id": "grp:org.nuxeo.ecm.core.opencmis",
        "name": "org.nuxeo.ecm.core.opencmis",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.opencmis.bindings",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--filterConfig",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings/org.nuxeo.ecm.core.opencmis.atom.config/Contributions/org.nuxeo.ecm.core.opencmis.atom.config--filterConfig",
              "id": "org.nuxeo.ecm.core.opencmis.atom.config--filterConfig",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filterConfig\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n    <filterConfig name=\"cmis-atom\" transactional=\"true\">\n      <pattern>/nuxeo/atom/cmis(/.*)?(\\?.*)?</pattern>\n    </filterConfig>\n    <filterConfig name=\"cmis10-atom\" transactional=\"true\">\n      <pattern>/nuxeo/atom/cmis10(/.*)?(\\?.*)?</pattern>\n    </filterConfig>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--specificChains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings/org.nuxeo.ecm.core.opencmis.atom.config/Contributions/org.nuxeo.ecm.core.opencmis.atom.config--specificChains",
              "id": "org.nuxeo.ecm.core.opencmis.atom.config--specificChains",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"specificChains\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <specificAuthenticationChain name=\"ATOM_CMIS\">\n\n      <urlPatterns>\n        <url>(.*)/atom/cmis(/.*)?</url>\n        <url>(.*)/atom/cmis10(/.*)?</url>\n      </urlPatterns>\n      <replacementChain>\n        <plugin>AUTOMATION_BASIC_AUTH</plugin>\n        <plugin>TOKEN_AUTH</plugin>\n        <plugin>OAUTH2_AUTH</plugin>\n        <plugin>JWT_AUTH</plugin>\n      </replacementChain>\n    </specificAuthenticationChain>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings/org.nuxeo.ecm.core.opencmis.atom.config",
          "name": "org.nuxeo.ecm.core.opencmis.atom.config",
          "requirements": [],
          "resolutionOrder": 244,
          "services": [],
          "startOrder": 144,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.opencmis.atom.config\">\n\n  <!-- the /atom/cmis part is defined in the servlet mapping in deployment-fragment.xml -->\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\"\n    point=\"filterConfig\">\n    <filterConfig name=\"cmis-atom\" transactional=\"true\">\n      <pattern>${org.nuxeo.ecm.contextPath}/atom/cmis(/.*)?(\\?.*)?</pattern>\n    </filterConfig>\n    <filterConfig name=\"cmis10-atom\" transactional=\"true\">\n      <pattern>${org.nuxeo.ecm.contextPath}/atom/cmis10(/.*)?(\\?.*)?</pattern>\n    </filterConfig>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"specificChains\">\n\n    <specificAuthenticationChain name=\"ATOM_CMIS\">\n\n      <urlPatterns>\n        <url>(.*)/atom/cmis(/.*)?</url>\n        <url>(.*)/atom/cmis10(/.*)?</url>\n      </urlPatterns>\n      <replacementChain>\n        <plugin>AUTOMATION_BASIC_AUTH</plugin>\n        <plugin>TOKEN_AUTH</plugin>\n        <plugin>OAUTH2_AUTH</plugin>\n        <plugin>JWT_AUTH</plugin>\n      </replacementChain>\n    </specificAuthenticationChain>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/atom-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--filterConfig",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings/org.nuxeo.ecm.core.opencmis.json.config/Contributions/org.nuxeo.ecm.core.opencmis.json.config--filterConfig",
              "id": "org.nuxeo.ecm.core.opencmis.json.config--filterConfig",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filterConfig\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n    <filterConfig name=\"cmis-json\" transactional=\"true\">\n      <pattern>/nuxeo/json/cmis(/.*)?(\\?.*)?</pattern>\n    </filterConfig>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--specificChains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings/org.nuxeo.ecm.core.opencmis.json.config/Contributions/org.nuxeo.ecm.core.opencmis.json.config--specificChains",
              "id": "org.nuxeo.ecm.core.opencmis.json.config--specificChains",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"specificChains\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <specificAuthenticationChain name=\"JSON_CMIS\">\n      <urlPatterns>\n        <url>(.*)/json/cmis(/.*)?</url>\n      </urlPatterns>\n      <replacementChain>\n        <plugin>AUTOMATION_BASIC_AUTH</plugin>\n        <plugin>TOKEN_AUTH</plugin>\n        <plugin>OAUTH2_AUTH</plugin>\n        <plugin>JWT_AUTH</plugin>\n      </replacementChain>\n    </specificAuthenticationChain>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings/org.nuxeo.ecm.core.opencmis.json.config",
          "name": "org.nuxeo.ecm.core.opencmis.json.config",
          "requirements": [],
          "resolutionOrder": 245,
          "services": [],
          "startOrder": 149,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.opencmis.json.config\">\n\n  <!-- the /json/cmis part is defined in the servlet mapping in deployment-fragment.xml -->\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\"\n    point=\"filterConfig\">\n    <filterConfig name=\"cmis-json\" transactional=\"true\">\n      <pattern>${org.nuxeo.ecm.contextPath}/json/cmis(/.*)?(\\?.*)?</pattern>\n    </filterConfig>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"specificChains\">\n\n    <specificAuthenticationChain name=\"JSON_CMIS\">\n      <urlPatterns>\n        <url>(.*)/json/cmis(/.*)?</url>\n      </urlPatterns>\n      <replacementChain>\n        <plugin>AUTOMATION_BASIC_AUTH</plugin>\n        <plugin>TOKEN_AUTH</plugin>\n        <plugin>OAUTH2_AUTH</plugin>\n        <plugin>JWT_AUTH</plugin>\n      </replacementChain>\n    </specificAuthenticationChain>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/json-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager",
          "declaredStartOrder": null,
          "documentation": "\n    The nuxeo CMIS service factory manages the NuxeoCmisServiceFactory\n    class and parameters to be extended.\n\n    <code>\n    <extension point=\"factory\" target=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager\">\n        <factory class=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactory\">\n            <parameter name=\"servicewrapper.1\">com.example.my.SimpleWrapper\n          </parameter>\n            <parameter name=\"servicewrapper.2\">com.example.my.AdvancedWrapper,1,cmis:documents\n          </parameter>\n            <parameter name=\"servicewrapper.3\">com.example.my.DebuggingWrapper,testRepositoryId\n          </parameter>\n            <parameter name=\"service.tempDirectory\">/tmp</parameter>\n            <parameter name=\"service.encryptTempFiles\">false</parameter>\n            <parameter name=\"service.memoryThreshold\">4194304</parameter>\n            <parameter name=\"service.maxContentSize\">4294967296</parameter>\n            <parameter name=\"service.defaultTypesMaxItems\">100</parameter>\n            <parameter name=\"service.defaultTypesDepth\">-1</parameter>\n            <parameter name=\"service.defaultMaxItems\">100</parameter>\n            <parameter name=\"service.defaultDepth\">2</parameter>\n        </factory>\n    </extension>\n</code>\n",
          "documentationHtml": "<p>\nThe nuxeo CMIS service factory manages the NuxeoCmisServiceFactory\nclass and parameters to be extended.\n</p><p>\n</p><pre><code>    &lt;extension point&#61;&#34;factory&#34; target&#61;&#34;org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager&#34;&gt;\n        &lt;factory class&#61;&#34;org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactory&#34;&gt;\n            &lt;parameter name&#61;&#34;servicewrapper.1&#34;&gt;com.example.my.SimpleWrapper\n          &lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;servicewrapper.2&#34;&gt;com.example.my.AdvancedWrapper,1,cmis:documents\n          &lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;servicewrapper.3&#34;&gt;com.example.my.DebuggingWrapper,testRepositoryId\n          &lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;service.tempDirectory&#34;&gt;/tmp&lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;service.encryptTempFiles&#34;&gt;false&lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;service.memoryThreshold&#34;&gt;4194304&lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;service.maxContentSize&#34;&gt;4294967296&lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;service.defaultTypesMaxItems&#34;&gt;100&lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;service.defaultTypesDepth&#34;&gt;-1&lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;service.defaultMaxItems&#34;&gt;100&lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;service.defaultDepth&#34;&gt;2&lt;/parameter&gt;\n        &lt;/factory&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager",
              "descriptors": [
                "org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryDescriptor"
              ],
              "documentation": "\n      This service provides an extension point to override\n      the NuxeoCmisServiceFactory\n      class and parameters.\n    \n",
              "documentationHtml": "<p>\nThis service provides an extension point to override\nthe NuxeoCmisServiceFactory\nclass and parameters.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings/org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager/ExtensionPoints/org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager--factory",
              "id": "org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager--factory",
              "label": "factory (org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager)",
              "name": "factory",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings/org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager",
          "name": "org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager",
          "requirements": [],
          "resolutionOrder": 246,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings/org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager/Services/org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager",
              "id": "org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 811,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager\"\n  version=\"1.0.0\">\n\n  <documentation>\n    The nuxeo CMIS service factory manages the NuxeoCmisServiceFactory\n    class and parameters to be extended.\n\n    <code>\n      <extension\n        target=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager\"\n        point=\"factory\">\n        <factory\n          class=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactory\">\n          <parameter name=\"servicewrapper.1\">com.example.my.SimpleWrapper\n          </parameter>\n          <parameter name=\"servicewrapper.2\">com.example.my.AdvancedWrapper,1,cmis:documents\n          </parameter>\n          <parameter name=\"servicewrapper.3\">com.example.my.DebuggingWrapper,testRepositoryId\n          </parameter>\n          <parameter name=\"service.tempDirectory\">/tmp</parameter>\n          <parameter name=\"service.encryptTempFiles\">false</parameter>\n          <parameter name=\"service.memoryThreshold\">4194304</parameter>\n          <parameter name=\"service.maxContentSize\">4294967296</parameter>\n          <parameter name=\"service.defaultTypesMaxItems\">100</parameter>\n          <parameter name=\"service.defaultTypesDepth\">-1</parameter>\n          <parameter name=\"service.defaultMaxItems\">100</parameter>\n          <parameter name=\"service.defaultDepth\">2</parameter>\n        </factory>\n      </extension>\n    </code>\n\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager\" />\n  </service>\n\n  <extension-point name=\"factory\">\n    <documentation>\n      This service provides an extension point to override\n      the NuxeoCmisServiceFactory\n      class and parameters.\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/servicefactorymanager-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager--factory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings/org.nuxeo.ecm.core.opencmis.bindings.servicefactorymanager.contrib/Contributions/org.nuxeo.ecm.core.opencmis.bindings.servicefactorymanager.contrib--factory",
              "id": "org.nuxeo.ecm.core.opencmis.bindings.servicefactorymanager.contrib--factory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager",
                "name": "org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"factory\" target=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager\">\n    <factory class=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings/org.nuxeo.ecm.core.opencmis.bindings.servicefactorymanager.contrib",
          "name": "org.nuxeo.ecm.core.opencmis.bindings.servicefactorymanager.contrib",
          "requirements": [],
          "resolutionOrder": 247,
          "services": [],
          "startOrder": 145,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.opencmis.bindings.servicefactorymanager.contrib\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactoryManager\"\n      point=\"factory\">\n    <factory class=\"org.nuxeo.ecm.core.opencmis.bindings.NuxeoCmisServiceFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/servicefactorymanager-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-opencmis-bindings-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.bindings",
      "id": "org.nuxeo.ecm.core.opencmis.bindings",
      "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: 5.4.2.qualifier\r\nBundle-Name: Nuxeo Core OpenCMIS Bindings\r\nBundle-SymbolicName: org.nuxeo.ecm.core.opencmis.bindings;singleton:=tru\r\n e\r\nBundle-Vendor: Nuxeo\r\nExport-Package: org.nuxeo.ecm.core.opencmis.bindings\r\nBundle-ActivationPolicy: lazy\r\nEclipse-ExtensibleAPI: true\r\nNuxeo-Component: OSGI-INF/atom-contrib.xml,OSGI-INF/json-contrib.xml,OSG\r\n I-INF/servicefactorymanager-service.xml,OSGI-INF/servicefactorymanager-\r\n contrib.xml\r\nImport-Package: com.sun.xml.ws.api.handler;resolution:=optional,javax.se\r\n rvlet,javax.servlet.http,org.apache.chemistry.opencmis.commons.impl.ser\r\n ver,org.apache.chemistry.opencmis.commons.server,org.apache.chemistry.o\r\n pencmis.server.impl,org.apache.chemistry.opencmis.server.impl.atompub,o\r\n rg.apache.chemistry.opencmis.server.shared,org.apache.chemistry.opencmi\r\n s.server.support,org.apache.commons.logging,org.nuxeo.ecm.core.opencmis\r\n .impl.server,org.nuxeo.runtime.api,org.nuxeo.runtime.api.login\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Activator: org.nuxeo.ecm.core.opencmis.bindings.Activator\r\n\r\n",
      "maxResolutionOrder": 247,
      "minResolutionOrder": 244,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-storage-dbs",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.storage",
          "org.nuxeo.ecm.core.storage.dbs",
          "org.nuxeo.ecm.core.storage.mem",
          "org.nuxeo.ecm.core.storage.mongodb",
          "org.nuxeo.ecm.core.storage.sql",
          "org.nuxeo.ecm.core.storage.sql.management"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage",
        "id": "grp:org.nuxeo.ecm.core.storage",
        "name": "org.nuxeo.ecm.core.storage",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.storage.dbs",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.migration.MigrationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.dbs/org.nuxeo.ecm.core.storage.dbs.migrator/Contributions/org.nuxeo.ecm.core.storage.dbs.migrator--configuration",
              "id": "org.nuxeo.ecm.core.storage.dbs.migrator--configuration",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.migration.MigrationService",
                "name": "org.nuxeo.runtime.migration.MigrationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.migration.MigrationService\">\n\n    <migration id=\"blob-keys-migration\">\n      <description label=\"migration.dbs.blob.keys\">Populate ecm:blobKeys property</description>\n      <class>org.nuxeo.ecm.core.storage.dbs.BlobKeysBulkMigrator</class>\n      <defaultState>unsupported</defaultState>\n      <state id=\"unsupported\">\n      </state>\n      <state id=\"empty\">\n        <description label=\"migration.dbs.blob.keys.empty\">ecm:blobKeys is not populated</description>\n      </state>\n      <state id=\"populated\">\n        <description label=\"migration.dbs.blob.keys.populated\">ecm:blobKeys is populated</description>\n      </state>\n\n      <step fromState=\"empty\" id=\"empty-to-populated\" toState=\"populated\">\n        <description label=\"migration.dbs.blob.keys.empty-to-populated\">Populate ecm:blobKeys property</description>\n      </step>\n    </migration>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.dbs/org.nuxeo.ecm.core.storage.dbs.migrator",
          "name": "org.nuxeo.ecm.core.storage.dbs.migrator",
          "requirements": [],
          "resolutionOrder": 161,
          "services": [],
          "startOrder": 164,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.dbs.migrator\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.runtime.migration.MigrationService\" point=\"configuration\">\n\n    <migration id=\"blob-keys-migration\">\n      <description label=\"migration.dbs.blob.keys\">Populate ecm:blobKeys property</description>\n      <class>org.nuxeo.ecm.core.storage.dbs.BlobKeysBulkMigrator</class>\n      <defaultState>unsupported</defaultState>\n      <state id=\"unsupported\">\n      </state>\n      <state id=\"empty\">\n        <description label=\"migration.dbs.blob.keys.empty\">ecm:blobKeys is not populated</description>\n      </state>\n      <state id=\"populated\">\n        <description label=\"migration.dbs.blob.keys.populated\">ecm:blobKeys is populated</description>\n      </state>\n\n      <step id=\"empty-to-populated\" fromState=\"empty\" toState=\"populated\">\n        <description label=\"migration.dbs.blob.keys.empty-to-populated\">Populate ecm:blobKeys property</description>\n      </step>\n    </migration>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/dbs-blob-keys-migration.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService",
          "declaredStartOrder": null,
          "documentation": "\n    Manages DBS repositories.\n  \n",
          "documentationHtml": "<p>\nManages DBS repositories.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.dbs/org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService",
          "name": "org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService",
          "requirements": [
            "org.nuxeo.ecm.core.repository.RepositoryServiceComponent"
          ],
          "resolutionOrder": 781,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.dbs/org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService/Services/org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService",
              "id": "org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 818,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.repository.RepositoryServiceComponent</require>\n\n  <documentation>\n    Manages DBS repositories.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/dbs-repository-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.dbs/org.nuxeo.ecm.core.storage.dbs.bulk.config/Contributions/org.nuxeo.ecm.core.storage.dbs.bulk.config--actions",
              "id": "org.nuxeo.ecm.core.storage.dbs.bulk.config--actions",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <!-- Internal -->\n    <action batchSize=\"25\" bucketSize=\"100\" inputStream=\"bulk/updateReadAcls\" name=\"updateReadAcls\" sequentialScroll=\"true\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.dbs/org.nuxeo.ecm.core.storage.dbs.bulk.config/Contributions/org.nuxeo.ecm.core.storage.dbs.bulk.config--streamProcessor",
              "id": "org.nuxeo.ecm.core.storage.dbs.bulk.config--streamProcessor",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <!-- Update Read ACLs processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.storage.dbs.action.UpdateReadAclsAction\" defaultConcurrency=\"1\" defaultPartitions=\"1\" name=\"updateReadAcls\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.dbs/org.nuxeo.ecm.core.storage.dbs.bulk.config",
          "name": "org.nuxeo.ecm.core.storage.dbs.bulk.config",
          "requirements": [
            "org.nuxeo.runtime.stream.service"
          ],
          "resolutionOrder": 830,
          "services": [],
          "startOrder": 163,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.dbs.bulk.config\" version=\"1.0.0\">\n\n  <require>org.nuxeo.runtime.stream.service</require>\n\n  <!-- ======================================================================================= -->\n  <!-- Actions configuration -->\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <!-- Internal -->\n    <action name=\"updateReadAcls\" inputStream=\"bulk/updateReadAcls\" bucketSize=\"100\" batchSize=\"25\" sequentialScroll=\"true\" />\n  </extension>\n\n  <!-- Action's processor -->\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <!-- Update Read ACLs processor -->\n    <streamProcessor name=\"updateReadAcls\" class=\"org.nuxeo.ecm.core.storage.dbs.action.UpdateReadAclsAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.updateReadAcls.defaultConcurrency:=1}\"\n      defaultPartitions=\"${nuxeo.bulk.action.updateReadAcls.defaultPartitions:=1}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"false\" />\n    </streamProcessor>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/dbs-bulk-config.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-storage-dbs-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.dbs",
      "id": "org.nuxeo.ecm.core.storage.dbs",
      "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: 2023.7.9-t20240130-104752\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage.dbs\r\nNuxeo-Component: OSGI-INF/dbs-repository-service.xml,OSGI-INF/dbs-blob-k\r\n eys-migration.xml,OSGI-INF/dbs-bulk-config.xml\r\n\r\n",
      "maxResolutionOrder": 830,
      "minResolutionOrder": 161,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-audit-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.audit.api",
          "org.nuxeo.ecm.platform.audit.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit",
        "id": "grp:org.nuxeo.ecm.platform.audit",
        "name": "org.nuxeo.ecm.platform.audit",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.audit.api",
      "components": [],
      "fileName": "nuxeo-platform-audit-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.api",
      "id": "org.nuxeo.ecm.platform.audit.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 5.4.2.qualifier\r\nExport-Package: org.nuxeo.ecm.platform.audit.api,org.nuxeo.ecm.platform.\r\n audit.api.delegate,org.nuxeo.ecm.platform.audit.api.job,org.nuxeo.ecm.p\r\n latform.audit.api.query,org.nuxeo.ecm.platform.audit.api.remote\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo Audit API\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.audit.api\r\nImport-Package: org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.\r\n security,org.nuxeo.ecm.core.event,org.nuxeo.runtime.api\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-management-jtajca",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.management",
          "org.nuxeo.ecm.core.management.jtajca"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management",
        "id": "grp:org.nuxeo.ecm.core.management",
        "name": "org.nuxeo.ecm.core.management",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.management.jtajca",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.management.jtajca.internal.DefaultMonitorComponent",
          "declaredStartOrder": 1001,
          "documentation": "\n    Component used to install/uninstall the monitors\n    (transaction and connections).\n  \n",
          "documentationHtml": "<p>\nComponent used to install/uninstall the monitors\n(transaction and connections).\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.jtajca/org.nuxeo.ecm.core.management.jtajca.component",
          "name": "org.nuxeo.ecm.core.management.jtajca.component",
          "requirements": [
            "org.nuxeo.runtime.management.ServerLocator",
            "org.nuxeo.runtime.metrics.MetricsService"
          ],
          "resolutionOrder": 809,
          "services": [],
          "startOrder": 936,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.management.jtajca.component\">\n\n  <require>org.nuxeo.runtime.metrics.MetricsService</require>\n  <require>org.nuxeo.runtime.management.ServerLocator</require>\n\n  <documentation>\n    Component used to install/uninstall the monitors\n    (transaction and connections).\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.core.management.jtajca.internal.DefaultMonitorComponent\" />\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/default-monitor-component.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-management-jtajca-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.management/org.nuxeo.ecm.core.management.jtajca",
      "id": "org.nuxeo.ecm.core.management.jtajca",
      "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: 2023.7.9-t20240130-104814\r\nBundle-SymbolicName: org.nuxeo.ecm.core.management.jtajca\r\nRequire-Bundle: org.nuxeo.ecm.core;visibility:=reexport\r\nNuxeo-Component: OSGI-INF/default-monitor-component.xml\r\n\r\n",
      "maxResolutionOrder": 809,
      "minResolutionOrder": 809,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-notification-web",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.notification",
          "org.nuxeo.ecm.platform.notification.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification",
        "id": "grp:org.nuxeo.ecm.platform.notification",
        "name": "org.nuxeo.ecm.platform.notification",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.notification.web",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    NXNotifications action contributions.\n\n    @version 1.0\n    @author Narcis\n    Paslaru\n  \n",
          "documentationHtml": "<p>\nNXNotifications action contributions.\n</p><p>\n&#64;version 1.0\n</p><p>\nPaslaru\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Contribute a new tab where a user can subscribe to\n      notifications.\n    \n",
              "documentationHtml": "<p>\nContribute a new tab where a user can subscribe to\nnotifications.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.web/org.nuxeo.ecm.platform.notifications.web.actions/Contributions/org.nuxeo.ecm.platform.notifications.web.actions--actions",
              "id": "org.nuxeo.ecm.platform.notifications.web.actions--actions",
              "registrationOrder": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <documentation>\n      Contribute a new tab where a user can subscribe to\n      notifications.\n    </documentation>\n\n    <action enabled=\"false\" icon=\"/icons/file.gif\" id=\"TAB_MY_SUBSCRIPTIONS\" label=\"action.subscriptions.tab\" link=\"/incl/tabs/document_subscriptions.xhtml\" order=\"70\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>general_documents</filter-id>\n      <filter-id>not_anonymous</filter-id>\n      <filter-id>isNotVersion</filter-id>\n    </action>\n\n    <action enabled=\"true\" icon=\"/icons/file.gif\" id=\"TAB_MANAGE_SUBSCRIPTIONS\" label=\"action.groups.subscriptions.tab\" link=\"/incl/tabs/document_group_subscriptions.xhtml\" order=\"80\" type=\"rest_document_link\">\n      <category>TAB_MANAGE_sub_tab</category>\n      <filter-id>general_documents</filter-id>\n      <filter-id>manage_subscriptions</filter-id>\n      <filter-id>isNotVersion</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.web/org.nuxeo.ecm.platform.notifications.web.actions/Contributions/org.nuxeo.ecm.platform.notifications.web.actions--filters",
              "id": "org.nuxeo.ecm.platform.notifications.web.actions--filters",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"general_documents\">\n      <rule grant=\"false\">\n        <type>Root</type>\n        <type>Domain</type>\n        <type>WorkspaceRoot</type>\n        <type>SectionRoot</type>\n      </rule>\n    </filter>\n\n    <filter id=\"manage_subscriptions\">\n      <rule grant=\"true\">\n        <permission>WriteSecurity</permission>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.web/org.nuxeo.ecm.platform.notifications.web.actions",
          "name": "org.nuxeo.ecm.platform.notifications.web.actions",
          "requirements": [
            "org.nuxeo.ecm.platform.actions"
          ],
          "resolutionOrder": 670,
          "services": [],
          "startOrder": 360,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.notifications.web.actions\">\n\n  <documentation>\n    NXNotifications action contributions.\n\n    @version 1.0\n    @author Narcis\n    Paslaru\n  </documentation>\n\n  <require>org.nuxeo.ecm.platform.actions</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <documentation>\n      Contribute a new tab where a user can subscribe to\n      notifications.\n    </documentation>\n\n    <action id=\"TAB_MY_SUBSCRIPTIONS\" link=\"/incl/tabs/document_subscriptions.xhtml\"\n      order=\"70\" enabled=\"false\" label=\"action.subscriptions.tab\" icon=\"/icons/file.gif\"\n      type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>general_documents</filter-id>\n      <filter-id>not_anonymous</filter-id>\n      <filter-id>isNotVersion</filter-id>\n    </action>\n\n    <action id=\"TAB_MANAGE_SUBSCRIPTIONS\" link=\"/incl/tabs/document_group_subscriptions.xhtml\"\n      order=\"80\" enabled=\"true\" label=\"action.groups.subscriptions.tab\" icon=\"/icons/file.gif\"\n      type=\"rest_document_link\">\n      <category>TAB_MANAGE_sub_tab</category>\n      <filter-id>general_documents</filter-id>\n      <filter-id>manage_subscriptions</filter-id>\n      <filter-id>isNotVersion</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"general_documents\">\n      <rule grant=\"false\">\n        <type>Root</type>\n        <type>Domain</type>\n        <type>WorkspaceRoot</type>\n        <type>SectionRoot</type>\n      </rule>\n    </filter>\n\n    <filter id=\"manage_subscriptions\">\n      <rule grant=\"true\">\n        <permission>WriteSecurity</permission>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-notification-web-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.web",
      "id": "org.nuxeo.ecm.platform.notification.web",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240205-105146\r\nBundle-Name: Nuxeo ECM Notification Web Fragment\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.notification.web;singleton:=\r\n true\r\nBundle-Category: stateless\r\nRequire-Bundle: org.nuxeo.ecm.platform.notification.api,org.nuxeo.ecm.we\r\n bapp.core\r\nNuxeo-Component: OSGI-INF/actions-contrib.xml\r\nProvide-Package: org.nuxeo.ecm.webapp.notification\r\n\r\n",
      "maxResolutionOrder": 670,
      "minResolutionOrder": 670,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.notification.api",
        "org.nuxeo.ecm.webapp.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-automation-features",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.automation.core",
          "org.nuxeo.ecm.automation.features",
          "org.nuxeo.ecm.automation.io",
          "org.nuxeo.ecm.automation.jsf",
          "org.nuxeo.ecm.automation.scripting",
          "org.nuxeo.ecm.automation.server"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.automation",
        "id": "grp:org.nuxeo.ecm.automation",
        "name": "org.nuxeo.ecm.automation",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.automation.features",
      "components": [
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.core.automation.featuresContrib"
          ],
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "@author Bogdan Stefanescu (bs@nuxeo.com)\n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.features.operations/Contributions/org.nuxeo.ecm.core.automation.features.operations--operations",
              "id": "org.nuxeo.ecm.core.automation.features.operations--operations",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.query.DocumentPaginatedQuery\">\n      <widgets>\n        <widget name=\"query\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">Query</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">nxql</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>query</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.query.ResultSetPaginatedQuery\">\n      <widgets>\n        <widget name=\"query\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">ResultSet Query</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">nxql</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>query</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.AuditLog\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.AuditQuery\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.AuditPageProviderOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.AuditRestore\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.CreateRelation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.GetRelations\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.DeleteRelation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.DocumentPageProviderOperation\">\n      <widgets>\n        <widget name=\"query\" type=\"codearea\">\n            <labels>\n              <label mode=\"any\">NXQL query</label>\n            </labels>\n            <properties mode=\"any\">\n              <property name=\"language\">nxql</property>\n              <property name=\"width\">100%</property>\n              <property name=\"height\">100%</property>\n            </properties>\n             <fields>\n              <field>query</field>\n            </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.ResultSetPageProviderOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.users.GetDocumentPrincipalEmails\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.users.GetDocumentUsersAndGroups\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.users.QueryUsers\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.users.CreateOrUpdateUser\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.users.CreateOrUpdateGroup\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.notification.SendMail\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.FileManagerImport\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.FileManagerImportWithProperties\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.FileManagerCreateFolder\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.BlobHolderAttach\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.GetActions\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.management.GetCounters\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.GetDirectoryEntries\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.UserInvite\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.UserWorkspace\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.RunOperationOnProvider\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.directory.CreateDirectoryEntries\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.directory.CreateVocabularyEntry\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.directory.DeleteDirectoryEntries\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.directory.UpdateDirectoryEntries\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.directory.ReadDirectoryEntries\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.directory.DirectoryProjection\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.directory.LoadFromCSV\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.users.GetNuxeoPrincipal\"/>\n\n  \t<operation class=\"org.nuxeo.ecm.automation.core.operations.users.SuggestUserEntries\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.directory.SuggestDirectoryEntries\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.bulk.BulkRunAction\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.bulk.BulkWaitForAction\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.SuggestCollectionEntry\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.CreateCollectionOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.AddToCollectionOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.RemoveFromCollectionOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.RemoveFromFavoritesOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.AddToFavoritesOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.GetCollectionsOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.GetDocumentsFromCollectionOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.GetDocumentsFromFavoritesOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.FetchFavorites\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.MoveCollectionMemberOperation\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.workmanager.WorkManagerRunWorkInFailure\"/>\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.MetricsStart\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.MetricsStop\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--chains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.features.operations/Contributions/org.nuxeo.ecm.core.automation.features.operations--chains",
              "id": "org.nuxeo.ecm.core.automation.features.operations--chains",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <chain id=\"VersionAndAttachFile\">\n      <operation id=\"Context.PushBlobList\">\n      </operation>\n      <operation id=\"Repository.GetDocument\">\n        <param name=\"value\" type=\"string\">expr:Context.get(\"currentDocument\")</param>\n      </operation>\n      <operation id=\"Document.CheckIn\">\n        <param name=\"version\" type=\"string\">minor</param>\n        <param name=\"comment\" type=\"string\">Automatic checkin before file update</param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param name=\"name\" type=\"string\">newDocument</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">currentDocument</param>\n        <param name=\"value\" type=\"string\">expr:Context.get(\"newDocument\").id</param>\n      </operation>\n      <operation id=\"Context.PopBlobList\">\n      </operation>\n      <operation id=\"BlobHolder.AttachOnCurrentDocument\">\n        <param name=\"useMainBlob\" type=\"boolean\">true</param>\n      </operation>\n    </chain>\n    <chain id=\"AttachFiles\">\n      <operation id=\"BlobHolder.AttachOnCurrentDocument\">\n        <param name=\"useMainBlob\" type=\"boolean\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"VersionAndAttachFiles\">\n      <operation id=\"Context.PushBlobList\">\n      </operation>\n      <operation id=\"Repository.GetDocument\">\n        <param name=\"value\" type=\"string\">expr:Context.get(\"currentDocument\")</param>\n      </operation>\n      <operation id=\"Document.CheckIn\">\n        <param name=\"version\" type=\"string\">minor</param>\n        <param name=\"comment\" type=\"string\">Automatic checkin before files update</param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param name=\"name\" type=\"string\">newDocument</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">currentDocument</param>\n        <param name=\"value\" type=\"string\">expr:Context.get(\"newDocument\").id</param>\n      </operation>\n      <operation id=\"Context.PopBlobList\">\n      </operation>\n      <operation id=\"BlobHolder.AttachOnCurrentDocument\">\n        <param name=\"useMainBlob\" type=\"boolean\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"FileManager.ImportWithMetaData\">\n      <operation id=\"FileManager.ImportWithProperties\">\n        <param name=\"overwrite\" type=\"boolean\">true</param>\n        <param name=\"properties\" type=\"properties\">expr:Context.get(\"docMetaData\")</param>\n      </operation>\n    </chain>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.features.operations/Contributions/org.nuxeo.ecm.core.automation.features.operations--configuration",
              "id": "org.nuxeo.ecm.core.automation.features.operations--configuration",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <property name=\"org.nuxeo.ignore.empty.searchterm\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.features.operations",
          "name": "org.nuxeo.ecm.core.automation.features.operations",
          "requirements": [
            "org.nuxeo.ecm.core.automation.coreContrib"
          ],
          "resolutionOrder": 62,
          "services": [],
          "startOrder": 123,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.automation.features.operations\" version=\"1.0\">\n\n  <alias>org.nuxeo.ecm.core.automation.featuresContrib</alias>\n  <require>org.nuxeo.ecm.core.automation.coreContrib</require>\n\n  <documentation>@author Bogdan Stefanescu (bs@nuxeo.com)</documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.query.DocumentPaginatedQuery\">\n      <widgets>\n        <widget name=\"query\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">Query</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">nxql</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>query</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.query.ResultSetPaginatedQuery\">\n      <widgets>\n        <widget name=\"query\" type=\"codearea\">\n          <labels>\n            <label mode=\"any\">ResultSet Query</label>\n          </labels>\n          <properties mode=\"any\">\n            <property name=\"language\">nxql</property>\n            <property name=\"width\">100%</property>\n            <property name=\"height\">100%</property>\n          </properties>\n          <fields>\n            <field>query</field>\n          </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.AuditLog\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.AuditQuery\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.AuditPageProviderOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.AuditRestore\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.CreateRelation\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.GetRelations\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.DeleteRelation\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.DocumentPageProviderOperation\" >\n      <widgets>\n        <widget name=\"query\" type=\"codearea\">\n            <labels>\n              <label mode=\"any\">NXQL query</label>\n            </labels>\n            <properties mode=\"any\">\n              <property name=\"language\">nxql</property>\n              <property name=\"width\">100%</property>\n              <property name=\"height\">100%</property>\n            </properties>\n             <fields>\n              <field>query</field>\n            </fields>\n        </widget>\n      </widgets>\n    </operation>\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.ResultSetPageProviderOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.users.GetDocumentPrincipalEmails\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.users.GetDocumentUsersAndGroups\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.users.QueryUsers\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.users.CreateOrUpdateUser\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.users.CreateOrUpdateGroup\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.notification.SendMail\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.FileManagerImport\" />\n\n    <operation  class=\"org.nuxeo.ecm.automation.core.operations.services.FileManagerImportWithProperties\" />\n\n    <operation  class=\"org.nuxeo.ecm.automation.core.operations.services.FileManagerCreateFolder\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.BlobHolderAttach\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.GetActions\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.management.GetCounters\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.GetDirectoryEntries\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.UserInvite\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.UserWorkspace\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.RunOperationOnProvider\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.directory.CreateDirectoryEntries\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.directory.CreateVocabularyEntry\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.directory.DeleteDirectoryEntries\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.directory.UpdateDirectoryEntries\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.directory.ReadDirectoryEntries\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.directory.DirectoryProjection\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.directory.LoadFromCSV\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.users.GetNuxeoPrincipal\" />\n\n  \t<operation\n      class=\"org.nuxeo.ecm.automation.core.operations.users.SuggestUserEntries\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.directory.SuggestDirectoryEntries\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.bulk.BulkRunAction\" />\n\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.bulk.BulkWaitForAction\" />\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.SuggestCollectionEntry\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.CreateCollectionOperation\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.AddToCollectionOperation\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.RemoveFromCollectionOperation\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.RemoveFromFavoritesOperation\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.AddToFavoritesOperation\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.GetCollectionsOperation\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.GetDocumentsFromCollectionOperation\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.GetDocumentsFromFavoritesOperation\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.FetchFavorites\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.collections.MoveCollectionMemberOperation\" />\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.workmanager.WorkManagerRunWorkInFailure\" />\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.MetricsStart\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.MetricsStop\" />\n\n  </extension>\n\n  <extension point=\"chains\"\n    target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <chain id=\"VersionAndAttachFile\">\n      <operation id=\"Context.PushBlobList\">\n      </operation>\n      <operation id =\"Repository.GetDocument\">\n        <param type=\"string\" name=\"value\">expr:Context.get(\"currentDocument\")</param>\n      </operation>\n      <operation id=\"Document.CheckIn\">\n        <param type=\"string\" name=\"version\">minor</param>\n        <param type=\"string\" name=\"comment\">Automatic checkin before file update</param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">newDocument</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">currentDocument</param>\n        <param type=\"string\" name=\"value\">expr:Context.get(\"newDocument\").id</param>\n      </operation>\n      <operation id=\"Context.PopBlobList\">\n      </operation>\n      <operation id=\"BlobHolder.AttachOnCurrentDocument\">\n        <param type=\"boolean\" name=\"useMainBlob\">true</param>\n      </operation>\n    </chain>\n    <chain id=\"AttachFiles\">\n      <operation id=\"BlobHolder.AttachOnCurrentDocument\">\n        <param type=\"boolean\" name=\"useMainBlob\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"VersionAndAttachFiles\">\n      <operation id=\"Context.PushBlobList\">\n      </operation>\n      <operation id =\"Repository.GetDocument\">\n        <param type=\"string\" name=\"value\">expr:Context.get(\"currentDocument\")</param>\n      </operation>\n      <operation id=\"Document.CheckIn\">\n        <param type=\"string\" name=\"version\">minor</param>\n        <param type=\"string\" name=\"comment\">Automatic checkin before files update</param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">newDocument</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">currentDocument</param>\n        <param type=\"string\" name=\"value\">expr:Context.get(\"newDocument\").id</param>\n      </operation>\n      <operation id=\"Context.PopBlobList\">\n      </operation>\n      <operation id=\"BlobHolder.AttachOnCurrentDocument\">\n        <param type=\"boolean\" name=\"useMainBlob\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"FileManager.ImportWithMetaData\">\n      <operation id=\"FileManager.ImportWithProperties\">\n        <param type=\"boolean\" name=\"overwrite\">true</param>\n        <param type=\"properties\" name=\"properties\">expr:Context.get(\"docMetaData\")</param>\n      </operation>\n    </chain>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <property name=\"org.nuxeo.ignore.empty.searchterm\">true</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.automation.server.AutomationServer--bindings",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.features.bindings/Contributions/org.nuxeo.ecm.core.automation.features.bindings--bindings",
              "id": "org.nuxeo.ecm.core.automation.features.bindings--bindings",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bindings\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <!-- don't allow direct access to Audit log -->\n    <binding name=\"Audit.Query\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Audit.QueryWithPageProvider\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- don't allow direct access to user operations -->\n    <binding name=\"User.CreateOrUpdate\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Group.CreateOrUpdate\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Bulk.WaitForAction\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Metrics.Start\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Metrics.Stop\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.features.bindings",
          "name": "org.nuxeo.ecm.core.automation.features.bindings",
          "requirements": [],
          "resolutionOrder": 63,
          "services": [],
          "startOrder": 121,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.core.automation.features.bindings\">\n  <extension target=\"org.nuxeo.ecm.automation.server.AutomationServer\"\n    point=\"bindings\">\n    <!-- don't allow direct access to Audit log -->\n    <binding name=\"Audit.Query\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Audit.QueryWithPageProvider\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- don't allow direct access to user operations -->\n    <binding name=\"User.CreateOrUpdate\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Group.CreateOrUpdate\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Bulk.WaitForAction\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Metrics.Start\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Metrics.Stop\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/bindings-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.platform.audit.PageProviderservice.automation.contrib/Contributions/org.nuxeo.ecm.platform.audit.PageProviderservice.automation.contrib--providers",
              "id": "org.nuxeo.ecm.platform.audit.PageProviderservice.automation.contrib--providers",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\" name=\"AUDIT_BROWSER\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate operator=\">\" parameter=\"log.id\">\n          <field name=\"logId\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"BETWEEN\" parameter=\"log.eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.category\">\n          <field name=\"eventCategories\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.principalName\">\n          <field name=\"principalNames\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"true\" column=\"log.eventDate\"/>\n      <sort ascending=\"true\" column=\"log.id\"/>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.platform.audit.PageProviderservice.automation.contrib",
          "name": "org.nuxeo.ecm.platform.audit.PageProviderservice.automation.contrib",
          "requirements": [],
          "resolutionOrder": 64,
          "services": [],
          "startOrder": 267,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.audit.PageProviderservice.automation.contrib\">\n\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <genericPageProvider name=\"AUDIT_BROWSER\"\n      class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate parameter=\"log.id\" operator=\"&gt;\">\n          <field schema=\"basicauditsearch\" name=\"logId\" />\n        </predicate>\n        <predicate parameter=\"log.eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"log.category\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventCategories\" />\n        </predicate>\n        <predicate parameter=\"log.eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\" />\n        </predicate>\n        <predicate parameter=\"log.principalName\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"principalNames\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"log.eventDate\" ascending=\"true\" />\n      <sort column=\"log.id\" ascending=\"true\" />\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--contextHelpers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.contextContrib/Contributions/org.nuxeo.ecm.core.automation.contextContrib--contextHelpers",
              "id": "org.nuxeo.ecm.core.automation.contextContrib--contextHelpers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"contextHelpers\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <contextHelper class=\"org.nuxeo.ecm.automation.features.PlatformFunctions\" id=\"Fn\"/>\n    <contextHelper class=\"org.nuxeo.ecm.automation.features.HTTPHelper\" id=\"HTTP\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Contribution to determine which uid sequence generator to use, either the defaultSequencer or hibernateSequencer.\n      Since 10.1 the default value is false, so it will use the defaultSequencer.\n    \n",
              "documentationHtml": "<p>\nContribution to determine which uid sequence generator to use, either the defaultSequencer or hibernateSequencer.\nSince 10.1 the default value is false, so it will use the defaultSequencer.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.contextContrib/Contributions/org.nuxeo.ecm.core.automation.contextContrib--configuration",
              "id": "org.nuxeo.ecm.core.automation.contextContrib--configuration",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Contribution to determine which uid sequence generator to use, either the defaultSequencer or hibernateSequencer.\n      Since 10.1 the default value is false, so it will use the defaultSequencer.\n    </documentation>\n    <property name=\"org.nuxeo.ecm.core.uidgen.sequencer.hibernate\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.contextContrib",
          "name": "org.nuxeo.ecm.core.automation.contextContrib",
          "requirements": [],
          "resolutionOrder": 65,
          "services": [],
          "startOrder": 118,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.automation.contextContrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n             point=\"contextHelpers\">\n    <contextHelper id=\"Fn\" class=\"org.nuxeo.ecm.automation.features.PlatformFunctions\"/>\n    <contextHelper id=\"HTTP\" class=\"org.nuxeo.ecm.automation.features.HTTPHelper\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Contribution to determine which uid sequence generator to use, either the defaultSequencer or hibernateSequencer.\n      Since 10.1 the default value is false, so it will use the defaultSequencer.\n    </documentation>\n    <property name=\"org.nuxeo.ecm.core.uidgen.sequencer.hibernate\">false</property>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/helpers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.directory.actions.core/Contributions/org.nuxeo.ecm.directory.actions.core--filters",
              "id": "org.nuxeo.ecm.directory.actions.core--filters",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"directoriesManagementAccess\">\n      <rule grant=\"true\">\n        <condition>currentUser.administrator</condition>\n        <condition>currentUser.isMemberOf('powerusers')</condition>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.directory.actions.core",
          "name": "org.nuxeo.ecm.directory.actions.core",
          "requirements": [],
          "resolutionOrder": 66,
          "services": [],
          "startOrder": 198,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.directory.actions.core\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"directoriesManagementAccess\">\n      <rule grant=\"true\">\n        <condition>currentUser.administrator</condition>\n        <condition>currentUser.isMemberOf('powerusers')</condition>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/filters-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.features.bulk/Contributions/org.nuxeo.ecm.core.automation.features.bulk--actions",
              "id": "org.nuxeo.ecm.core.automation.features.bulk--actions",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"10\" bucketSize=\"100\" httpEnabled=\"true\" inputStream=\"bulk/automation\" name=\"automation\" validationClass=\"org.nuxeo.ecm.automation.core.operations.services.bulk.validation.AutomationBulkValidation\"/>\n\n    <action batchSize=\"10\" bucketSize=\"100\" defaultScroller=\"elastic\" httpEnabled=\"true\" inputStream=\"bulk/automationUi\" name=\"automationUi\" validationClass=\"org.nuxeo.ecm.automation.core.operations.services.bulk.validation.AutomationBulkValidation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.features.bulk/Contributions/org.nuxeo.ecm.core.automation.features.bulk--streamProcessor",
              "id": "org.nuxeo.ecm.core.automation.features.bulk--streamProcessor",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.automation.core.operations.services.bulk.AutomationBulkAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"automation\">\n    <policy continueOnFailure=\"true\" delay=\"1s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n\n    <streamProcessor class=\"org.nuxeo.ecm.automation.core.operations.services.bulk.AutomationBulkActionUi\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"automationUi\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxRetries=\"3\" name=\"default\"/>\n      <option name=\"failOnError\">false</option>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.ecm.core.automation.features.bulk",
          "name": "org.nuxeo.ecm.core.automation.features.bulk",
          "requirements": [
            "org.nuxeo.ecm.core.bulk.config"
          ],
          "resolutionOrder": 826,
          "services": [],
          "startOrder": 122,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.automation.features.bulk\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.bulk.config</require>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"automation\" inputStream=\"bulk/automation\" bucketSize=\"100\" batchSize=\"10\" httpEnabled=\"true\"\n      validationClass=\"org.nuxeo.ecm.automation.core.operations.services.bulk.validation.AutomationBulkValidation\" />\n\n    <action name=\"automationUi\" inputStream=\"bulk/automationUi\" bucketSize=\"100\" batchSize=\"10\" httpEnabled=\"true\"\n      validationClass=\"org.nuxeo.ecm.automation.core.operations.services.bulk.validation.AutomationBulkValidation\"\n      defaultScroller=\"elastic\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"automation\"\n      class=\"org.nuxeo.ecm.automation.core.operations.services.bulk.AutomationBulkAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.automation.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.automation.defaultPartitions:=4}\">\n    <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n\n    <streamProcessor name=\"automationUi\"\n      class=\"org.nuxeo.ecm.automation.core.operations.services.bulk.AutomationBulkActionUi\"\n      defaultConcurrency=\"${nuxeo.bulk.action.automationUi.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.automationUi.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" continueOnFailure=\"true\" />\n      <option name=\"failOnError\">false</option>\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/bulk-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-automation-features-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.automation",
      "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features",
      "id": "org.nuxeo.ecm.automation.features",
      "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: 2023.7.9-t20240130-105237\r\nBundle-Name: Nuxeo Automation Features\r\nBundle-SymbolicName: org.nuxeo.ecm.automation.features;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Localization: bundle\r\nRequire-Bundle: org.nuxeo.ecm.automation.core\r\nExport-Package: org.nuxeo.ecm.automation.core\r\nEclipse-LazyStart: true\r\nNuxeo-Component: OSGI-INF/operations-contrib.xml,OSGI-INF/bindings-contr\r\n ib.xml,OSGI-INF/pageprovider-contrib.xml,OSGI-INF/helpers-contrib.xml,O\r\n SGI-INF/filters-contrib.xml,OSGI-INF/bulk-contrib.xml\r\nBundle-Activator: org.nuxeo.ecm.automation.features.Activator\r\n\r\n",
      "maxResolutionOrder": 826,
      "minResolutionOrder": 62,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.automation.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-opencmis-impl",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.opencmis.bindings",
          "org.nuxeo.ecm.core.opencmis.impl"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis",
        "id": "grp:org.nuxeo.ecm.core.opencmis",
        "name": "org.nuxeo.ecm.core.opencmis",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.opencmis.impl",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.opencmis.impl.server.NuxeoRepositories",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.impl/org.nuxeo.ecm.core.opencmis.impl.server.NuxeoRepositories",
          "name": "org.nuxeo.ecm.core.opencmis.impl.server.NuxeoRepositories",
          "requirements": [
            "org.nuxeo.ecm.core.api.repository.RepositoryManager"
          ],
          "resolutionOrder": 248,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.opencmis.impl.server.NuxeoRepositories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.impl/org.nuxeo.ecm.core.opencmis.impl.server.NuxeoRepositories/Services/org.nuxeo.ecm.core.opencmis.impl.server.NuxeoRepositories",
              "id": "org.nuxeo.ecm.core.opencmis.impl.server.NuxeoRepositories",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 812,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.opencmis.impl.server.NuxeoRepositories\">\n\n  <require>org.nuxeo.ecm.core.api.repository.RepositoryManager</require>\n\n  <implementation\n    class=\"org.nuxeo.ecm.core.opencmis.impl.server.NuxeoRepositories\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.opencmis.impl.server.NuxeoRepositories\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/opencmis-contrib.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService--queryMaker",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.impl/org.nuxeo.ecm.core.opencmis.impl.server.querymaker/Contributions/org.nuxeo.ecm.core.opencmis.impl.server.querymaker--queryMaker",
              "id": "org.nuxeo.ecm.core.opencmis.impl.server.querymaker--queryMaker",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
                "name": "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"queryMaker\" target=\"org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService\">\n    <queryMaker name=\"CMISQL\">\n      org.nuxeo.ecm.core.opencmis.impl.server.CMISQLQueryMaker\n    </queryMaker>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.impl/org.nuxeo.ecm.core.opencmis.impl.server.querymaker",
          "name": "org.nuxeo.ecm.core.opencmis.impl.server.querymaker",
          "requirements": [],
          "resolutionOrder": 249,
          "services": [],
          "startOrder": 147,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.opencmis.impl.server.querymaker\"\n  version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService\"\n    point=\"queryMaker\">\n    <queryMaker name=\"CMISQL\">\n      org.nuxeo.ecm.core.opencmis.impl.server.CMISQLQueryMaker\n    </queryMaker>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/cmis-querymaker-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Properties for relaxing the CMIS specifications. Note that setting any property of them to true gives a behavior\n      that is contrary to the CMIS specification. Please be aware the risk of doing so.\n      <ul>\n    <li>\n          \"org.nuxeo.cmis.relaxSpec\":\n          Relaxing CMIS specification control, default to false. Setting this property to true allows users to relax\n          the CMIS specification and use customized CMISQL. It allows multiple CONTAINS in CMISQL, contrary to the\n          specification 1.1, section 2.1.14.2.4.4, where at most one CONTAINS() function must be included in a single\n          query statement. Currently, JOIN predicate is not supported in such mode. This relax mode must NOT be used\n          with DBS (Document-Based Storage), like MongoDB.\n        </li>\n    <li>\n          \"org.nuxeo.cmis.errorOnCancelCheckOutOfDraftVersion\":\n          Property that makes it an error to call CMIS cancelCheckOut on a draft version (0.0).\n        </li>\n</ul>\n",
              "documentationHtml": "<p>\nProperties for relaxing the CMIS specifications. Note that setting any property of them to true gives a behavior\nthat is contrary to the CMIS specification. Please be aware the risk of doing so.\n</p><ul><li>\n&#34;org.nuxeo.cmis.relaxSpec&#34;:\nRelaxing CMIS specification control, default to false. Setting this property to true allows users to relax\nthe CMIS specification and use customized CMISQL. It allows multiple CONTAINS in CMISQL, contrary to the\nspecification 1.1, section 2.1.14.2.4.4, where at most one CONTAINS() function must be included in a single\nquery statement. Currently, JOIN predicate is not supported in such mode. This relax mode must NOT be used\nwith DBS (Document-Based Storage), like MongoDB.\n</li><li>\n&#34;org.nuxeo.cmis.errorOnCancelCheckOutOfDraftVersion&#34;:\nProperty that makes it an error to call CMIS cancelCheckOut on a draft version (0.0).\n</li></ul>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.impl/org.nuxeo.ecm.core.opencmis.configuration/Contributions/org.nuxeo.ecm.core.opencmis.configuration--configuration",
              "id": "org.nuxeo.ecm.core.opencmis.configuration--configuration",
              "registrationOrder": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Properties for relaxing the CMIS specifications. Note that setting any property of them to true gives a behavior\n      that is contrary to the CMIS specification. Please be aware the risk of doing so.\n      <ul>\n        <li>\n          \"org.nuxeo.cmis.relaxSpec\":\n          Relaxing CMIS specification control, default to false. Setting this property to true allows users to relax\n          the CMIS specification and use customized CMISQL. It allows multiple CONTAINS in CMISQL, contrary to the\n          specification 1.1, section 2.1.14.2.4.4, where at most one CONTAINS() function must be included in a single\n          query statement. Currently, JOIN predicate is not supported in such mode. This relax mode must NOT be used\n          with DBS (Document-Based Storage), like MongoDB.\n        </li>\n        <li>\n          \"org.nuxeo.cmis.errorOnCancelCheckOutOfDraftVersion\":\n          Property that makes it an error to call CMIS cancelCheckOut on a draft version (0.0).\n        </li>\n      </ul>\n    </documentation>\n    <property name=\"org.nuxeo.cmis.errorOnCancelCheckOutOfDraftVersion\">false</property>\n    <property name=\"org.nuxeo.cmis.relaxSpec\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.impl/org.nuxeo.ecm.core.opencmis.configuration",
          "name": "org.nuxeo.ecm.core.opencmis.configuration",
          "requirements": [],
          "resolutionOrder": 250,
          "services": [],
          "startOrder": 146,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.opencmis.configuration\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Properties for relaxing the CMIS specifications. Note that setting any property of them to true gives a behavior\n      that is contrary to the CMIS specification. Please be aware the risk of doing so.\n      <ul>\n        <li>\n          \"org.nuxeo.cmis.relaxSpec\":\n          Relaxing CMIS specification control, default to false. Setting this property to true allows users to relax\n          the CMIS specification and use customized CMISQL. It allows multiple CONTAINS in CMISQL, contrary to the\n          specification 1.1, section 2.1.14.2.4.4, where at most one CONTAINS() function must be included in a single\n          query statement. Currently, JOIN predicate is not supported in such mode. This relax mode must NOT be used\n          with DBS (Document-Based Storage), like MongoDB.\n        </li>\n        <li>\n          \"org.nuxeo.cmis.errorOnCancelCheckOutOfDraftVersion\":\n          Property that makes it an error to call CMIS cancelCheckOut on a draft version (0.0).\n        </li>\n      </ul>\n    </documentation>\n    <property name=\"org.nuxeo.cmis.errorOnCancelCheckOutOfDraftVersion\">false</property>\n    <property name=\"org.nuxeo.cmis.relaxSpec\">false</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/properties-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.versioning.VersioningService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.impl/org.nuxeo.ecm.core.opencmis.impl.server.versioning/Contributions/org.nuxeo.ecm.core.opencmis.impl.server.versioning--policies",
              "id": "org.nuxeo.ecm.core.opencmis.impl.server.versioning--policies",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"policies\" target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n    <!-- Range [1, 10] for order is reserved for Nuxeo System Policies-->\n    <!-- See https://doc.nuxeo.com/nxdoc/versioning/#-anchor-versioning-policies-versioning-policies-and-filters -->\n    <policy beforeUpdate=\"true\" id=\"no-versioning-for-cmis-before-update\" increment=\"NONE\" order=\"2\">\n      <filter-id>cmis-document</filter-id>\n    </policy>\n    <policy id=\"no-versioning-for-cmis-after-update\" increment=\"NONE\" order=\"2\">\n      <filter-id>cmis-document</filter-id>\n    </policy>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.versioning.VersioningService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.impl/org.nuxeo.ecm.core.opencmis.impl.server.versioning/Contributions/org.nuxeo.ecm.core.opencmis.impl.server.versioning--filters",
              "id": "org.nuxeo.ecm.core.opencmis.impl.server.versioning--filters",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n    <filter class=\"org.nuxeo.ecm.core.opencmis.impl.server.versioning.CMISVersioningFilter\" id=\"cmis-document\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.impl/org.nuxeo.ecm.core.opencmis.impl.server.versioning",
          "name": "org.nuxeo.ecm.core.opencmis.impl.server.versioning",
          "requirements": [
            "org.nuxeo.ecm.core.versioning.default-policies"
          ],
          "resolutionOrder": 251,
          "services": [],
          "startOrder": 148,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.opencmis.impl.server.versioning\" version=\"1.0\">\n\n  <require>org.nuxeo.ecm.core.versioning.default-policies</require>\n\n  <extension target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" point=\"policies\">\n    <!-- Range [1, 10] for order is reserved for Nuxeo System Policies-->\n    <!-- See https://doc.nuxeo.com/nxdoc/versioning/#-anchor-versioning-policies-versioning-policies-and-filters -->\n    <policy id=\"no-versioning-for-cmis-before-update\" beforeUpdate=\"true\" increment=\"NONE\" order=\"2\">\n      <filter-id>cmis-document</filter-id>\n    </policy>\n    <policy id=\"no-versioning-for-cmis-after-update\" increment=\"NONE\" order=\"2\">\n      <filter-id>cmis-document</filter-id>\n    </policy>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" point=\"filters\">\n    <filter id=\"cmis-document\" class=\"org.nuxeo.ecm.core.opencmis.impl.server.versioning.CMISVersioningFilter\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/cmis-versioning-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-opencmis-impl-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.opencmis/org.nuxeo.ecm.core.opencmis.impl",
      "id": "org.nuxeo.ecm.core.opencmis.impl",
      "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: 5.4.2.qualifier\r\nBundle-Name: Nuxeo ECM Core OpenCMIS Implementation\r\nBundle-SymbolicName: org.nuxeo.ecm.core.opencmis.impl;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nExport-Package: org.nuxeo.ecm.core.opencmis.impl.client,org.nuxeo.ecm.co\r\n re.opencmis.impl.server,org.nuxeo.ecm.core.opencmis.impl.util\r\nBundle-ActivationPolicy: lazy\r\nEclipse-ExtensibleAPI: true\r\nNuxeo-Component: OSGI-INF/opencmis-contrib.xml,OSGI-INF/cmis-querymaker-\r\n contrib.xml,OSGI-INF/properties-contrib.xml,OSGI-INF/cmis-versioning-co\r\n ntrib.xml\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nImport-Package: javax.resource,javax.servlet,org.antlr.runtime,org.antlr\r\n .runtime.tree,org.apache.chemistry.opencmis.client.api,org.apache.chemi\r\n stry.opencmis.client.bindings.spi,org.apache.chemistry.opencmis.client.\r\n runtime,org.apache.chemistry.opencmis.client.runtime.objecttype,org.apa\r\n che.chemistry.opencmis.client.runtime.util,org.apache.chemistry.opencmi\r\n s.commons,org.apache.chemistry.opencmis.commons.data,org.apache.chemist\r\n ry.opencmis.commons.definitions,org.apache.chemistry.opencmis.commons.e\r\n nums,org.apache.chemistry.opencmis.commons.exceptions,org.apache.chemis\r\n try.opencmis.commons.impl,org.apache.chemistry.opencmis.commons.impl.da\r\n taobjects,org.apache.chemistry.opencmis.commons.impl.jaxb,org.apache.ch\r\n emistry.opencmis.commons.impl.server,org.apache.chemistry.opencmis.comm\r\n ons.server,org.apache.chemistry.opencmis.commons.spi,org.apache.chemist\r\n ry.opencmis.server.support,org.apache.chemistry.opencmis.server.support\r\n .query,org.apache.commons.logging,org.nuxeo.common.utils,org.nuxeo.ecm.\r\n core,org.nuxeo.ecm.core.api,org.nuxeo.ecm.core.api.blobholder,org.nuxeo\r\n .ecm.core.api.event,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.core.api.\r\n impl.blob,org.nuxeo.ecm.core.api.model,org.nuxeo.ecm.core.api.pathsegme\r\n nt,org.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.core.api.security,or\r\n g.nuxeo.ecm.core.query,org.nuxeo.ecm.core.query.sql,org.nuxeo.ecm.core.\r\n schema,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm.core.schema.types.\r\n primitives,org.nuxeo.ecm.core.storage,org.nuxeo.ecm.core.storage.sql,or\r\n g.nuxeo.ecm.core.storage.sql.jdbc,org.nuxeo.ecm.core.storage.sql.jdbc.d\r\n b,org.nuxeo.ecm.core.storage.sql.jdbc.dialect,org.nuxeo.ecm.platform.au\r\n dit.api,org.nuxeo.runtime.api,org.nuxeo.runtime.model\r\n\r\n",
      "maxResolutionOrder": 251,
      "minResolutionOrder": 248,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-directory-mongodb",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.audit.io",
          "org.nuxeo.ecm.default.config",
          "org.nuxeo.ecm.jwt",
          "org.nuxeo.ecm.permissions",
          "org.nuxeo.ecm.platform",
          "org.nuxeo.ecm.platform.api",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.convert",
          "org.nuxeo.ecm.platform.csv.export",
          "org.nuxeo.ecm.platform.dublincore",
          "org.nuxeo.ecm.platform.filemanager",
          "org.nuxeo.ecm.platform.htmlsanitizer",
          "org.nuxeo.ecm.platform.mail",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.threed",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.ecm.webdav",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "org.nuxeo.mongodb.audit",
          "org.nuxeo.search.ui",
          "org.nuxeo.usermapper"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform",
        "id": "grp:org.nuxeo.ecm.platform",
        "name": "org.nuxeo.ecm.platform",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Platform Importer\n\n## About Nuxeo Platform Importer\n\nThe file importer comes as a Java library (with nuxeo runtime service) and a sample JAX-RS interface to launch, monitor and abort import jobs.\nThis project is an on-going project, supported by Nuxeo\n\n## Building\n### How to Build Nuxeo Platform Importer\nBuild the Nuxeo Platform Importer with Maven:\n```$ mvn install -Dmaven.test.skip=true```\n\n## Deploying\nNuxeo Platform Importer is available as two package add-ons [from the Nuxeo Marketplace]\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-platform-importer\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-scan-importer\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Platform Importer is available in our Documentation Center: http://doc.nuxeo.com/x/gYBVAQ\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Nuxeo Platform Importer component:\nhttps://jira.nuxeo.com/browse/NXP/component/10621\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "83bb2a4c6415c9f07db3ab17fa99510c",
            "encoding": "UTF-8",
            "length": 1753,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.directory.mongodb",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.directory.mongodb.MongoDBDirectoryFactory",
          "declaredStartOrder": null,
          "documentation": "\n    MongoDB-based implementation for Directory\n  \n",
          "documentationHtml": "<p>\nMongoDB-based implementation for Directory\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.directory.mongodb.MongoDBDirectoryFactory",
              "descriptors": [
                "org.nuxeo.directory.mongodb.MongoDBDirectoryDescriptor"
              ],
              "documentation": "\n      This extension point can be used to register new MongoDB-based directories. The extension can contain any number\n      of directories declarations of the form:\n      <code>\n    <directory name=\"userDirectory\">\n        <schema>vocabulary</schema>\n        <types>\n            <type>system</type>\n        </types>\n        <idField>username</idField>\n        <passwordField>password</passwordField>\n        <passwordHashAlgorithm>SSHA</passwordHashAlgorithm>\n        <autoincrementIdField>false</autoincrementIdField>\n        <createTablePolicy>on_missing_columns</createTablePolicy>\n        <dataFile>setup.csv</dataFile>\n        <dataFileCharacterSeparator>,</dataFileCharacterSeparator>\n        <references>\n            <reference collection=\"user2group\" dataFile=\"user2group.csv\"\n                directory=\"groupDirectory\" field=\"groups\"\n                sourceField=\"userId\" targetField=\"groupId\"/>\n        </references>\n        <permissions>\n            <permission name=\"Read\">\n                <group>mygroup</group>\n                <group>mygroup2</group>\n                <user>Administrator</user>\n            </permission>\n            <permission name=\"Write\">\n                <group>mygroup3</group>\n            </permission>\n        </permissions>\n    </directory>\n</code>\n\n      If you want to customize the MongoDB connection used in the directory, you can contribute a new connection\n      configuration to MongoDBComponent with id 'directory/[directory@name]'. In the example above the id will be\n      'directory/userDirectory'\n    \n",
              "documentationHtml": "<p>\nThis extension point can be used to register new MongoDB-based directories. The extension can contain any number\nof directories declarations of the form:\n</p><p></p><pre><code>    &lt;directory name&#61;&#34;userDirectory&#34;&gt;\n        &lt;schema&gt;vocabulary&lt;/schema&gt;\n        &lt;types&gt;\n            &lt;type&gt;system&lt;/type&gt;\n        &lt;/types&gt;\n        &lt;idField&gt;username&lt;/idField&gt;\n        &lt;passwordField&gt;password&lt;/passwordField&gt;\n        &lt;passwordHashAlgorithm&gt;SSHA&lt;/passwordHashAlgorithm&gt;\n        &lt;autoincrementIdField&gt;false&lt;/autoincrementIdField&gt;\n        &lt;createTablePolicy&gt;on_missing_columns&lt;/createTablePolicy&gt;\n        &lt;dataFile&gt;setup.csv&lt;/dataFile&gt;\n        &lt;dataFileCharacterSeparator&gt;,&lt;/dataFileCharacterSeparator&gt;\n        &lt;references&gt;\n            &lt;reference collection&#61;&#34;user2group&#34; dataFile&#61;&#34;user2group.csv&#34;\n                directory&#61;&#34;groupDirectory&#34; field&#61;&#34;groups&#34;\n                sourceField&#61;&#34;userId&#34; targetField&#61;&#34;groupId&#34;/&gt;\n        &lt;/references&gt;\n        &lt;permissions&gt;\n            &lt;permission name&#61;&#34;Read&#34;&gt;\n                &lt;group&gt;mygroup&lt;/group&gt;\n                &lt;group&gt;mygroup2&lt;/group&gt;\n                &lt;user&gt;Administrator&lt;/user&gt;\n            &lt;/permission&gt;\n            &lt;permission name&#61;&#34;Write&#34;&gt;\n                &lt;group&gt;mygroup3&lt;/group&gt;\n            &lt;/permission&gt;\n        &lt;/permissions&gt;\n    &lt;/directory&gt;\n</code></pre><p>\nIf you want to customize the MongoDB connection used in the directory, you can contribute a new connection\nconfiguration to MongoDBComponent with id &#39;directory/[directory&#64;name]&#39;. In the example above the id will be\n&#39;directory/userDirectory&#39;\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.directory.mongodb/org.nuxeo.directory.mongodb.MongoDBDirectoryFactory/ExtensionPoints/org.nuxeo.directory.mongodb.MongoDBDirectoryFactory--directories",
              "id": "org.nuxeo.directory.mongodb.MongoDBDirectoryFactory--directories",
              "label": "directories (org.nuxeo.directory.mongodb.MongoDBDirectoryFactory)",
              "name": "directories",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.directory.mongodb/org.nuxeo.directory.mongodb.MongoDBDirectoryFactory",
          "name": "org.nuxeo.directory.mongodb.MongoDBDirectoryFactory",
          "requirements": [
            "org.nuxeo.runtime.mongodb.MongoDBComponent",
            "org.nuxeo.ecm.directory.DirectoryServiceImpl",
            "org.nuxeo.ecm.directory.sql.SQLDirectoryFactory"
          ],
          "resolutionOrder": 818,
          "services": [],
          "startOrder": 784,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.directory.mongodb.MongoDBDirectoryFactory\">\n\n  <implementation class=\"org.nuxeo.directory.mongodb.MongoDBDirectoryFactory\"/>\n\n  <require>org.nuxeo.runtime.mongodb.MongoDBComponent</require>\n  <require>org.nuxeo.ecm.directory.DirectoryServiceImpl</require>\n  <require>org.nuxeo.ecm.directory.sql.SQLDirectoryFactory</require>\n\n  <documentation>\n    MongoDB-based implementation for Directory\n  </documentation>\n\n  <extension-point name=\"directories\">\n    <documentation>\n      This extension point can be used to register new MongoDB-based directories. The extension can contain any number\n      of directories declarations of the form:\n      <code>\n        <directory name=\"userDirectory\">\n          <schema>vocabulary</schema>\n          <types>\n            <type>system</type>\n          </types>\n          <idField>username</idField>\n          <passwordField>password</passwordField>\n          <passwordHashAlgorithm>SSHA</passwordHashAlgorithm>\n          <autoincrementIdField>false</autoincrementIdField>\n          <createTablePolicy>on_missing_columns</createTablePolicy>\n          <dataFile>setup.csv</dataFile>\n          <dataFileCharacterSeparator>,</dataFileCharacterSeparator>\n          <references>\n            <reference field=\"groups\" directory=\"groupDirectory\" collection=\"user2group\" sourceField=\"userId\" targetField=\"groupId\" dataFile=\"user2group.csv\"/>\n          </references>\n          <permissions>\n            <permission name=\"Read\">\n              <group>mygroup</group>\n              <group>mygroup2</group>\n              <user>Administrator</user>\n            </permission>\n            <permission name=\"Write\">\n              <group>mygroup3</group>\n            </permission>\n          </permissions>\n        </directory>\n      </code>\n      If you want to customize the MongoDB connection used in the directory, you can contribute a new connection\n      configuration to MongoDBComponent with id 'directory/[directory@name]'. In the example above the id will be\n      'directory/userDirectory'\n    </documentation>\n\n    <object class=\"org.nuxeo.directory.mongodb.MongoDBDirectoryDescriptor\"/>\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/MongoDBDirectoryFactory.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-directory-mongodb-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.directory.mongodb",
      "id": "org.nuxeo.directory.mongodb",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo MongoDB Directory\r\nBundle-SymbolicName: org.nuxeo.directory.mongodb;singleton:=true\r\nNuxeo-Component: OSGI-INF/MongoDBDirectoryFactory.xml\r\n\r\n",
      "maxResolutionOrder": 818,
      "minResolutionOrder": 818,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-imaging-jsf",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.picture.core",
          "org.nuxeo.ecm.platform.picture.jsf",
          "org.nuxeo.ecm.platform.picture.rest"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture",
        "id": "grp:org.nuxeo.ecm.platform.picture",
        "name": "org.nuxeo.ecm.platform.picture",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.picture.jsf",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.rest.URLService--urlpatterns",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.web.plugins/Contributions/org.nuxeo.ecm.platform.picture.web.plugins--urlpatterns",
              "id": "org.nuxeo.ecm.platform.picture.web.plugins--urlpatterns",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.rest.URLService",
                "name": "org.nuxeo.ecm.platform.ui.web.rest.URLService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"urlpatterns\" target=\"org.nuxeo.ecm.platform.ui.web.rest.URLService\">\n    <urlPattern enabled=\"true\" name=\"downloadPicture\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>false</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>downloadPicture</codecName>\n      <actionBinding>#{pictureManager.download}</actionBinding>\n      <documentViewBinding>\n        #{restHelper.documentView}\n      </documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.newDocumentView}\n      </newDocumentViewBinding>\n    </urlPattern>\n\n    <urlPattern enabled=\"true\" name=\"downloadThumbnail\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>false</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>downloadThumbnail</codecName>\n      <actionBinding>#{pictureManager.downloadThumbnail}</actionBinding>\n      <documentViewBinding>\n        #{restHelper.documentView}\n      </documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.newDocumentView}\n      </newDocumentViewBinding>\n    </urlPattern>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.web.plugins",
          "name": "org.nuxeo.ecm.platform.picture.web.plugins",
          "requirements": [],
          "resolutionOrder": 397,
          "services": [],
          "startOrder": 392,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.web.plugins\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.rest.URLService\"\n             point=\"urlpatterns\">\n    <urlPattern name=\"downloadPicture\" enabled=\"true\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>false</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>downloadPicture</codecName>\n      <actionBinding>#{pictureManager.download}</actionBinding>\n      <documentViewBinding>\n        #{restHelper.documentView}\n      </documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.newDocumentView}\n      </newDocumentViewBinding>\n    </urlPattern>\n\n    <urlPattern name=\"downloadThumbnail\" enabled=\"true\">\n      <defaultURLPolicy>false</defaultURLPolicy>\n      <needBaseURL>true</needBaseURL>\n      <needRedirectFilter>false</needRedirectFilter>\n      <needFilterPreprocessing>true</needFilterPreprocessing>\n      <codecName>downloadThumbnail</codecName>\n      <actionBinding>#{pictureManager.downloadThumbnail}</actionBinding>\n      <documentViewBinding>\n        #{restHelper.documentView}\n      </documentViewBinding>\n      <newDocumentViewBinding>\n        #{restHelper.newDocumentView}\n      </newDocumentViewBinding>\n    </urlPattern>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/imaging-urlservice-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService--codecs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.jsf.codec/Contributions/org.nuxeo.ecm.platform.picture.jsf.codec--codecs",
              "id": "org.nuxeo.ecm.platform.picture.jsf.codec--codecs",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"codecs\" target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\">\n    <documentViewCodec class=\"org.nuxeo.ecm.platform.url.codec.DocumentFileCodec\" enabled=\"true\" name=\"downloadPicture\" prefix=\"nxpicsfile\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.jsf.codec",
          "name": "org.nuxeo.ecm.platform.picture.jsf.codec",
          "requirements": [
            "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService"
          ],
          "resolutionOrder": 556,
          "services": [],
          "startOrder": 381,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.jsf.codec\">\n\n  <require>org.nuxeo.ecm.platform.url.service.DocumentViewCodecService</require>\n\n  <extension\n          target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\"\n          point=\"codecs\">\n    <documentViewCodec name=\"downloadPicture\" enabled=\"true\"\n                       prefix=\"nxpicsfile\"\n                       class=\"org.nuxeo.ecm.platform.url.codec.DocumentFileCodec\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/imaging-codec-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--bundles",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.theme/Contributions/org.nuxeo.ecm.platform.picture.theme--bundles",
              "id": "org.nuxeo.ecm.platform.picture.theme--bundles",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bundles\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>picture_book.css</resource>\n      </resources>\n    </bundle>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.theme/Contributions/org.nuxeo.ecm.platform.picture.theme--resources",
              "id": "org.nuxeo.ecm.platform.picture.theme--resources",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n\n    <resource name=\"picture_book.css\">\n      <path>themes/css/picture_book.css</path>\n    </resource>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.theme",
          "name": "org.nuxeo.ecm.platform.picture.theme",
          "requirements": [
            "org.nuxeo.theme.nuxeo.webapp"
          ],
          "resolutionOrder": 656,
          "services": [],
          "startOrder": 390,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.theme\">\n\n  <require>org.nuxeo.theme.nuxeo.webapp</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"bundles\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>picture_book.css</resource>\n      </resources>\n    </bundle>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\n\n    <resource name=\"picture_book.css\">\n      <path>themes/css/picture_book.css</path>\n    </resource>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/theme-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.actions/Contributions/org.nuxeo.ecm.platform.picture.actions--actions",
              "id": "org.nuxeo.ecm.platform.picture.actions--actions",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"triggerContentViewSlideshow\" label=\"label.contentview.trigger.slideshow\" order=\"70\" type=\"template\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_slideshow.xhtml\n        </property>\n      </properties>\n      <filter-id>contentViewShowSlideshow</filter-id>\n    </action>\n\n    <action icon=\"/icons/page_rotateleft.gif\" id=\"pictureRotate90left\" label=\"action.picture.rotateLeft\" link=\"#{pictureManager.rotate90left}\" order=\"100\" type=\"link\">\n      <category>IMAGE_PROCESSING</category>\n      <filter-id>hasPictureFacet</filter-id>\n      <filter-id>canRotatePicture</filter-id>\n    </action>\n\n    <action icon=\"/icons/page_rotateright.gif\" id=\"pictureRotate90right\" label=\"action.picture.rotateRight\" link=\"#{pictureManager.rotate90right}\" order=\"200\" type=\"link\">\n      <category>IMAGE_PROCESSING</category>\n      <filter-id>hasPictureFacet</filter-id>\n      <filter-id>canRotatePicture</filter-id>\n    </action>\n\n    <action enabled=\"false\" icon=\"/icons/generate.png\" id=\"recomputePictureViews\" label=\"label.imaging.recompute.picture.views\" link=\"#{imagingRecomputeActions.recomputePictureViews}\" order=\"-100\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>hasPictureFacet</filter-id>\n      <filter-id>canRecomputePictureViews</filter-id>\n    </action>\n\n    <action id=\"Imaging\" label=\"adm.imaging\" link=\"/incl/imaging/imaging_admin_recompute_views.xhtml\" order=\"150\" type=\"admin_rest_document_link\">\n      <category>NUXEO_ADMIN</category>\n      <filter-id>only_for_manager</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.actions/Contributions/org.nuxeo.ecm.platform.picture.actions--filters",
              "id": "org.nuxeo.ecm.platform.picture.actions--filters",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"grantpicturebook\">\n      <rule grant=\"true\">\n        <type>PictureBook</type>\n      </rule>\n    </filter>\n\n    <!-- not used since 5.5, keep it for compatibility -->\n    <filter id=\"grantpicture\">\n      <rule grant=\"true\">\n        <type>Picture</type>\n      </rule>\n    </filter>\n\n    <filter append=\"true\" id=\"create\">\n      <rule grant=\"true\">\n        <permission>AddChildren</permission>\n        <type>PictureBook</type>\n      </rule>\n    </filter>\n\n    <filter append=\"true\" id=\"importFile\">\n      <rule grant=\"true\">\n        <permission>AddChildren</permission>\n        <type>PictureBook</type>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowSlideshow\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showSlideshow,\n          contentView.currentResultLayout.showSlideshow,\n          showSlideshow)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canRecomputePictureViews\">\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"canRotatePicture\">\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.actions",
          "name": "org.nuxeo.ecm.platform.picture.actions",
          "requirements": [
            "org.nuxeo.ecm.platform.actions"
          ],
          "resolutionOrder": 667,
          "services": [],
          "startOrder": 374,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.actions\">\n\n  <require>org.nuxeo.ecm.platform.actions</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n             point=\"actions\">\n\n    <action id=\"triggerContentViewSlideshow\" order=\"70\"\n            label=\"label.contentview.trigger.slideshow\" type=\"template\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_slideshow.xhtml\n        </property>\n      </properties>\n      <filter-id>contentViewShowSlideshow</filter-id>\n    </action>\n\n    <action id=\"pictureRotate90left\" order=\"100\" type=\"link\"\n            link=\"#{pictureManager.rotate90left}\"\n            icon=\"/icons/page_rotateleft.gif\" label=\"action.picture.rotateLeft\">\n      <category>IMAGE_PROCESSING</category>\n      <filter-id>hasPictureFacet</filter-id>\n      <filter-id>canRotatePicture</filter-id>\n    </action>\n\n    <action id=\"pictureRotate90right\" order=\"200\" type=\"link\"\n            link=\"#{pictureManager.rotate90right}\"\n            icon=\"/icons/page_rotateright.gif\" label=\"action.picture.rotateRight\">\n      <category>IMAGE_PROCESSING</category>\n      <filter-id>hasPictureFacet</filter-id>\n      <filter-id>canRotatePicture</filter-id>\n    </action>\n\n    <action id=\"recomputePictureViews\" enabled=\"false\" order=\"-100\"\n            link=\"#{imagingRecomputeActions.recomputePictureViews}\"\n            label=\"label.imaging.recompute.picture.views\" icon=\"/icons/generate.png\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>hasPictureFacet</filter-id>\n      <filter-id>canRecomputePictureViews</filter-id>\n    </action>\n\n    <action id=\"Imaging\" link=\"/incl/imaging/imaging_admin_recompute_views.xhtml\" label=\"adm.imaging\"\n            type=\"admin_rest_document_link\"\n            order=\"150\">\n      <category>NUXEO_ADMIN</category>\n      <filter-id>only_for_manager</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n             point=\"filters\">\n\n    <filter id=\"grantpicturebook\">\n      <rule grant=\"true\">\n        <type>PictureBook</type>\n      </rule>\n    </filter>\n\n    <!-- not used since 5.5, keep it for compatibility -->\n    <filter id=\"grantpicture\">\n      <rule grant=\"true\">\n        <type>Picture</type>\n      </rule>\n    </filter>\n\n    <filter id=\"create\" append=\"true\">\n      <rule grant=\"true\">\n        <permission>AddChildren</permission>\n        <type>PictureBook</type>\n      </rule>\n    </filter>\n\n    <filter id=\"importFile\" append=\"true\">\n      <rule grant=\"true\">\n        <permission>AddChildren</permission>\n        <type>PictureBook</type>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowSlideshow\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showSlideshow,\n          contentView.currentResultLayout.showSlideshow,\n          showSlideshow)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canRecomputePictureViews\">\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"canRotatePicture\">\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.jsf.layouts/Contributions/org.nuxeo.ecm.platform.picture.jsf.layouts--widgettypes",
              "id": "org.nuxeo.ecm.platform.picture.jsf.layouts--widgettypes",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"picture_view\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Picture view</title>\n        <description>\n          <p>\n            The picture_view widget displays the configured View of a document\n            having the Picture facet.\n          </p>\n          <p>\n            It requires the following fields configuration: first field maps\n            the document model.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"picture_view_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>pictureView</widget>\n                </row>\n                <row>\n                  <widget>width</widget>\n                </row>\n                <row>\n                  <widget>height</widget>\n                </row>\n              </rows>\n              <widget name=\"pictureView\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Picture view</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The name of the picture view, defaults to\n                    'Medium'.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>pictureView</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Medium (default value)\" itemValue=\"Medium\"/>\n                  <option itemLabel=\"Small\" itemValue=\"Small\"/>\n                  <option itemLabel=\"Thumbnail\" itemValue=\"Thumbnail\"/>\n                  <option itemLabel=\"OriginalJpeg\" itemValue=\"OriginalJpeg\"/>\n                </selectOptions>\n              </widget>\n              <widget name=\"width\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Width</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The width of the image.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>width</field>\n                </fields>\n              </widget>\n              <widget name=\"height\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Height</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The height of the image.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>height</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/picture_view_widget_template.xhtml</property>\n    </widgetType>\n\n    <widgetType name=\"dimensions\">\n      <configuration>\n        <sinceVersion>7.1</sinceVersion>\n        <title>Dimensions</title>\n        <description>\n          <p>\n            The dimensions widget displays the dimensions of an image as \"{width} x {height}\".\n          </p>\n          <p>\n            The first field maps to the width, the second one to the height.\n          </p>\n        </description>\n        <handlingLabels>false</handlingLabels>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/dimensions_widget_template.xhtml</property>\n    </widgetType>\n\n    <widgetType name=\"picture_additional_formats\">\n      <configuration>\n        <sinceVersion>7.1</sinceVersion>\n        <title>Picture additional formats</title>\n        <description>\n          <p>\n            This widget displays the list of additional\n            formats for the given Picture document.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/picture_additional_formats_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.jsf.layouts/Contributions/org.nuxeo.ecm.platform.picture.jsf.layouts--widgets",
              "id": "org.nuxeo.ecm.platform.picture.jsf.layouts--widgets",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"imageFile\" type=\"image\">\n      <labels>\n        <label mode=\"any\">label.file.content</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>file:content</field>\n        <field>file:content/filename</field>\n      </fields>\n    </widget>\n\n    <widget name=\"summary_picture_view\" type=\"picture_view\"/>\n\n    <widget name=\"infoViewPictureView\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewDocContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"pictureView\" type=\"picture_view\"/>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"summary_picture_info_box\" type=\"info_box\"/>\n\n    <widget name=\"picture_info_dimensions\" type=\"dimensions\">\n      <labels>\n        <label mode=\"any\">label.widget.picture.dimensions</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>picture:info/width</field>\n        <field>picture:info/height</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"picture_info_format\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.picture.format</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>picture:info/format</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"picture_info_colorspace\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.picture.colorSpace</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>picture:info/colorSpace</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"picture_info_depth\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.picture.depth</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>picture:info/depth</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"summary_picture_info\" type=\"container\">\n      <labels>\n        <label mode=\"any\">label.header.picture.info</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <subWidgets>\n        <widget name=\"picture_info\" type=\"layout\">\n          <properties widgetMode=\"any\">\n            <property name=\"name\">picture_info</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"summary_picture_exif\" type=\"container\">\n      <labels>\n        <label mode=\"any\">label.header.info.exif</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <subWidgets>\n        <widget name=\"exif_info\" type=\"layout\">\n          <properties widgetMode=\"any\">\n            <property name=\"name\">exif_info</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"summary_picture_iptc\" type=\"container\">\n      <labels>\n        <label mode=\"any\">label.header.info.iptc</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <subWidgets>\n        <widget name=\"iptc_info\" type=\"layout\">\n          <properties widgetMode=\"any\">\n            <property name=\"name\">iptc_info</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"summary_picture_additional_formats\" type=\"picture_additional_formats\">\n      <labels>\n        <label mode=\"any\">label.header.picture.additional.formats</label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <widgetModes>\n        <mode value=\"any\">#{not empty currentDocumentAsBlobHolder.blob ? 'view' : 'hidden'}</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"summary_picture_actions\" type=\"documentActionsWithForms\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">IMAGE_PROCESSING</property>\n        <property name=\"styleClass\">grayBox pictureActions</property>\n        <property name=\"actionStyleClass\">button</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"useAjaxForm\">true</property>\n        <property name=\"ignoreTemplateProperty\">true</property>\n      </properties>\n      <widgetModes>\n        <mode value=\"any\">#{not empty currentDocumentAsBlobHolder.blob ? 'view' : 'hidden'}</mode>\n      </widgetModes>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.jsf.layouts/Contributions/org.nuxeo.ecm.platform.picture.jsf.layouts--actions",
              "id": "org.nuxeo.ecm.platform.picture.jsf.layouts--actions",
              "registrationOrder": 34,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"summary_picture_view\" order=\"50\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_view</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_picture_actions\" order=\"100\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_actions</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_view\">\n      <filter-id>notHasPicture</filter-id>\n    </action>\n\n    <action id=\"infoViewPictureView\" order=\"100\" type=\"widget\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewPictureView</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_description\">\n      <filter-id>notHasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_states\">\n      <filter-id>notHasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_contributors\">\n      <filter-id>notHasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_picture_info_box\" order=\"100\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_info_box</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_picture_info\" order=\"200\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_info</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_picture_exif\" order=\"220\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_exif</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <!-- deprecated see NXP-16336 -->\n    <action enabled=\"false\" id=\"summary_picture_iptc\" order=\"240\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_iptc</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_picture_additional_formats\" order=\"300\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_additional_formats</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.jsf.layouts/Contributions/org.nuxeo.ecm.platform.picture.jsf.layouts--filters",
              "id": "org.nuxeo.ecm.platform.picture.jsf.layouts--filters",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"notHasPicture\">\n      <rule grant=\"false\">\n        <facet>Picture</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"hasPicture\">\n      <rule grant=\"true\">\n        <facet>Picture</facet>\n      </rule>\n    </filter>\n\n    <filter append=\"true\" id=\"denyInfoViewPreview\">\n      <rule grant=\"false\">\n        <facet>Picture</facet>\n      </rule>\n    </filter>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.jsf.layouts/Contributions/org.nuxeo.ecm.platform.picture.jsf.layouts--layouts",
              "id": "org.nuxeo.ecm.platform.picture.jsf.layouts--layouts",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <!-- deprecated since 5.6 -->\n    <layout name=\"picture_summary_layout\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_summary_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>summary_picture_view</widget>\n          <widget>summary_current_document_files</widget>\n          <widget>summary_current_document_comments</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_description</widget>\n          <widget>summary_current_document_states</widget>\n          <widget>summary_current_document_contributors</widget>\n          <widget>summary_current_document_custom_actions</widget>\n          <widget>summary_current_document_tagging</widget>\n          <widget>summary_current_document_relations</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_publications</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_single_tasks</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"picture\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>imageFile</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"exif_info\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>date_time_original</widget>\n        </row>\n        <row>\n          <widget>pixel_xdimension</widget>\n        </row>\n        <row>\n          <widget>pixel_ydimension</widget>\n        </row>\n        <row>\n          <widget>orientation</widget>\n        </row>\n        <row>\n          <widget>equipment</widget>\n        </row>\n        <row>\n          <widget>fnumber</widget>\n        </row>\n        <row>\n          <widget>exposure_time</widget>\n        </row>\n        <row>\n          <widget>iso_speed_ratings</widget>\n        </row>\n      </rows>\n      <widget name=\"date_time_original\" type=\"datetime\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:date_time_original</field>\n        </fields>\n        <properties widgetMode=\"view\">\n          <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"format\">#{nxu:basicDateFormatter()}</property>\n          <property name=\"styleClass\">dataInputTextDate</property>\n        </properties>\n      </widget>\n      <widget name=\"pixel_xdimension\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:pixel_xdimension</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"pixel_ydimension\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:pixel_ydimension</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"orientation\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:orientation</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"equipment\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:equipment</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"fnumber\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:fnumber</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"exposure_time\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:exposure_time</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"iso_speed_ratings\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:iso_speed_ratings</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"iptc_info\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>object_name</widget>\n        </row>\n        <row>\n          <widget>headline</widget>\n        </row>\n        <row>\n          <widget>keywords</widget>\n        </row>\n        <row>\n          <widget>date_created</widget>\n        </row>\n        <row>\n          <widget>country_or_primary_location</widget>\n        </row>\n        <row>\n          <widget>province_or_state</widget>\n        </row>\n        <row>\n          <widget>city</widget>\n        </row>\n        <row>\n          <widget>caption</widget>\n        </row>\n        <row>\n          <widget>by_line</widget>\n        </row>\n        <row>\n          <widget>by_line_title</widget>\n        </row>\n        <row>\n          <widget>copyright_notice</widget>\n        </row>\n        <row>\n          <widget>credit</widget>\n        </row>\n        <row>\n          <widget>source</widget>\n        </row>\n        <row>\n          <widget>writer</widget>\n        </row>\n      </rows>\n      <widget name=\"caption\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:caption</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"country_or_primary_location\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:country_or_primary_location</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"province_or_state\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:province_or_state</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"city\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:city</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"by_line\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:by_line</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"by_line_title\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:by_line_title</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"copyright_notice\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:copyright_notice</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"credit\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:credit</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"date_created\" type=\"datetime\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:date_created</field>\n        </fields>\n        <properties widgetMode=\"view\">\n          <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"format\">#{nxu:basicDateFormatter()}</property>\n          <property name=\"styleClass\">dataInputTextDate</property>\n        </properties>\n      </widget>\n      <widget name=\"headline\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:headline</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"keywords\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:keywords</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"object_name\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:object_name</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"source\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:source</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"writer\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:writer</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"picture_info\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>picture_info_dimensions</widget>\n        </row>\n        <row>\n          <widget>picture_info_format</widget>\n        </row>\n        <row>\n          <widget>picture_info_colorspace</widget>\n        </row>\n        <row>\n          <widget>picture_info_depth</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.jsf.layouts",
          "name": "org.nuxeo.ecm.platform.picture.jsf.layouts",
          "requirements": [
            "org.nuxeo.ecm.platform.forms.layouts.webapp.summary"
          ],
          "resolutionOrder": 682,
          "services": [],
          "startOrder": 382,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.jsf.layouts\">\n\n  <require>org.nuxeo.ecm.platform.forms.layouts.webapp.summary</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"picture_view\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Picture view</title>\n        <description>\n          <p>\n            The picture_view widget displays the configured View of a document\n            having the Picture facet.\n          </p>\n          <p>\n            It requires the following fields configuration: first field maps\n            the document model.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"picture_view_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>pictureView</widget>\n                </row>\n                <row>\n                  <widget>width</widget>\n                </row>\n                <row>\n                  <widget>height</widget>\n                </row>\n              </rows>\n              <widget name=\"pictureView\" type=\"selectOneListbox\">\n                <labels>\n                  <label mode=\"any\">Picture view</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The name of the picture view, defaults to\n                    'Medium'.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>pictureView</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Medium (default value)\" itemValue=\"Medium\" />\n                  <option itemLabel=\"Small\" itemValue=\"Small\" />\n                  <option itemLabel=\"Thumbnail\" itemValue=\"Thumbnail\" />\n                  <option itemLabel=\"OriginalJpeg\" itemValue=\"OriginalJpeg\" />\n                </selectOptions>\n              </widget>\n              <widget name=\"width\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Width</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The width of the image.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>width</field>\n                </fields>\n              </widget>\n              <widget name=\"height\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Height</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The height of the image.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>height</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/picture_view_widget_template.xhtml</property>\n    </widgetType>\n\n    <widgetType name=\"dimensions\">\n      <configuration>\n        <sinceVersion>7.1</sinceVersion>\n        <title>Dimensions</title>\n        <description>\n          <p>\n            The dimensions widget displays the dimensions of an image as \"{width} x {height}\".\n          </p>\n          <p>\n            The first field maps to the width, the second one to the height.\n          </p>\n        </description>\n        <handlingLabels>false</handlingLabels>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/dimensions_widget_template.xhtml</property>\n    </widgetType>\n\n    <widgetType name=\"picture_additional_formats\">\n      <configuration>\n        <sinceVersion>7.1</sinceVersion>\n        <title>Picture additional formats</title>\n        <description>\n          <p>\n            This widget displays the list of additional\n            formats for the given Picture document.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/picture_additional_formats_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"imageFile\" type=\"image\">\n      <labels>\n        <label mode=\"any\">label.file.content</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>file:content</field>\n        <field>file:content/filename</field>\n      </fields>\n    </widget>\n\n    <widget name=\"summary_picture_view\" type=\"picture_view\" />\n\n    <widget name=\"infoViewPictureView\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewDocContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"pictureView\" type=\"picture_view\" />\n      </subWidgets>\n    </widget>\n\n    <widget name=\"summary_picture_info_box\" type=\"info_box\" />\n\n    <widget name=\"picture_info_dimensions\" type=\"dimensions\">\n      <labels>\n        <label mode=\"any\">label.widget.picture.dimensions</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>picture:info/width</field>\n        <field>picture:info/height</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"picture_info_format\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.picture.format</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>picture:info/format</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"picture_info_colorspace\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.picture.colorSpace</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>picture:info/colorSpace</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"picture_info_depth\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.picture.depth</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>picture:info/depth</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"summary_picture_info\" type=\"container\">\n      <labels>\n        <label mode=\"any\">label.header.picture.info</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <subWidgets>\n        <widget name=\"picture_info\" type=\"layout\">\n          <properties widgetMode=\"any\">\n            <property name=\"name\">picture_info</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"summary_picture_exif\" type=\"container\">\n      <labels>\n        <label mode=\"any\">label.header.info.exif</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <subWidgets>\n        <widget name=\"exif_info\" type=\"layout\">\n          <properties widgetMode=\"any\">\n            <property name=\"name\">exif_info</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"summary_picture_iptc\" type=\"container\">\n      <labels>\n        <label mode=\"any\">label.header.info.iptc</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <subWidgets>\n        <widget name=\"iptc_info\" type=\"layout\">\n          <properties widgetMode=\"any\">\n            <property name=\"name\">iptc_info</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"summary_picture_additional_formats\" type=\"picture_additional_formats\">\n      <labels>\n        <label mode=\"any\">label.header.picture.additional.formats</label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <widgetModes>\n        <mode value=\"any\">#{not empty currentDocumentAsBlobHolder.blob ? 'view' : 'hidden'}</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"summary_picture_actions\" type=\"documentActionsWithForms\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">IMAGE_PROCESSING</property>\n        <property name=\"styleClass\">grayBox pictureActions</property>\n        <property name=\"actionStyleClass\">button</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"useAjaxForm\">true</property>\n        <property name=\"ignoreTemplateProperty\">true</property>\n      </properties>\n      <widgetModes>\n        <mode value=\"any\">#{not empty currentDocumentAsBlobHolder.blob ? 'view' : 'hidden'}</mode>\n      </widgetModes>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"summary_picture_view\" type=\"widget\" order=\"50\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_view</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_picture_actions\" type=\"widget\" order=\"100\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_actions</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_view\">\n      <filter-id>notHasPicture</filter-id>\n    </action>\n\n    <action id=\"infoViewPictureView\" type=\"widget\" order=\"100\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewPictureView</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_description\">\n      <filter-id>notHasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_states\">\n      <filter-id>notHasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_contributors\">\n      <filter-id>notHasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_picture_info_box\" type=\"widget\" order=\"100\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_info_box</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_picture_info\" type=\"widget\" order=\"200\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_info</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_picture_exif\" type=\"widget\" order=\"220\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_exif</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <!-- deprecated see NXP-16336 -->\n    <action id=\"summary_picture_iptc\" type=\"widget\" order=\"240\" enabled=\"false\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_iptc</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n    <action id=\"summary_picture_additional_formats\" type=\"widget\" order=\"300\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_picture_additional_formats</property>\n      </properties>\n      <filter-id>hasPicture</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"notHasPicture\">\n      <rule grant=\"false\">\n        <facet>Picture</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"hasPicture\">\n      <rule grant=\"true\">\n        <facet>Picture</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"denyInfoViewPreview\" append=\"true\">\n      <rule grant=\"false\">\n        <facet>Picture</facet>\n      </rule>\n    </filter>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <!-- deprecated since 5.6 -->\n    <layout name=\"picture_summary_layout\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_summary_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>summary_picture_view</widget>\n          <widget>summary_current_document_files</widget>\n          <widget>summary_current_document_comments</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_description</widget>\n          <widget>summary_current_document_states</widget>\n          <widget>summary_current_document_contributors</widget>\n          <widget>summary_current_document_custom_actions</widget>\n          <widget>summary_current_document_tagging</widget>\n          <widget>summary_current_document_relations</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_publications</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_single_tasks</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"picture\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>imageFile</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"exif_info\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>date_time_original</widget>\n        </row>\n        <row>\n          <widget>pixel_xdimension</widget>\n        </row>\n        <row>\n          <widget>pixel_ydimension</widget>\n        </row>\n        <row>\n          <widget>orientation</widget>\n        </row>\n        <row>\n          <widget>equipment</widget>\n        </row>\n        <row>\n          <widget>fnumber</widget>\n        </row>\n        <row>\n          <widget>exposure_time</widget>\n        </row>\n        <row>\n          <widget>iso_speed_ratings</widget>\n        </row>\n      </rows>\n      <widget name=\"date_time_original\" type=\"datetime\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:date_time_original</field>\n        </fields>\n        <properties widgetMode=\"view\">\n          <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"format\">#{nxu:basicDateFormatter()}</property>\n          <property name=\"styleClass\">dataInputTextDate</property>\n        </properties>\n      </widget>\n      <widget name=\"pixel_xdimension\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:pixel_xdimension</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"pixel_ydimension\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:pixel_ydimension</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"orientation\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:orientation</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"equipment\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:equipment</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"fnumber\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:fnumber</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"exposure_time\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:exposure_time</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"iso_speed_ratings\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>imd:iso_speed_ratings</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"iptc_info\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>object_name</widget>\n        </row>\n        <row>\n          <widget>headline</widget>\n        </row>\n        <row>\n          <widget>keywords</widget>\n        </row>\n        <row>\n          <widget>date_created</widget>\n        </row>\n        <row>\n          <widget>country_or_primary_location</widget>\n        </row>\n        <row>\n          <widget>province_or_state</widget>\n        </row>\n        <row>\n          <widget>city</widget>\n        </row>\n        <row>\n          <widget>caption</widget>\n        </row>\n        <row>\n          <widget>by_line</widget>\n        </row>\n        <row>\n          <widget>by_line_title</widget>\n        </row>\n        <row>\n          <widget>copyright_notice</widget>\n        </row>\n        <row>\n          <widget>credit</widget>\n        </row>\n        <row>\n          <widget>source</widget>\n        </row>\n        <row>\n          <widget>writer</widget>\n        </row>\n      </rows>\n      <widget name=\"caption\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:caption</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"country_or_primary_location\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:country_or_primary_location</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"province_or_state\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:province_or_state</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"city\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:city</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"by_line\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:by_line</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"by_line_title\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:by_line_title</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"copyright_notice\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:copyright_notice</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"credit\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:credit</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"date_created\" type=\"datetime\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:date_created</field>\n        </fields>\n        <properties widgetMode=\"view\">\n          <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"format\">#{nxu:basicDateFormatter()}</property>\n          <property name=\"styleClass\">dataInputTextDate</property>\n        </properties>\n      </widget>\n      <widget name=\"headline\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:headline</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"keywords\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:keywords</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"object_name\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:object_name</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"source\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:source</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n      <widget name=\"writer\" type=\"text\">\n        <translated>true</translated>\n        <fields>\n          <field>iptc:writer</field>\n        </fields>\n        <properties widgetMode=\"edit\">\n          <property name=\"styleClass\">dataInputText</property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"picture_info\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>picture_info_dimensions</widget>\n        </row>\n        <row>\n          <widget>picture_info_format</widget>\n        </row>\n        <row>\n          <widget>picture_info_colorspace</widget>\n        </row>\n        <row>\n          <widget>picture_info_depth</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/imaging-layouts-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--MimeTypePreviewer",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.preview.jsf.adapter.contrib/Contributions/org.nuxeo.ecm.platform.picture.preview.jsf.adapter.contrib--MimeTypePreviewer",
              "id": "org.nuxeo.ecm.platform.picture.preview.jsf.adapter.contrib--MimeTypePreviewer",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "name": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"MimeTypePreviewer\" target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\">\n    <previewer class=\"org.nuxeo.ecm.platform.picture.preview.adapter.PicturePreviewer\">\n      <pattern>image.*</pattern>\n    </previewer>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf/org.nuxeo.ecm.platform.picture.preview.jsf.adapter.contrib",
          "name": "org.nuxeo.ecm.platform.picture.preview.jsf.adapter.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.preview.jsf.adapter.contrib"
          ],
          "resolutionOrder": 709,
          "services": [],
          "startOrder": 387,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.picture.preview.jsf.adapter.contrib\">\n\n  <require>org.nuxeo.ecm.platform.preview.jsf.adapter.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\"\n    point=\"MimeTypePreviewer\">\n    <previewer class=\"org.nuxeo.ecm.platform.picture.preview.adapter.PicturePreviewer\">\n      <pattern>image.*</pattern>\n    </previewer>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/preview-adapter-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-imaging-jsf-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.jsf",
      "id": "org.nuxeo.ecm.platform.picture.jsf",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Picture Imaging DM\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.picture.jsf;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: web,stateless\r\nNuxeo-Component: OSGI-INF/imaging-layouts-contrib.xml,OSGI-INF/imaging-c\r\n odec-contrib.xml,OSGI-INF/actions-contrib.xml,OSGI-INF/imaging-urlservi\r\n ce-contrib.xml,OSGI-INF/theme-contrib.xml,OSGI-INF/preview-adapter-cont\r\n rib.xml\r\nEclipse-LazyStart: true\r\nRequire-Bundle: org.nuxeo.ecm.platform.types.api,org.nuxeo.ecm.webapp.ba\r\n se,org.nuxeo.ecm.platform.search.api,org.nuxeo.ecm.platform.web.common,\r\n org.nuxeo.ecm.platform.url.core\r\n\r\n",
      "maxResolutionOrder": 709,
      "minResolutionOrder": 397,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.types.api",
        "org.nuxeo.ecm.webapp.base",
        "org.nuxeo.ecm.platform.search.api",
        "org.nuxeo.ecm.platform.web.common",
        "org.nuxeo.ecm.platform.url.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-rendition-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.rendition.api",
          "org.nuxeo.ecm.platform.rendition.core",
          "org.nuxeo.ecm.platform.rendition.publisher",
          "org.nuxeo.ecm.platform.rendition.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition",
        "id": "grp:org.nuxeo.ecm.platform.rendition",
        "name": "org.nuxeo.ecm.platform.rendition",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.rendition.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.schemas/Contributions/org.nuxeo.ecm.platform.rendition.schemas--schema",
              "id": "org.nuxeo.ecm.platform.rendition.schemas--schema",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"rendition\" prefix=\"rend\" src=\"schemas/rendition.xsd\"/>\n\n    <property indexOrder=\"ascending\" name=\"renditionName\" schema=\"rendition\"/>\n    <property indexOrder=\"ascending\" name=\"sourceId\" schema=\"rendition\"/>\n    <property indexOrder=\"ascending\" name=\"sourceVersionableId\" schema=\"rendition\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.schemas/Contributions/org.nuxeo.ecm.platform.rendition.schemas--doctype",
              "id": "org.nuxeo.ecm.platform.rendition.schemas--doctype",
              "registrationOrder": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"Rendition\">\n      <schema name=\"rendition\"/>\n    </facet>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.schemas",
          "name": "org.nuxeo.ecm.platform.rendition.schemas",
          "requirements": [],
          "resolutionOrder": 474,
          "services": [],
          "startOrder": 431,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.rendition.schemas\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"schema\">\n    <schema name=\"rendition\" prefix=\"rend\" src=\"schemas/rendition.xsd\" />\n\n    <property schema=\"rendition\" name=\"renditionName\" indexOrder=\"ascending\" />\n    <property schema=\"rendition\" name=\"sourceId\" indexOrder=\"ascending\" />\n    <property schema=\"rendition\" name=\"sourceVersionableId\" indexOrder=\"ascending\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n\n    <facet name=\"Rendition\">\n      <schema name=\"rendition\" />\n    </facet>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendition-schemas-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.rendition.service.RenditionServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The Rendition Service handles the registered rendition definitions and\n    the rendering of a document based on a rendition definition.\n    It provides an extension point to register rendition definitions.\n\n    @author Thomas Roger (troger@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe Rendition Service handles the registered rendition definitions and\nthe rendering of a document based on a rendition definition.\nIt provides an extension point to register rendition definitions.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
              "descriptors": [
                "org.nuxeo.ecm.platform.rendition.service.RenditionDefinition"
              ],
              "documentation": "\n      Extension point to register rendition definitions.\n      For instance, here is one defining a PDF rendition.\n      <code>\n    <renditionDefinition enabled=\"true\" name=\"pdf\">\n        <label>label.rendition.pdf</label>\n        <operationChain>blobToPDF</operationChain>\n    </renditionDefinition>\n</code>\n\n\n      Since 6.0:\n      <ul>\n    <li> a new allowEmptyBlob tag has been added. Setting it's value to true will allow the rendition to be available even if the target Document does not contains a Blob.</li>\n    <li> a new visible attribute has been added. Setting it's value to false will allow the rendition to be hidden from the UI services.</li>\n</ul>\n",
              "documentationHtml": "<p>\nExtension point to register rendition definitions.\nFor instance, here is one defining a PDF rendition.\n</p><p></p><pre><code>    &lt;renditionDefinition enabled&#61;&#34;true&#34; name&#61;&#34;pdf&#34;&gt;\n        &lt;label&gt;label.rendition.pdf&lt;/label&gt;\n        &lt;operationChain&gt;blobToPDF&lt;/operationChain&gt;\n    &lt;/renditionDefinition&gt;\n</code></pre><p>\nSince 6.0:\n</p><ul><li> a new allowEmptyBlob tag has been added. Setting it&#39;s value to true will allow the rendition to be available even if the target Document does not contains a Blob.</li><li> a new visible attribute has been added. Setting it&#39;s value to false will allow the rendition to be hidden from the UI services.</li></ul>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.service.RenditionService/ExtensionPoints/org.nuxeo.ecm.platform.rendition.service.RenditionService--renditionDefinitions",
              "id": "org.nuxeo.ecm.platform.rendition.service.RenditionService--renditionDefinitions",
              "label": "renditionDefinitions (org.nuxeo.ecm.platform.rendition.service.RenditionService)",
              "name": "renditionDefinitions",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
              "descriptors": [
                "org.nuxeo.ecm.platform.rendition.service.RenditionDefinitionProviderDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.service.RenditionService/ExtensionPoints/org.nuxeo.ecm.platform.rendition.service.RenditionService--renditionDefinitionProviders",
              "id": "org.nuxeo.ecm.platform.rendition.service.RenditionService--renditionDefinitionProviders",
              "label": "renditionDefinitionProviders (org.nuxeo.ecm.platform.rendition.service.RenditionService)",
              "name": "renditionDefinitionProviders",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
              "descriptors": [
                "org.nuxeo.ecm.platform.rendition.service.StoredRenditionManagerDescriptor"
              ],
              "documentation": "\n      Extension point to register a StoredRenditionManager which overrides the DefaultStoredRenditionManager.\n    \n",
              "documentationHtml": "<p>\nExtension point to register a StoredRenditionManager which overrides the DefaultStoredRenditionManager.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.service.RenditionService/ExtensionPoints/org.nuxeo.ecm.platform.rendition.service.RenditionService--storedRenditionManagers",
              "id": "org.nuxeo.ecm.platform.rendition.service.RenditionService--storedRenditionManagers",
              "label": "storedRenditionManagers (org.nuxeo.ecm.platform.rendition.service.RenditionService)",
              "name": "storedRenditionManagers",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
              "descriptors": [
                "org.nuxeo.ecm.platform.rendition.service.DefaultRenditionDescriptor"
              ],
              "documentation": "\n      Defines the default rendition of a given document. Contributions are of the form:\n      <code>\n    <defaultRendition reason=\"download\">\n        <script language=\"JavaScript\">\n            function run() {\n              if (CurrentUser.getName() != \"bob\") {\n                return null;\n              }\n              if (!CurrentUser.getGroups().contains(\"members\")) {\n                return 'aRenditionName`;\n              }\n              if (Document.getPropertyValue(\"dc:format\") != \"pdf\") {\n                return 'pdfRendition';\n              }\n              return 'aDefaultRendition';\n          </script>\n    </defaultRendition>\n</code>\n\n      The language can be any JVM scripting language, the default is \"JavaScript\".\n\n      The reason is optional:\n       - \"download\" will be used in the context of bulk download.\n       - \"publish\" will be used to publish the default rendition.\n\n      The script must define a \"run()\" function that returns a string which is the name of the rendition to be used.\n      The method will get called with the following global context (some values may be null):\n      Document (DocumentModel) CurrentUser (NuxeoPrincipal), Infos (Map).\n    \n",
              "documentationHtml": "<p>\nDefines the default rendition of a given document. Contributions are of the form:\n</p><p></p><pre><code>    &lt;defaultRendition reason&#61;&#34;download&#34;&gt;\n        &lt;script language&#61;&#34;JavaScript&#34;&gt;\n            function run() {\n              if (CurrentUser.getName() !&#61; &#34;bob&#34;) {\n                return null;\n              }\n              if (!CurrentUser.getGroups().contains(&#34;members&#34;)) {\n                return &#39;aRenditionName&#96;;\n              }\n              if (Document.getPropertyValue(&#34;dc:format&#34;) !&#61; &#34;pdf&#34;) {\n                return &#39;pdfRendition&#39;;\n              }\n              return &#39;aDefaultRendition&#39;;\n          &lt;/script&gt;\n    &lt;/defaultRendition&gt;\n</code></pre><p>\nThe language can be any JVM scripting language, the default is &#34;JavaScript&#34;.\n</p><p>\nThe reason is optional:\n- &#34;download&#34; will be used in the context of bulk download.\n- &#34;publish&#34; will be used to publish the default rendition.\n</p><p>\nThe script must define a &#34;run()&#34; function that returns a string which is the name of the rendition to be used.\nThe method will get called with the following global context (some values may be null):\nDocument (DocumentModel) CurrentUser (NuxeoPrincipal), Infos (Map).\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.service.RenditionService/ExtensionPoints/org.nuxeo.ecm.platform.rendition.service.RenditionService--defaultRendition",
              "id": "org.nuxeo.ecm.platform.rendition.service.RenditionService--defaultRendition",
              "label": "defaultRendition (org.nuxeo.ecm.platform.rendition.service.RenditionService)",
              "name": "defaultRendition",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent--store",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.service.RenditionService/Contributions/org.nuxeo.ecm.platform.rendition.service.RenditionService--store",
              "id": "org.nuxeo.ecm.platform.rendition.service.RenditionService--store",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "name": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"store\" target=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\">\n    <!-- Explicit declaration based on default configuration to enforce GC -->\n    <store name=\"LazyRenditionCache\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.service.RenditionService",
          "name": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
          "requirements": [],
          "resolutionOrder": 475,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.service.RenditionService/Services/org.nuxeo.ecm.platform.rendition.service.RenditionService",
              "id": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 869,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\">\n\n  <documentation>\n    The Rendition Service handles the registered rendition definitions and\n    the rendering of a document based on a rendition definition.\n    It provides an extension point to register rendition definitions.\n\n    @author Thomas Roger (troger@nuxeo.com)\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.rendition.service.RenditionServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\" />\n  </service>\n\n  <extension-point name=\"renditionDefinitions\">\n    <documentation>\n      Extension point to register rendition definitions.\n      For instance, here is one defining a PDF rendition.\n      <code>\n        <renditionDefinition name=\"pdf\" enabled=\"true\">\n          <label>label.rendition.pdf</label>\n          <operationChain>blobToPDF</operationChain>\n        </renditionDefinition>\n      </code>\n\n      Since 6.0:\n      <ul>\n         <li> a new allowEmptyBlob tag has been added. Setting it's value to true will allow the rendition to be available even if the target Document does not contains a Blob.</li>\n         <li> a new visible attribute has been added. Setting it's value to false will allow the rendition to be hidden from the UI services.</li>\n      </ul>\n\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.rendition.service.RenditionDefinition\" />\n  </extension-point>\n\n  <extension-point name=\"renditionDefinitionProviders\">\n    <documentation>\n\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.rendition.service.RenditionDefinitionProviderDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"storedRenditionManagers\">\n    <documentation>\n      Extension point to register a StoredRenditionManager which overrides the DefaultStoredRenditionManager.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.rendition.service.StoredRenditionManagerDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"defaultRendition\">\n    <documentation>\n      Defines the default rendition of a given document. Contributions are of the form:\n      <code>\n        <defaultRendition reason=\"download\">\n          <script language=\"JavaScript\">\n            function run() {\n              if (CurrentUser.getName() != \"bob\") {\n                return null;\n              }\n              if (!CurrentUser.getGroups().contains(\"members\")) {\n                return 'aRenditionName`;\n              }\n              if (Document.getPropertyValue(\"dc:format\") != \"pdf\") {\n                return 'pdfRendition';\n              }\n              return 'aDefaultRendition';\n          </script>\n        </defaultRendition>\n      </code>\n      The language can be any JVM scripting language, the default is \"JavaScript\".\n\n      The reason is optional:\n       - \"download\" will be used in the context of bulk download.\n       - \"publish\" will be used to publish the default rendition.\n\n      The script must define a \"run()\" function that returns a string which is the name of the rendition to be used.\n      The method will get called with the following global context (some values may be null):\n      Document (DocumentModel) CurrentUser (NuxeoPrincipal), Infos (Map).\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.rendition.service.DefaultRenditionDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\" point=\"store\">\n    <!-- Explicit declaration based on default configuration to enforce GC -->\n    <store name=\"LazyRenditionCache\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendition-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.rendition.service.RenditionService--defaultRendition",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.download.contrib/Contributions/org.nuxeo.ecm.platform.rendition.download.contrib--defaultRendition",
              "id": "org.nuxeo.ecm.platform.rendition.download.contrib--defaultRendition",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "name": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"defaultRendition\" target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\">\n    <defaultRendition reason=\"download\">\n      <script language=\"JavaScript\">\n        function run() {\n          if (Document.getFacets().contains(\"Collection\")) {\n            return 'containerDefaultRendition';\n          } else if (Document.getFacets().contains(\"Folderish\")) {\n            return 'containerDefaultRendition';\n          } else if (Document.hasSchema(\"file\")) {\n            return 'mainBlob';\n          } else if (Document.getType() == 'Note') {\n            return 'pdf';\n          } else {\n            return 'xmlExport';\n          }\n        }\n      </script>\n    </defaultRendition>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.download.contrib",
          "name": "org.nuxeo.ecm.platform.rendition.download.contrib",
          "requirements": [],
          "resolutionOrder": 477,
          "services": [],
          "startOrder": 424,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.rendition.download.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\"\n    point=\"defaultRendition\">\n    <defaultRendition reason=\"download\">\n      <script language=\"JavaScript\">\n        function run() {\n          if (Document.getFacets().contains(\"Collection\")) {\n            return 'containerDefaultRendition';\n          } else if (Document.getFacets().contains(\"Folderish\")) {\n            return 'containerDefaultRendition';\n          } else if (Document.hasSchema(\"file\")) {\n            return 'mainBlob';\n          } else if (Document.getType() == 'Note') {\n            return 'pdf';\n          } else {\n            return 'xmlExport';\n          }\n        }\n      </script>\n    </defaultRendition>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendition-download-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Adapters contribution for Renderable documents.\n  \n",
          "documentationHtml": "<p>\nAdapters contribution for Renderable documents.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.adapters/Contributions/org.nuxeo.ecm.platform.rendition.adapters--adapters",
              "id": "org.nuxeo.ecm.platform.rendition.adapters--adapters",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.platform.rendition.Renderable\" factory=\"org.nuxeo.ecm.platform.rendition.adapter.RenderableAdapterFactory\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent--BlobHolderFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.adapters/Contributions/org.nuxeo.ecm.platform.rendition.adapters--BlobHolderFactory",
              "id": "org.nuxeo.ecm.platform.rendition.adapters--BlobHolderFactory",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
                "name": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"BlobHolderFactory\" target=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent\">\n    <blobHolderFactory class=\"org.nuxeo.ecm.platform.rendition.adapter.DownloadBlobHolderFactory\" name=\"download\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.adapters",
          "name": "org.nuxeo.ecm.platform.rendition.adapters",
          "requirements": [],
          "resolutionOrder": 478,
          "services": [],
          "startOrder": 421,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.rendition.adapters\">\n  <documentation>\n    Adapters contribution for Renderable documents.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\" point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.platform.rendition.Renderable\"\n      factory=\"org.nuxeo.ecm.platform.rendition.adapter.RenderableAdapterFactory\" />\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent\"\n    point=\"BlobHolderFactory\">\n    <blobHolderFactory name=\"download\"\n                       class=\"org.nuxeo.ecm.platform.rendition.adapter.DownloadBlobHolderFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendition-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.operations/Contributions/org.nuxeo.ecm.platform.rendition.operations--operations",
              "id": "org.nuxeo.ecm.platform.rendition.operations--operations",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <operation class=\"org.nuxeo.ecm.platform.rendition.operation.GetRendition\"/>\n    <operation class=\"org.nuxeo.ecm.platform.rendition.operation.GetContainerRendition\"/>\n    <operation class=\"org.nuxeo.ecm.platform.rendition.operation.PublishRendition\" replace=\"true\"/>\n    <operation class=\"org.nuxeo.ecm.platform.rendition.operation.UnpublishAll\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.operations",
          "name": "org.nuxeo.ecm.platform.rendition.operations",
          "requirements": [],
          "resolutionOrder": 479,
          "services": [],
          "startOrder": 426,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.rendition.operations\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n\n    <operation class=\"org.nuxeo.ecm.platform.rendition.operation.GetRendition\" />\n    <operation class=\"org.nuxeo.ecm.platform.rendition.operation.GetContainerRendition\" />\n    <operation class=\"org.nuxeo.ecm.platform.rendition.operation.PublishRendition\"  replace=\"true\"/>\n    <operation class=\"org.nuxeo.ecm.platform.rendition.operation.UnpublishAll\"/>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendition-operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.rendition.service.RenditionService--renditionDefinitions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.contrib/Contributions/org.nuxeo.ecm.platform.rendition.contrib--renditionDefinitions",
              "id": "org.nuxeo.ecm.platform.rendition.contrib--renditionDefinitions",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "name": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"renditionDefinitions\" target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\">\n    <renditionDefinition class=\"org.nuxeo.ecm.platform.rendition.extension.PdfAutomationRenditionProvider\" name=\"pdf\">\n      <label>label.rendition.pdf</label>\n      <icon>/icons/pdf.png</icon>\n      <contentType>application/pdf</contentType>\n      <operationChain>blobToPDF</operationChain>\n      <filters>\n        <filter-id>allowPDFRendition</filter-id>\n      </filters>\n    </renditionDefinition>\n\n    <renditionDefinition name=\"xmlExport\">\n      <label>label.exportview.xmlExport</label>\n      <icon>/icons/xml.png</icon>\n      <contentType>text/xml</contentType>\n      <allowEmptyBlob>true</allowEmptyBlob>\n      <operationChain>xmlExportRendition</operationChain>\n    </renditionDefinition>\n\n    <renditionDefinition name=\"zipExport\">\n      <label>label.exportview.zipExport</label>\n      <icon>/icons/zip_export.png</icon>\n      <contentType>application/zip</contentType>\n      <allowEmptyBlob>true</allowEmptyBlob>\n      <operationChain>zipTreeExportRendition</operationChain>\n      <filters>\n        <filter-id>not_folder</filter-id>\n      </filters>\n    </renditionDefinition>\n\n    <renditionDefinition name=\"zipTreeExport\">\n      <label>label.exportview.zipTreeExport</label>\n      <icon>/icons/zip_tree_export.png</icon>\n      <contentType>application/zip</contentType>\n      <allowEmptyBlob>true</allowEmptyBlob>\n      <operationChain>zipTreeExportRendition</operationChain>\n      <variantPolicy>user</variantPolicy>\n      <filters>\n        <filter-id>folder</filter-id>\n      </filters>\n    </renditionDefinition>\n\n    <renditionDefinition name=\"mainBlob\" visible=\"false\">\n      <operationChain>mainBlob</operationChain>\n      <allowEmptyBlob>true</allowEmptyBlob>\n      <contentType/>\n    </renditionDefinition>\n\n    <renditionDefinition name=\"containerDefaultRendition\" visible=\"false\">\n      <contentType>application/zip</contentType>\n      <operationChain>containerContentBlob</operationChain>\n      <allowEmptyBlob>true</allowEmptyBlob>\n      <filters>\n        <filter-id>container</filter-id>\n      </filters>\n    </renditionDefinition>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--chains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.contrib/Contributions/org.nuxeo.ecm.platform.rendition.contrib--chains",
              "id": "org.nuxeo.ecm.platform.rendition.contrib--chains",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <chain id=\"blobToPDF\">\n      <operation id=\"Context.PopBlob\"/>\n      <operation id=\"Blob.ToPDF\"/>\n    </chain>\n\n    <chain id=\"xmlExportRendition\">\n      <operation id=\"Context.PopDocument\"/>\n      <operation id=\"Document.Export\"/>\n    </chain>\n\n    <chain id=\"zipTreeExportRendition\">\n      <operation id=\"Context.PopDocument\"/>\n      <operation id=\"Document.Export\">\n        <param name=\"exportAsTree\" type=\"boolean\">true</param>\n      </operation>\n    </chain>\n\n    <chain id=\"mainBlob\">\n      <operation id=\"Context.PopDocument\"/>\n      <operation id=\"Document.GetBlob\"/>\n    </chain>\n\n    <chain id=\"containerContentBlob\">\n      <operation id=\"Context.PopDocument\"/>\n      <operation id=\"Document.GetContainerRendition\">\n        <param name=\"reason\" type=\"string\">download</param>\n        <param name=\"limit\" type=\"int\">200</param>\n        <param name=\"maxDepth\" type=\"int\">2</param>\n      </operation>\n    </chain>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.contrib/Contributions/org.nuxeo.ecm.platform.rendition.contrib--filters",
              "id": "org.nuxeo.ecm.platform.rendition.contrib--filters",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"allowPDFRendition\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.rendition.service.RenditionService--defaultRendition",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.contrib/Contributions/org.nuxeo.ecm.platform.rendition.contrib--defaultRendition",
              "id": "org.nuxeo.ecm.platform.rendition.contrib--defaultRendition",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "name": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"defaultRendition\" target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\">\n    <defaultRendition>\n      <script language=\"JavaScript\">\n        function run() {\n          return 'xmlExport';\n        }\n      </script>\n    </defaultRendition>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.contrib",
          "name": "org.nuxeo.ecm.platform.rendition.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.rendition.operations"
          ],
          "resolutionOrder": 480,
          "services": [],
          "startOrder": 423,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.rendition.contrib\">\n\n  <require>org.nuxeo.ecm.platform.rendition.operations</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\"\n    point=\"renditionDefinitions\">\n    <renditionDefinition name=\"pdf\"\n      class=\"org.nuxeo.ecm.platform.rendition.extension.PdfAutomationRenditionProvider\">\n      <label>label.rendition.pdf</label>\n      <icon>/icons/pdf.png</icon>\n      <contentType>application/pdf</contentType>\n      <operationChain>blobToPDF</operationChain>\n      <filters>\n        <filter-id>allowPDFRendition</filter-id>\n      </filters>\n    </renditionDefinition>\n\n    <renditionDefinition name=\"xmlExport\">\n      <label>label.exportview.xmlExport</label>\n      <icon>/icons/xml.png</icon>\n      <contentType>text/xml</contentType>\n      <allowEmptyBlob>true</allowEmptyBlob>\n      <operationChain>xmlExportRendition</operationChain>\n    </renditionDefinition>\n\n    <renditionDefinition name=\"zipExport\">\n      <label>label.exportview.zipExport</label>\n      <icon>/icons/zip_export.png</icon>\n      <contentType>application/zip</contentType>\n      <allowEmptyBlob>true</allowEmptyBlob>\n      <operationChain>zipTreeExportRendition</operationChain>\n      <filters>\n        <filter-id>not_folder</filter-id>\n      </filters>\n    </renditionDefinition>\n\n    <renditionDefinition name=\"zipTreeExport\">\n      <label>label.exportview.zipTreeExport</label>\n      <icon>/icons/zip_tree_export.png</icon>\n      <contentType>application/zip</contentType>\n      <allowEmptyBlob>true</allowEmptyBlob>\n      <operationChain>zipTreeExportRendition</operationChain>\n      <variantPolicy>user</variantPolicy>\n      <filters>\n        <filter-id>folder</filter-id>\n      </filters>\n    </renditionDefinition>\n\n    <renditionDefinition name=\"mainBlob\" visible=\"false\">\n      <operationChain>mainBlob</operationChain>\n      <allowEmptyBlob>true</allowEmptyBlob>\n      <contentType></contentType>\n    </renditionDefinition>\n\n    <renditionDefinition name=\"containerDefaultRendition\" visible=\"false\">\n      <contentType>application/zip</contentType>\n      <operationChain>containerContentBlob</operationChain>\n      <allowEmptyBlob>true</allowEmptyBlob>\n      <filters>\n        <filter-id>container</filter-id>\n      </filters>\n    </renditionDefinition>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"chains\">\n    <chain id=\"blobToPDF\">\n      <operation id=\"Context.PopBlob\" />\n      <operation id=\"Blob.ToPDF\" />\n    </chain>\n\n    <chain id=\"xmlExportRendition\">\n      <operation id=\"Context.PopDocument\" />\n      <operation id=\"Document.Export\" />\n    </chain>\n\n    <chain id=\"zipTreeExportRendition\">\n      <operation id=\"Context.PopDocument\" />\n      <operation id=\"Document.Export\">\n        <param name=\"exportAsTree\" type=\"boolean\">true</param>\n      </operation>\n    </chain>\n\n    <chain id=\"mainBlob\">\n      <operation id=\"Context.PopDocument\" />\n      <operation id=\"Document.GetBlob\" />\n    </chain>\n\n    <chain id=\"containerContentBlob\">\n      <operation id=\"Context.PopDocument\" />\n      <operation id=\"Document.GetContainerRendition\">\n        <param type=\"string\" name=\"reason\">download</param>\n        <param type=\"int\" name=\"limit\">200</param>\n        <param type=\"int\" name=\"maxDepth\">2</param>\n      </operation>\n    </chain>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"allowPDFRendition\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\"\n    point=\"defaultRendition\">\n    <defaultRendition>\n      <script language=\"JavaScript\">\n        function run() {\n          return 'xmlExport';\n        }\n      </script>\n    </defaultRendition>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendition-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.rendition.service.RenditionService--defaultRendition",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.publish.contrib/Contributions/org.nuxeo.ecm.platform.rendition.publish.contrib--defaultRendition",
              "id": "org.nuxeo.ecm.platform.rendition.publish.contrib--defaultRendition",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "name": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"defaultRendition\" target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\">\n    <defaultRendition reason=\"publish\">\n      <script language=\"JavaScript\">\n        function run() {\n          if (Document.getType() == \"File\" || Document.getType() == \"Note\") {\n            return 'pdf';\n          } else if (Document.hasSchema(\"file\")) {\n            return 'mainBlob';\n          }\n          return null;\n        }\n      </script>\n    </defaultRendition>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.publish.contrib",
          "name": "org.nuxeo.ecm.platform.rendition.publish.contrib",
          "requirements": [],
          "resolutionOrder": 484,
          "services": [],
          "startOrder": 427,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.rendition.publish.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\"\n    point=\"defaultRendition\">\n    <defaultRendition reason=\"publish\">\n      <script language=\"JavaScript\">\n        function run() {\n          if (Document.getType() == \"File\" || Document.getType() == \"Note\") {\n            return 'pdf';\n          } else if (Document.hasSchema(\"file\")) {\n            return 'mainBlob';\n          }\n          return null;\n        }\n      </script>\n    </defaultRendition>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendition-publish-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.marshallers/Contributions/org.nuxeo.ecm.platform.rendition.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.rendition.marshallers--marshallers",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.platform.rendition.io.RenditionJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.rendition.io.PublicationJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.marshallers",
          "name": "org.nuxeo.ecm.platform.rendition.marshallers",
          "requirements": [],
          "resolutionOrder": 485,
          "services": [],
          "startOrder": 425,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.rendition.marshallers\">\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.platform.rendition.io.RenditionJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.rendition.io.PublicationJsonEnricher\" enable=\"true\"/>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scheduler.SchedulerService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.scheduler/Contributions/org.nuxeo.ecm.platform.rendition.scheduler--schedule",
              "id": "org.nuxeo.ecm.platform.rendition.scheduler--schedule",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scheduler.SchedulerService",
                "name": "org.nuxeo.ecm.core.scheduler.SchedulerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\">\n    <schedule id=\"storedRenditionsCleanup\">\n      <event>storedRenditionsCleanup</event>\n      <!-- every day at 11.59 PM -->\n      <cronExpression>0 59 23 * * ?</cronExpression>\n    </schedule>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.scheduler/Contributions/org.nuxeo.ecm.platform.rendition.scheduler--listener",
              "id": "org.nuxeo.ecm.platform.rendition.scheduler--listener",
              "registrationOrder": 34,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.rendition.listener.StoredRenditionsCleanupListener\" name=\"storedRenditionsCleanup\" postCommit=\"true\">\n      <event>storedRenditionsCleanup</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.scheduler",
          "name": "org.nuxeo.ecm.platform.rendition.scheduler",
          "requirements": [],
          "resolutionOrder": 486,
          "services": [],
          "startOrder": 430,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.rendition.scheduler\">\n\n  <extension target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\"\n    point=\"schedule\">\n    <schedule id=\"storedRenditionsCleanup\">\n      <event>storedRenditionsCleanup</event>\n      <!-- every day at 11.59 PM -->\n      <cronExpression>0 59 23 * * ?</cronExpression>\n    </schedule>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"storedRenditionsCleanup\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.platform.rendition.listener.StoredRenditionsCleanupListener\">\n      <event>storedRenditionsCleanup</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendition-scheduler-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.workmanager/Contributions/org.nuxeo.ecm.platform.rendition.workmanager--queues",
              "id": "org.nuxeo.ecm.platform.rendition.workmanager--queues",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"renditionBuilder\">\n      <maxThreads>2</maxThreads>\n      <category>renditionBuilder</category>\n    </queue>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent--store",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.workmanager/Contributions/org.nuxeo.ecm.platform.rendition.workmanager--store",
              "id": "org.nuxeo.ecm.platform.rendition.workmanager--store",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "name": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"store\" target=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\">\n    <store name=\"RenditionCache\">\n      <firstLevelTTL>240</firstLevelTTL>\n      <secondLevelTTL>10</secondLevelTTL>\n    </store>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core/org.nuxeo.ecm.platform.rendition.workmanager",
          "name": "org.nuxeo.ecm.platform.rendition.workmanager",
          "requirements": [],
          "resolutionOrder": 487,
          "services": [],
          "startOrder": 438,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.rendition.workmanager\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"renditionBuilder\">\n      <maxThreads>${nuxeo.work.queue.renditionBuilder.threads:=2}</maxThreads>\n      <category>renditionBuilder</category>\n    </queue>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\" point=\"store\">\n    <store name=\"RenditionCache\">\n      <firstLevelTTL>${nuxeo.transientstore.rendition.cache.ttl:=240}</firstLevelTTL>\n      <secondLevelTTL>${nuxeo.transientstore.rendition.cache.ttl2:=10}</secondLevelTTL>\n    </store>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendition-workmanager-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-rendition-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.core",
      "id": "org.nuxeo.ecm.platform.rendition.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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Platform Rendition Core\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.rendition.core;singleton:=tr\r\n ue\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/rendition-schemas-contrib.xml,OSGI-INF/renditi\r\n on-service.xml,OSGI-INF/rendition-contrib.xml,OSGI-INF/rendition-downlo\r\n ad-contrib.xml,OSGI-INF/rendition-adapter-contrib.xml,OSGI-INF/renditio\r\n n-operations-contrib.xml,OSGI-INF/rendition-publish-contrib.xml,OSGI-IN\r\n F/marshallers-contrib.xml,OSGI-INF/rendition-scheduler-contrib.xml,OSGI\r\n -INF/rendition-workmanager-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 487,
      "minResolutionOrder": 474,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-binarymanager-s3",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.storage.binarymanager.common",
          "org.nuxeo.ecm.core.storage.binarymanager.s3"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager",
        "id": "grp:org.nuxeo.ecm.core.storage.binarymanager",
        "name": "org.nuxeo.ecm.core.storage.binarymanager",
        "parentIds": [
          "grp:org.nuxeo.ecm.core.storage",
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.storage.binarymanager.s3",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.management.CoreManagementComponent--probes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.cloud.managment.contrib/Contributions/org.nuxeo.ecm.core.storage.cloud.managment.contrib--probes",
              "id": "org.nuxeo.ecm.core.storage.cloud.managment.contrib--probes",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"probes\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n    <probe class=\"org.nuxeo.ecm.core.storage.status.S3BinaryManagerStatusProbe\" name=\"s3BinaryManagerStatus\">\n      <label>S3BinaryManager probe</label>\n    </probe>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.management.CoreManagementComponent--healthCheck",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.cloud.managment.contrib/Contributions/org.nuxeo.ecm.core.storage.cloud.managment.contrib--healthCheck",
              "id": "org.nuxeo.ecm.core.storage.cloud.managment.contrib--healthCheck",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"healthCheck\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n    <probe enabled=\"true\" name=\"s3BinaryManagerStatus\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.cloud.managment.contrib",
          "name": "org.nuxeo.ecm.core.storage.cloud.managment.contrib",
          "requirements": [],
          "resolutionOrder": 126,
          "services": [],
          "startOrder": 161,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.cloud.managment.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\" point=\"probes\">\n    <probe name=\"s3BinaryManagerStatus\" class=\"org.nuxeo.ecm.core.storage.status.S3BinaryManagerStatusProbe\">\n      <label>S3BinaryManager probe</label>\n    </probe>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\" point=\"healthCheck\">\n    <probe name=\"s3BinaryManagerStatus\" enabled=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/s3binarymanager-managment-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.s3.config",
          "name": "org.nuxeo.ecm.core.storage.s3.config",
          "requirements": [],
          "resolutionOrder": 127,
          "services": [],
          "startOrder": 168,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.s3.config\" version=\"1.0\">\n\n  <!--\n    The nuxeo.s3.multipart.copy.part.size ConfigurationService property is deprecated since 2021.11,\n    use the nuxeo.s3storage.multipart.copy.part.size nuxeo.conf property instead.\n  -->\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/configuration-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--filterConfig",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib/Contributions/org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib--filterConfig",
              "id": "org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib--filterConfig",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filterConfig\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n\n    <filterConfig cacheTime=\"3600\" cached=\"true\" name=\"cachednxfile\" private=\"true\" synchonize=\"false\" transactional=\"false\">\n      <pattern>/nuxeo/nxfile/.*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n\n    <filterConfig cacheTime=\"3600\" cached=\"true\" name=\"cachedBPR\" private=\"true\" transactional=\"true\">\n      <pattern>/nuxeo/.*/@(blob|preview|rendition).*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib",
          "name": "org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib"
          ],
          "resolutionOrder": 612,
          "services": [],
          "startOrder": 162,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib\">\n\n  <require>org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\"\n    point=\"filterConfig\">\n\n    <filterConfig name=\"cachednxfile\" transactional=\"false\" synchonize=\"false\" cached=\"true\" private=\"true\" cacheTime=\"${nuxeo.s3storage.directdownload.expire:=3600}\">\n      <pattern>${org.nuxeo.ecm.contextPath}/nxfile/.*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"cachedBPR\" cached=\"true\" private=\"true\" cacheTime=\"${nuxeo.s3storage.directdownload.expire:=3600}\" transactional=\"true\">\n      <pattern>${org.nuxeo.ecm.contextPath}/.*/@(blob|preview|rendition).*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/s3web-request-controller-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scroll.service--scroll",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.s3.bulk.config/Contributions/org.nuxeo.ecm.core.storage.s3.bulk.config--scroll",
              "id": "org.nuxeo.ecm.core.storage.s3.bulk.config--scroll",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll class=\"org.nuxeo.ecm.blob.s3.S3BlobScroll\" name=\"s3BlobScroll\" type=\"generic\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.s3.bulk.config/Contributions/org.nuxeo.ecm.core.storage.s3.bulk.config--actions",
              "id": "org.nuxeo.ecm.core.storage.s3.bulk.config--actions",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"100\" enabled=\"false\" httpEnabled=\"true\" inputStream=\"bulk/s3SetBlobLength\" name=\"s3SetBlobLength\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.s3.bulk.config/Contributions/org.nuxeo.ecm.core.storage.s3.bulk.config--streamProcessor",
              "id": "org.nuxeo.ecm.core.storage.s3.bulk.config--streamProcessor",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.bulk.S3SetBlobLengthAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" enabled=\"false\" name=\"s3SetBlobLength\">\n      <policy continueOnFailure=\"true\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.s3.bulk.config",
          "name": "org.nuxeo.ecm.core.storage.s3.bulk.config",
          "requirements": [
            "org.nuxeo.runtime.stream.service",
            "org.nuxeo.ecm.core.scroll.service"
          ],
          "resolutionOrder": 829,
          "services": [],
          "startOrder": 167,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.s3.bulk.config\" version=\"1.0.0\">\n\n  <require>org.nuxeo.runtime.stream.service</require>\n  <require>org.nuxeo.ecm.core.scroll.service</require>\n\n  <extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll type=\"generic\" name=\"s3BlobScroll\" class=\"org.nuxeo.ecm.blob.s3.S3BlobScroll\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"s3SetBlobLength\" inputStream=\"bulk/s3SetBlobLength\" bucketSize=\"100\" batchSize=\"25\" httpEnabled=\"true\"\n      enabled=\"${binarymanager.bulk.s3SetBlobLength.enabled:=false}\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"s3SetBlobLength\" class=\"org.nuxeo.ecm.core.bulk.S3SetBlobLengthAction\"\n      defaultConcurrency=\"${binarymanager.bulk.s3SetBlobLength.concurrency:=2}\"\n      defaultPartitions=\"${binarymanager.bulk.s3SetBlobLength.partitions:=4}\"\n      enabled=\"${binarymanager.bulk.s3SetBlobLength.enabled:=false}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/bulk-config.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-binarymanager-s3-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3",
      "id": "org.nuxeo.ecm.core.storage.binarymanager.s3",
      "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: 2023.7.9-t20240130-153405\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage.binarymanager.s3;singlet\r\n on:=true\r\nNuxeo-Component: OSGI-INF/s3binarymanager-managment-contrib.xml,OSGI-INF\r\n /s3web-request-controller-contrib.xml,OSGI-INF/configuration-properties\r\n .xml,OSGI-INF/bulk-config.xml\r\n\r\n",
      "maxResolutionOrder": 829,
      "minResolutionOrder": 126,
      "packages": [
        "amazon-s3-online-storage"
      ],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "# nuxeo-core-binarymanager-s3\n\nThis addon implements a BinaryManager that stores binaries in a S3 bucket.\nFor efficiency, a local disk cache (with limited size) is also used.\n\nBe sure to protect your nuxeo.conf (readable only by the nuxeo user) as the\nfile will have your AWS identifiers (unless you are using instance roles).\n\n## Mandatory Parameters\n\n- nuxeo.core.binarymanager=org.nuxeo.ecm.blob.s3.S3BlobProvider\n\n- nuxeo.s3storage.bucket : the name of the S3 bucket (unique across all of\n  Amazon, find something original!)\n\n- nuxeo.s3storage.awsid : your AWS_ACCESS_KEY_ID\n\n- nuxeo.s3storage.awssecret : your AWS_SECRET_ACCESS_KEY\n\nIf the awsid and/or awssecret are not set, the addon will try to use\ntemporary credentials from the instance role (if any).\n\n## Optional Parameters\n\n- nuxeo.s3storage.region : the region code your S3 bucket will be placed in.\n  For us-east-1 (the default), don't set this parameter\n  For us-west-1 (Northern California), use us-west-1\n  For us-west-2 (Oregon), use us-west-2\n  For eu-west-1 (Ireland), use EU\n  For ap-southeast-1 (Singapore), use ap-southeast-1\n  For ap-northeast-1 (Tokyo), use ap-northeast-1\n  For sa-east-1 (Sao Paulo), use sa-east-1\n\n- nuxeo.s3storage.cachesize : size of the local cache (default is 100MB).\n- nuxeo.s3storage.bucket_prefix : bucket prefix\n- nuxeo.s3storage.pathstyleaccess : if `true`, configures the client to use path-style access for all requests (default is `false`)\n\n## Crypto Parameters\n\nWith S3, you have the option to store your data encrypted.\nNote that the local cache will *NOT* be encrypted.\n\nThe S3 binary manager can use a keystore containing a keypair, but there are\na few caveats to be aware of :\n\n- The Sun/Oracle JDK doesn't always allow the AES256 cipher which the AWS SDK\n  uses internally.\n  Depending on the US export restrictions for your country, you may be able to\n  modify your JDK to use AES256 by installing the \"Java Cryptography Extension\n  Unlimited Strength Jurisdiction Policy Files\". See this [link](http://www.oracle.com/technetwork/java/javase/downloads/index.html) to\n  download the files and installation instructions.\n\n- Don't forget to specify the key algorithm if you create your keypair with the\n  \"keytool\" command, as this won't work with the default (DSA).\n  The S3 Binary Manager has been tested with a keystore generated with this\n  command :\n\n  ```shell\n  keytool -genkeypair -keystore </path/to/keystore/file> -alias <key alias>\n      -storepass <keystore password> -keypass <key password>\n      -dname <key distinguished name> -keyalg RSA\n  ```\n\nWith all that preceded in mind, here are the crypto options (they are all\nmandatory once you specify a keystore) :\n\n- nuxeo.s3storage.crypt.keystore.file : the absolute path to the keystore file\n- nuxeo.s3storage.crypt.keystore.password : the keystore password\n- nuxeo.s3storage.crypt.key.alias = the key alias\n- nuxeo.s3storage.crypt.key.password = the key password\n\n## Server-side Encryption\n\nS3 allows you to use server-side encryption to encrypt data at rest with keys managed\nby S3 itself. To activate-this mode, use:\n\n- nuxeo.s3storage.crypt.serverside = true\n\nSee the related AWS [documentation](http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html) for more.\n\nIf you want to use Server-Side Encryption with AWS KMS–Managed Keys, specify your key id with:\n\n- nuxeo.s3storage.crypt.kms.key = your-key-id\n\nSee the related AWS [documentation](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html) for more.\n\n## Enable CloudFront Direct Download\n\nPlease, read carefully the [CloudFront documentation](https://aws.amazon.com/fr/documentation/cloudfront/) to understand how you bind a CloudFront distribution to a S3 bucket.\nAfter you created a CloudFront distribution domain bound to your S3 repository. Accessing your objects is not restricted per default.\n\nYou have to enable the `restriction viewer access` (Look at [Serving Private Content throught CloudFront](http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html)), then each distribution URL must be signed to access the target object.\n\nYou have to set the `Query String Forwarding and Caching` on `all parameters` (Look at [Configuring CloudFront to Cache Based on Query String Parameters](http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/QueryStringParameters.html)) in order to correctly forward `Content Disposition` parameters to get a response with a correct filename.\n\n### CloudFront Mandatory Parameters\n\nS3 parameters (except `nuxeo.core.binarymanager`) are mandatory, additionally CloudFront requires some new ones:\n\n- `nuxeo.core.binarymanager=org.nuxeo.ecm.core.storage.sql.CloudFrontBinaryManager`\n- `nuxeo.s3storage.cloudfront.privKey`: the absolute path of the private key file (`.pem` or `.der`). Read: [Creating CloudFront Key Pairs for Your Trusted Signers](http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html#private-content-creating-cloudfront-key-pairs)\n- `nuxeo.s3storage.cloudfront.privKeyId`: the private key id.\n- `nuxeo.s3storage.cloudfront.distribDomain`: the distribution domain name.\n- `nuxeo.s3storage.cloudfront.protocol`: the prefered protocol (default `HTTPS`)\n- `nuxeo.s3storage.cloudfront.fix.encoding`: Enable a workaround to fix an error on CloudFront side (default `false`)\n\n## Building\n\n```shell\nmvn clean install\n```\n\n## Testing\n\nRunning the unit tests requires some environment variables and System properties to be set, otherwise they are skipped.\n\n### Environment Variables\n\n```shell\n  AWS_REGION=eu-west-3\n  AWS_ACCESS_KEY_ID=******\n  AWS_SECRET_ACCESS_KEY=******\n  AWS_ROLE_ARN=arn:aws:iam::783725821734:role/nuxeo-s3directupload-role\n```\n\n### System Properties\n\n```shell\nmvn test \\\n  -nsu \\\n  -Dnuxeo.test.s3storage.bucket=nuxeo-platform-unit-tests \\\n  -Dnuxeo.test.s3storage.transient.bucket=nuxeo-platform-unit-tests-transient \\\n  -Dnuxeo.test.s3storage.policy.bucket=nuxeo-platform-unit-tests-policy \\\n  -Dnuxeo.test.s3storage.bucket_prefix=BUCKET_PREFIX \\\n  -Dnuxeo.test.s3storage.provider.test.bucket_prefix=TEST_BLOB_PROVIDER_PREFIX \\\n  -Dnuxeo.test.s3storage.provider.other.bucket_prefix=OTHER_BLOB_PROVIDER_PREFIX\n```\n\n## Deploying\n\nInstall [the Amazon S3 Online Storage Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/amazon-s3-online-storage).\nOr manually copy the built artifacts into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\n## About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "a98ea203329ec0f417106e1aa95af412",
        "encoding": "UTF-8",
        "length": 7201,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-localconf-web",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.localconf",
          "org.nuxeo.ecm.localconf.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.localconf",
        "id": "grp:org.nuxeo.ecm.localconf",
        "name": "org.nuxeo.ecm.localconf",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.localconf.web",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web/org.nuxeo.ecm.localconf.ui/Contributions/org.nuxeo.ecm.localconf.ui--actions",
              "id": "org.nuxeo.ecm.localconf.ui--actions",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action icon=\"/icons/file.gif\" id=\"UI_TYPES_CONFIGURATION\" label=\"action.view.types.configuration\" link=\"/incl/tabs/ui_types_configuration.xhtml\" order=\"100\">\n      <category>LOCAL_CONFIGURATION</category>\n      <filter-id>manage</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web/org.nuxeo.ecm.localconf.ui/Contributions/org.nuxeo.ecm.localconf.ui--widgets",
              "id": "org.nuxeo.ecm.localconf.ui--widgets",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"ui_types_selection\" type=\"shuttle\">\n      <labels>\n        <label mode=\"any\">label.local.configuration.ui.types.allowedTypesSelection</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>uitypesconf:allowedTypes</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"availableElementsLabel\">\n          label.local.configuration.selection.availableUITypes\n        </property>\n        <property name=\"selectedElementsLabel\">\n          label.local.configuration.selection.selectedUITypes\n        </property>\n        <property name=\"sourceItems\">\n          #{typesConfigurationActions.getNotSelectedTypes(layoutValue)}\n        </property>\n        <property name=\"sourceItemVar\">type</property>\n        <property name=\"sourceItemValue\">#{type.id}</property>\n        <property name=\"sourceItemLabel\">#{messages[type.label]}</property>\n        <property name=\"sourceItemOrdering\">label</property>\n        <property name=\"sourceItemCaseSensitive\">true</property>\n        <property name=\"targetItems\">\n          #{typesConfigurationActions.getSelectedTypes(layoutValue)}\n        </property>\n        <property name=\"targetItemVar\">type</property>\n        <property name=\"targetItemValue\">#{type.id}</property>\n        <property name=\"targetItemLabel\">#{messages[type.label]}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"deny_all_types\" type=\"checkbox\">\n      <labels>\n        <label mode=\"any\">label.local.configuration.ui.types.denyAllTypes</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>uitypesconf:denyAllTypes</field>\n      </fields>\n    </widget>\n\n    <widget name=\"default_type\" type=\"selectOneMenu\">\n      <labels>\n        <label mode=\"any\">label.local.configuration.ui.automaticType</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>uitypesconf:defaultType</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"#{messages['label.local.configuration.ui.defaultType']}\" itemValue=\"\"/>\n        <options itemLabel=\"#{messages[type.label]}\" itemValue=\"#{type.id}\" value=\"#{typesConfigurationActions.getTypesWithSchemaFile(layoutValue)}\" var=\"type\"/>\n      </selectOptions>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web/org.nuxeo.ecm.localconf.ui/Contributions/org.nuxeo.ecm.localconf.ui--layouts",
              "id": "org.nuxeo.ecm.localconf.ui--layouts",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"ui_types_configuration\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_local_configuration_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"layoutTemplateToInclude\">/layouts/layout_default_template.xhtml</property>\n        <property name=\"foldableBoxLabel\">label.local.configuration.uiTypes</property>\n        <property name=\"localConfigurationFacet\">UITypesLocalConfiguration</property>\n        <property name=\"helpLabel\">label.local.configuration.uiTypes.info</property>\n        <property name=\"elementsToReRender\">local_configuration_panel</property>\n      </properties>\n      <rows>\n        <row>\n          <widget>ui_types_selection</widget>\n        </row>\n        <row>\n          <widget>deny_all_types</widget>\n        </row>\n        <row>\n          <widget>default_type</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web/org.nuxeo.ecm.localconf.ui",
          "name": "org.nuxeo.ecm.localconf.ui",
          "requirements": [],
          "resolutionOrder": 234,
          "services": [],
          "startOrder": 230,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.localconf.ui\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"UI_TYPES_CONFIGURATION\" link=\"/incl/tabs/ui_types_configuration.xhtml\"\n      order=\"100\" label=\"action.view.types.configuration\" icon=\"/icons/file.gif\">\n      <category>LOCAL_CONFIGURATION</category>\n      <filter-id>manage</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"ui_types_selection\" type=\"shuttle\">\n      <labels>\n        <label mode=\"any\">label.local.configuration.ui.types.allowedTypesSelection</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>uitypesconf:allowedTypes</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"availableElementsLabel\">\n          label.local.configuration.selection.availableUITypes\n        </property>\n        <property name=\"selectedElementsLabel\">\n          label.local.configuration.selection.selectedUITypes\n        </property>\n        <property name=\"sourceItems\">\n          #{typesConfigurationActions.getNotSelectedTypes(layoutValue)}\n        </property>\n        <property name=\"sourceItemVar\">type</property>\n        <property name=\"sourceItemValue\">#{type.id}</property>\n        <property name=\"sourceItemLabel\">#{messages[type.label]}</property>\n        <property name=\"sourceItemOrdering\">label</property>\n        <property name=\"sourceItemCaseSensitive\">true</property>\n        <property name=\"targetItems\">\n          #{typesConfigurationActions.getSelectedTypes(layoutValue)}\n        </property>\n        <property name=\"targetItemVar\">type</property>\n        <property name=\"targetItemValue\">#{type.id}</property>\n        <property name=\"targetItemLabel\">#{messages[type.label]}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"deny_all_types\" type=\"checkbox\">\n      <labels>\n        <label mode=\"any\">label.local.configuration.ui.types.denyAllTypes</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>uitypesconf:denyAllTypes</field>\n      </fields>\n    </widget>\n\n    <widget name=\"default_type\" type=\"selectOneMenu\">\n      <labels>\n        <label mode=\"any\">label.local.configuration.ui.automaticType</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>uitypesconf:defaultType</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"#{messages['label.local.configuration.ui.defaultType']}\"\n          itemValue=\"\" />\n        <options\n          value=\"#{typesConfigurationActions.getTypesWithSchemaFile(layoutValue)}\"\n          var=\"type\" itemValue=\"#{type.id}\" itemLabel=\"#{messages[type.label]}\" />\n      </selectOptions>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"ui_types_configuration\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_local_configuration_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"layoutTemplateToInclude\">/layouts/layout_default_template.xhtml</property>\n        <property name=\"foldableBoxLabel\">label.local.configuration.uiTypes</property>\n        <property name=\"localConfigurationFacet\">UITypesLocalConfiguration</property>\n        <property name=\"helpLabel\">label.local.configuration.uiTypes.info</property>\n        <property name=\"elementsToReRender\">local_configuration_panel</property>\n      </properties>\n      <rows>\n        <row>\n          <widget>ui_types_selection</widget>\n        </row>\n        <row>\n          <widget>deny_all_types</widget>\n        </row>\n        <row>\n          <widget>default_type</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/local-configuration-ui-types.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web/org.nuxeo.ecm.localconf.theme/Contributions/org.nuxeo.ecm.localconf.theme--actions",
              "id": "org.nuxeo.ecm.localconf.theme--actions",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action icon=\"/icons/file.gif\" id=\"THEME_CONFIGURATION\" label=\"action.view.theme\" link=\"/incl/tabs/theme_configuration.xhtml\" order=\"100\">\n      <category>LOCAL_CONFIGURATION</category>\n      <filter-id>manage</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web/org.nuxeo.ecm.localconf.theme/Contributions/org.nuxeo.ecm.localconf.theme--layouts",
              "id": "org.nuxeo.ecm.localconf.theme--layouts",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"theme_configuration\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_local_configuration_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"layoutTemplateToInclude\">\n          /layouts/layout_default_template.xhtml\n        </property>\n        <property name=\"foldableBoxLabel\">\n          label.local.configuration.theme\n        </property>\n        <property name=\"localConfigurationFacet\">\n          ThemeLocalConfiguration\n        </property>\n        <property name=\"helpLabel\">\n          label.local.configuration.theme.info\n        </property>\n        <property name=\"elementsToReRender\">\n          local_configuration_panel\n        </property>\n      </properties>\n      <rows>\n        <row>\n          <widget>flavor_selection</widget>\n        </row>\n      </rows>\n      <widget name=\"flavor_selection\" type=\"template\">\n        <labels>\n          <label mode=\"any\">\n            label.local.configuration.theme.flavorSelection\n          </label>\n        </labels>\n        <helpLabels>\n          <label mode=\"any\">\n            label.local.configuration.theme.flavorSelection.help\n          </label>\n        </helpLabels>\n        <translated>true</translated>\n        <fields>\n          <field>themeconf:flavor</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/select_flavor_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web/org.nuxeo.ecm.localconf.theme",
          "name": "org.nuxeo.ecm.localconf.theme",
          "requirements": [],
          "resolutionOrder": 235,
          "services": [],
          "startOrder": 229,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.localconf.theme\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"THEME_CONFIGURATION\" link=\"/incl/tabs/theme_configuration.xhtml\"\n      order=\"100\" label=\"action.view.theme\" icon=\"/icons/file.gif\">\n      <category>LOCAL_CONFIGURATION</category>\n      <filter-id>manage</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"theme_configuration\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_local_configuration_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"layoutTemplateToInclude\">\n          /layouts/layout_default_template.xhtml\n        </property>\n        <property name=\"foldableBoxLabel\">\n          label.local.configuration.theme\n        </property>\n        <property name=\"localConfigurationFacet\">\n          ThemeLocalConfiguration\n        </property>\n        <property name=\"helpLabel\">\n          label.local.configuration.theme.info\n        </property>\n        <property name=\"elementsToReRender\">\n          local_configuration_panel\n        </property>\n      </properties>\n      <rows>\n        <row>\n          <widget>flavor_selection</widget>\n        </row>\n      </rows>\n      <widget name=\"flavor_selection\" type=\"template\">\n        <labels>\n          <label mode=\"any\">\n            label.local.configuration.theme.flavorSelection\n          </label>\n        </labels>\n        <helpLabels>\n          <label mode=\"any\">\n            label.local.configuration.theme.flavorSelection.help\n          </label>\n        </helpLabels>\n        <translated>true</translated>\n        <fields>\n          <field>themeconf:flavor</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/select_flavor_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/local-configuration-theme.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web/org.nuxeo.ecm.localconf.contentview/Contributions/org.nuxeo.ecm.localconf.contentview--actions",
              "id": "org.nuxeo.ecm.localconf.contentview--actions",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action icon=\"/icons/file.gif\" id=\"CONTENT_VIEW_CONFIGURATION\" label=\"action.view.content.view.configuration\" link=\"/incl/tabs/content_view_configuration.xhtml\" order=\"100\">\n      <category>LOCAL_CONFIGURATION</category>\n      <filter-id>manage</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web/org.nuxeo.ecm.localconf.contentview/Contributions/org.nuxeo.ecm.localconf.contentview--widgets",
              "id": "org.nuxeo.ecm.localconf.contentview--widgets",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"content_view_selection\" type=\"list\">\n      <labels>\n        <label mode=\"any\">label.local.configuration.content.view.contentViewSelection</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>cvconf:cvNamesByType</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"complexListItem\" type=\"complex\">\n          <labels>\n            <label mode=\"any\"/>\n          </labels>\n          <fields>\n            <field/>\n          </fields>\n          <properties mode=\"any\">\n            <property name=\"hideSubLabels\">true</property>\n            <property name=\"display\">inline</property>\n          </properties>\n          <subWidgets>\n            <widget name=\"docType\" type=\"selectOneMenu\">\n              <fields>\n                <field>docType</field>\n              </fields>\n              <labels>\n                <label mode=\"any\"/>\n              </labels>\n              <selectOptions>\n                <options itemLabel=\"#{docType.label}\" itemValue=\"#{docType.value}\" value=\"#{contentViewConfigurationActions.availableDocTypes}\" var=\"docType\"/>\n              </selectOptions>\n            </widget>\n            <widget name=\"contentView\" type=\"selectOneMenu\">\n              <fields>\n                <field>contentView</field>\n              </fields>\n              <labels>\n                <label mode=\"any\"/>\n              </labels>\n              <selectOptions>\n                <options itemLabel=\"#{contentView.label}\" itemValue=\"#{contentView.value}\" value=\"#{contentViewConfigurationActions.availableContentViews}\" var=\"contentView\"/>\n              </selectOptions>\n            </widget>\n          </subWidgets>\n        </widget>\n      </subWidgets>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web/org.nuxeo.ecm.localconf.contentview/Contributions/org.nuxeo.ecm.localconf.contentview--layouts",
              "id": "org.nuxeo.ecm.localconf.contentview--layouts",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"content_view_configuration\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_local_configuration_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"layoutTemplateToInclude\">/layouts/layout_default_template.xhtml</property>\n        <property name=\"foldableBoxLabel\">label.local.configuration.contentView</property>\n        <property name=\"localConfigurationFacet\">ContentViewLocalConfiguration</property>\n        <property name=\"helpLabel\">label.local.configuration.contentView.info</property>\n        <property name=\"elementsToReRender\">local_configuration_panel</property>\n      </properties>\n      <rows>\n        <row>\n          <widget>content_view_selection</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web/org.nuxeo.ecm.localconf.contentview",
          "name": "org.nuxeo.ecm.localconf.contentview",
          "requirements": [],
          "resolutionOrder": 236,
          "services": [],
          "startOrder": 226,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.localconf.contentview\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"CONTENT_VIEW_CONFIGURATION\"\n      link=\"/incl/tabs/content_view_configuration.xhtml\" order=\"100\"\n      label=\"action.view.content.view.configuration\" icon=\"/icons/file.gif\">\n      <category>LOCAL_CONFIGURATION</category>\n      <filter-id>manage</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"content_view_selection\" type=\"list\">\n      <labels>\n        <label mode=\"any\">label.local.configuration.content.view.contentViewSelection</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>cvconf:cvNamesByType</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"complexListItem\" type=\"complex\">\n          <labels>\n            <label mode=\"any\"></label>\n          </labels>\n          <fields>\n            <field></field>\n          </fields>\n          <properties mode=\"any\">\n            <property name=\"hideSubLabels\">true</property>\n            <property name=\"display\">inline</property>\n          </properties>\n          <subWidgets>\n            <widget name=\"docType\" type=\"selectOneMenu\">\n              <fields>\n                <field>docType</field>\n              </fields>\n              <labels>\n                <label mode=\"any\"></label>\n              </labels>\n              <selectOptions>\n                <options value=\"#{contentViewConfigurationActions.availableDocTypes}\"\n                  var=\"docType\" itemValue=\"#{docType.value}\" itemLabel=\"#{docType.label}\" />\n              </selectOptions>\n            </widget>\n            <widget name=\"contentView\" type=\"selectOneMenu\">\n              <fields>\n                <field>contentView</field>\n              </fields>\n              <labels>\n                <label mode=\"any\"></label>\n              </labels>\n              <selectOptions>\n                <options value=\"#{contentViewConfigurationActions.availableContentViews}\"\n                  var=\"contentView\" itemValue=\"#{contentView.value}\" itemLabel=\"#{contentView.label}\" />\n              </selectOptions>\n            </widget>\n          </subWidgets>\n        </widget>\n      </subWidgets>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"content_view_configuration\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_local_configuration_template.xhtml\n        </template>\n      </templates>\n      <properties mode=\"any\">\n        <property name=\"layoutTemplateToInclude\">/layouts/layout_default_template.xhtml</property>\n        <property name=\"foldableBoxLabel\">label.local.configuration.contentView</property>\n        <property name=\"localConfigurationFacet\">ContentViewLocalConfiguration</property>\n        <property name=\"helpLabel\">label.local.configuration.contentView.info</property>\n        <property name=\"elementsToReRender\">local_configuration_panel</property>\n      </properties>\n      <rows>\n        <row>\n          <widget>content_view_selection</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/local-configuration-content-view.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-localconf-web-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.localconf",
      "hierarchyPath": "/grp:org.nuxeo.ecm.localconf/org.nuxeo.ecm.localconf.web",
      "id": "org.nuxeo.ecm.localconf.web",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Platform Local Configuration Web\r\nBundle-SymbolicName: org.nuxeo.ecm.localconf.web;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/local-configuration-ui-types.xml,OSGI-INF/loca\r\n l-configuration-theme.xml,OSGI-INF/local-configuration-content-view.xml\r\n\r\n",
      "maxResolutionOrder": 236,
      "minResolutionOrder": 234,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-user-dashboard",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.user.center",
          "org.nuxeo.ecm.user.center.dashboard",
          "org.nuxeo.ecm.user.center.dashboard.jsf",
          "org.nuxeo.ecm.user.center.notification",
          "org.nuxeo.ecm.user.center.oauth",
          "org.nuxeo.ecm.user.center.profile",
          "org.nuxeo.ecm.user.center.profile.jsf",
          "org.nuxeo.ecm.user.invite",
          "org.nuxeo.ecm.user.registration",
          "org.nuxeo.ecm.user.registration.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user",
        "id": "grp:org.nuxeo.ecm.user",
        "name": "org.nuxeo.ecm.user",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.user.center.dashboard",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.dashboard/org.nuxeo.ecm.user.center.dashboard.pageproviders/Contributions/org.nuxeo.ecm.user.center.dashboard.pageproviders--providers",
              "id": "org.nuxeo.ecm.user.center.dashboard.pageproviders--providers",
              "registrationOrder": 34,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"user_domains\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Domain WHERE ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>0</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"domain_published_documents\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:path STARTSWITH ? AND ecm:mixinType !=\n        'Folderish' AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:mixinType != 'SystemDocument' AND\n        ecm:isVersion = 0 AND ecm:isProxy = 1\n      </pattern>\n      <sort ascending=\"false\" column=\"dc:issued\"/>\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_documents\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE dc:contributors = ? AND ecm:mixinType !=\n        'Folderish' AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:mixinType != 'SystemDocument' AND\n        ecm:isVersion = 0 AND ecm:isProxy = 0 AND\n        ecm:isTrashed = 0 AND ecm:path STARTSWITH ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:modified\"/>\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_sections\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:primaryType = 'Section' AND\n        ecm:mixinType != 'HiddenInNavigation' AND ecm:path STARTSWITH ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:modified\"/>\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_sites\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'WebView' AND\n        ecm:isTrashed = 0 AND webc:isWebContainer = 1 AND\n        ecm:path STARTSWITH ?\n      </pattern>\n      <sort ascending=\"true\" column=\"webc:name\"/>\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_workspaces\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Workspace WHERE ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isTrashed = 0 AND ecm:isProxy = 0 AND ecm:path\n        STARTSWITH ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_deleted_documents\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE dc:contributors = ? AND ecm:mixinType !=\n        'Folderish' AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:mixinType != 'SystemDocument' AND\n        ecm:isVersion = 0 AND ecm:isProxy = 0 AND\n        ecm:isTrashed = 1\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:modified\"/>\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_favorites\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document where ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0 AND\n        collectionMember:collectionIds/* = ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_shared_documents\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document where ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0 AND\n        ecm:acl/*1/grant = 1 AND\n        ecm:acl/*1/permission IN ('Read', 'ReadWrite', 'ReadRemove', 'Everything') AND\n        ecm:acl/*1/principal IN ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.dashboard/org.nuxeo.ecm.user.center.dashboard.pageproviders",
          "name": "org.nuxeo.ecm.user.center.dashboard.pageproviders",
          "requirements": [],
          "resolutionOrder": 896,
          "services": [],
          "startOrder": 606,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.dashboard.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider name=\"user_domains\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Domain WHERE ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>0</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"domain_published_documents\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:path STARTSWITH ? AND ecm:mixinType !=\n        'Folderish' AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:mixinType != 'SystemDocument' AND\n        ecm:isVersion = 0 AND ecm:isProxy = 1\n      </pattern>\n      <sort column=\"dc:issued\" ascending=\"false\" />\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_documents\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE dc:contributors = ? AND ecm:mixinType !=\n        'Folderish' AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:mixinType != 'SystemDocument' AND\n        ecm:isVersion = 0 AND ecm:isProxy = 0 AND\n        ecm:isTrashed = 0 AND ecm:path STARTSWITH ?\n      </pattern>\n      <sort column=\"dc:modified\" ascending=\"true\" />\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_sections\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:primaryType = 'Section' AND\n        ecm:mixinType != 'HiddenInNavigation' AND ecm:path STARTSWITH ?\n      </pattern>\n      <sort column=\"dc:modified\" ascending=\"true\" />\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_sites\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'WebView' AND\n        ecm:isTrashed = 0 AND webc:isWebContainer = 1 AND\n        ecm:path STARTSWITH ?\n      </pattern>\n      <sort column=\"webc:name\" ascending=\"true\" />\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_workspaces\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Workspace WHERE ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isTrashed = 0 AND ecm:isProxy = 0 AND ecm:path\n        STARTSWITH ?\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_deleted_documents\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE dc:contributors = ? AND ecm:mixinType !=\n        'Folderish' AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:mixinType != 'SystemDocument' AND\n        ecm:isVersion = 0 AND ecm:isProxy = 0 AND\n        ecm:isTrashed = 1\n      </pattern>\n      <sort column=\"dc:modified\" ascending=\"true\" />\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_favorites\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document where ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0 AND\n        collectionMember:collectionIds/* = ?\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_shared_documents\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document where ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0 AND\n        ecm:acl/*1/grant = 1 AND\n        ecm:acl/*1/permission IN ('Read', 'ReadWrite', 'ReadRemove', 'Everything') AND\n        ecm:acl/*1/principal IN ?\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageproviders-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-user-dashboard-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.dashboard",
      "id": "org.nuxeo.ecm.user.center.dashboard",
      "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: 1\r\nBundle-Version: 0.0.1\r\nBundle-Name: Nuxeo User Center Dashboard\r\nBundle-SymbolicName: org.nuxeo.ecm.user.center.dashboard;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/pageproviders-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 896,
      "minResolutionOrder": 896,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-tag-web",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.tag.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag",
        "id": "grp:org.nuxeo.ecm.platform.tag",
        "name": "org.nuxeo.ecm.platform.tag",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.tag.web",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.web/org.nuxeo.ecm.platform.tag.widgets/Contributions/org.nuxeo.ecm.platform.tag.widgets--widgettypes",
              "id": "org.nuxeo.ecm.platform.tag.widgets--widgettypes",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"select_tags\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Tags selection</title>\n        <description>\n          <p>\n            This widget type allows to select multiple tags.\n          </p>\n        </description>\n        <categories>\n          <category>search</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"select_tags_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget>canSelectNewTag</widget>\n                </row>\n              </rows>\n              <widget name=\"canSelectNewTag\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Can Select New Tag</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Allow to select tags that don't exist yet.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>canSelectNewTag</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/select_tags_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.web/org.nuxeo.ecm.platform.tag.widgets",
          "name": "org.nuxeo.ecm.platform.tag.widgets",
          "requirements": [],
          "resolutionOrder": 517,
          "services": [],
          "startOrder": 491,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.tag.widgets\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"select_tags\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Tags selection</title>\n        <description>\n          <p>\n            This widget type allows to select multiple tags.\n          </p>\n        </description>\n        <categories>\n          <category>search</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"select_tags_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget>canSelectNewTag</widget>\n                </row>\n              </rows>\n              <widget name=\"canSelectNewTag\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Can Select New Tag</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Allow to select tags that don't exist yet.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>canSelectNewTag</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/select_tags_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/tag-widgets-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--bundles",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.web/org.nuxeo.ecm.tags.theme/Contributions/org.nuxeo.ecm.tags.theme--bundles",
              "id": "org.nuxeo.ecm.tags.theme--bundles",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bundles\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>tags2Formatter.js</resource>\n      </resources>\n    </bundle>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.web/org.nuxeo.ecm.tags.theme/Contributions/org.nuxeo.ecm.tags.theme--resources",
              "id": "org.nuxeo.ecm.tags.theme--resources",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <resource name=\"tags2Formatter.js\">\n      <uri>/scripts/tags2Formatter.js</uri>\n    </resource>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.web/org.nuxeo.ecm.tags.theme",
          "name": "org.nuxeo.ecm.tags.theme",
          "requirements": [
            "org.nuxeo.theme.nuxeo.webapp"
          ],
          "resolutionOrder": 661,
          "services": [],
          "startOrder": 595,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.tags.theme\">\n\n  <require>org.nuxeo.theme.nuxeo.webapp</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"bundles\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>tags2Formatter.js</resource>\n      </resources>\n    </bundle>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\n    <resource name=\"tags2Formatter.js\">\n      <uri>/scripts/tags2Formatter.js</uri>\n    </resource>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/tag-theme-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService--navigationTree",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.web/org.nuxeo.ecm.virtualnavigation.tagsContrib/Contributions/org.nuxeo.ecm.virtualnavigation.tagsContrib--navigationTree",
              "id": "org.nuxeo.ecm.virtualnavigation.tagsContrib--navigationTree",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.webapp.tree.nav.NavTreeService",
                "name": "org.nuxeo.ecm.webapp.tree.nav.NavTreeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"navigationTree\" target=\"org.nuxeo.ecm.webapp.tree.nav.NavTreeService\">\n\n    <navTree treeId=\"TAG_CLOUD\" treeLabel=\"label.byTagNavigation\" xhtmlview=\"/incl/tag_cloud.xhtml\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.web/org.nuxeo.ecm.virtualnavigation.tagsContrib/Contributions/org.nuxeo.ecm.virtualnavigation.tagsContrib--actions",
              "id": "org.nuxeo.ecm.virtualnavigation.tagsContrib--actions",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n    <action icon=\"/img/TAG_CLOUD.png\" id=\"navtree_TAG_CLOUD\" label=\"label.byTagNavigation\" order=\"100\" type=\"rest_document_link\">\n      <category>TREE_EXPLORER</category>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n        <property name=\"link\">/incl/tag_cloud.xhtml</property>\n      </properties>\n      <filter id=\"browseByTagsFilter\">\n        <rule grant=\"true\">\n          <condition>#{tagActions.canBrowseByTags()}</condition>\n        </rule>\n      </filter>\n    </action>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.web/org.nuxeo.ecm.virtualnavigation.tagsContrib",
          "name": "org.nuxeo.ecm.virtualnavigation.tagsContrib",
          "requirements": [
            "org.nuxeo.ecm.platform.actions"
          ],
          "resolutionOrder": 671,
          "services": [],
          "startOrder": 639,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.virtualnavigation.tagsContrib\">\n\n  <require>org.nuxeo.ecm.platform.actions</require>\n\n  <extension target=\"org.nuxeo.ecm.webapp.tree.nav.NavTreeService\" point=\"navigationTree\">\n\n    <navTree treeId=\"TAG_CLOUD\" treeLabel=\"label.byTagNavigation\" xhtmlview=\"/incl/tag_cloud.xhtml\"/>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\" point=\"actions\">\n    <action id=\"navtree_TAG_CLOUD\" order=\"100\" label=\"label.byTagNavigation\" icon=\"/img/TAG_CLOUD.png\"\n      type=\"rest_document_link\">\n      <category>TREE_EXPLORER</category>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n        <property name=\"link\">/incl/tag_cloud.xhtml</property>\n      </properties>\n      <filter id=\"browseByTagsFilter\">\n        <rule grant=\"true\">\n          <condition>#{tagActions.canBrowseByTags()}</condition>\n        </rule>\n      </filter>\n    </action>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/navtree-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-tag-web-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.web",
      "id": "org.nuxeo.ecm.platform.tag.web",
      "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: 2023.7.9-t20240205-105233\r\nBundle-Name: Nuxeo ECM Tag Web\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.tag.web\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: web,stateless\r\nRequire-Bundle: org.nuxeo.ecm.platform.tag.api,org.nuxeo.ecm.webapp.ui\r\nExport-Package: org.nuxeo.ecm.platform.tag.web\r\nNuxeo-Component: OSGI-INF/navtree-contrib.xml,OSGI-INF/tag-widgets-contr\r\n ib.xml,OSGI-INF/tag-theme-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 671,
      "minResolutionOrder": 517,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.tag.api",
        "org.nuxeo.ecm.webapp.ui"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-connect-client-wrapper",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.connect.client",
          "org.nuxeo.connect.client.wrapper"
        ],
        "hierarchyPath": "/grp:org.nuxeo.connect/grp:org.nuxeo.connect.client",
        "id": "grp:org.nuxeo.connect.client",
        "name": "org.nuxeo.connect.client",
        "parentIds": [
          "grp:org.nuxeo.connect"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.connect.client.wrapper",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.connect.client.ConnectClientComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.connect/grp:org.nuxeo.connect.client/org.nuxeo.connect.client.wrapper/org.nuxeo.connect.client.ConnectClientComponent",
          "name": "org.nuxeo.connect.client.ConnectClientComponent",
          "requirements": [],
          "resolutionOrder": 81,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.connect.client.ConnectClientComponent",
              "hierarchyPath": "/grp:org.nuxeo.connect/grp:org.nuxeo.connect.client/org.nuxeo.connect.client.wrapper/org.nuxeo.connect.client.ConnectClientComponent/Services/org.nuxeo.connect.registration.ConnectRegistrationService",
              "id": "org.nuxeo.connect.registration.ConnectRegistrationService",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.connect.client.ConnectClientComponent",
              "hierarchyPath": "/grp:org.nuxeo.connect/grp:org.nuxeo.connect.client/org.nuxeo.connect.client.wrapper/org.nuxeo.connect.client.ConnectClientComponent/Services/org.nuxeo.connect.connector.ConnectConnector",
              "id": "org.nuxeo.connect.connector.ConnectConnector",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.connect.client.ConnectClientComponent",
              "hierarchyPath": "/grp:org.nuxeo.connect/grp:org.nuxeo.connect.client/org.nuxeo.connect.client.wrapper/org.nuxeo.connect.client.ConnectClientComponent/Services/org.nuxeo.connect.downloads.ConnectDownloadManager",
              "id": "org.nuxeo.connect.downloads.ConnectDownloadManager",
              "overriden": false,
              "version": "2023.7.9"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.connect.client.ConnectClientComponent",
              "hierarchyPath": "/grp:org.nuxeo.connect/grp:org.nuxeo.connect.client/org.nuxeo.connect.client.wrapper/org.nuxeo.connect.client.ConnectClientComponent/Services/org.nuxeo.connect.packages.PackageManager",
              "id": "org.nuxeo.connect.packages.PackageManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 781,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.connect.client.ConnectClientComponent\">\n    <implementation\n        class=\"org.nuxeo.connect.client.ConnectClientComponent\" />\n\n    <service>\n        <provide\n            interface=\"org.nuxeo.connect.registration.ConnectRegistrationService\" />\n        <provide\n            interface=\"org.nuxeo.connect.connector.ConnectConnector\" />\n        <provide\n            interface=\"org.nuxeo.connect.downloads.ConnectDownloadManager\" />\n        <provide\n            interface=\"org.nuxeo.connect.packages.PackageManager\" />\n    </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/connect-client-framework.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-connect-client-wrapper-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.connect/grp:org.nuxeo.connect.client/org.nuxeo.connect.client.wrapper",
      "id": "org.nuxeo.connect.client.wrapper",
      "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: 1\r\nBundle-Version: 0.0.1\r\nBundle-Name: nuxeo connect client\r\nBundle-SymbolicName: org.nuxeo.connect.client.wrapper;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/connect-client-framework.xml\r\n\r\n",
      "maxResolutionOrder": 81,
      "minResolutionOrder": 81,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-diff-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.diff.content",
          "org.nuxeo.diff.core",
          "org.nuxeo.diff.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff",
        "id": "grp:org.nuxeo.diff",
        "name": "org.nuxeo.diff",
        "parentIds": [
          "grp:org.nuxeo.ecm"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Diff\n\nThis repo hosts the source code of a plugin for Nuxeo Platform that allows to render a diff between two documents or two versions of a document.\nThe comparison takes into account all the properties shared by the documents, which means that if a comparison is done between two documents of a different type, only the schemas in common will be \"diffed\".\nThe comparison also takes into account blob-type properties.\n\n\n## Building and deploying\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Diff Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-diff).\n\n## Configuring\n\n### Diff display\n\nThe `DiffDisplayService` offers several extension points to configure the document diff display.\nMost of the code samples exposed here can be found in the [diff-display-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-display-contrib.xml) and [diff-widgets-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-widgets-contrib.xml) files.\n\n#### Configuring groups of properties to display with the diffDisplay extension point.\n\nA `diffDisplay` contribution represents a number of `diffBlocks` that you want to display when asking for a document comparison.\nIt is bound to a document type.\nA `diffBlock` contribution represents a number of properties (fields) that you want to display (see next section).\n\nWhen asking for the comparison between 2 versions of a document, the `diffDisplay` bound to the document type or a super type is used.\nIf no `diffDisplay` is found for this type or a super type a fall back is done on the default diff display mode: one block per document schema and for each block all the fields of the schema that are different.\n\n*Beware that in this case the order of the schemas and of the fields is undefined.*\n\nWhen asking for the comparison between 2 documents:\n- If they are of the same type: if  a `diffDisplay` is found for this type or a super type then it is used, else a fall back is done on the default diff display mode.\n- If they are of different types: if  a `diffDisplay` is found for a common super type then it is used, else a fall back is done on the default diff display mode.\n\nFor example, this is the `diffDisplay` contribution bound to the _File_ type:\n```xml\n<diffDisplay type=\"File\">\n  <diffBlocks>\n    <diffBlock name=\"heading\" />\n    <diffBlock name=\"dublincore\" />\n    <diffBlock name=\"files\" />\n  </diffDisplay>\n</diffBlocks>\n```\n\n_Note that the order of the diffBlocks is taken into account when rendering the diff display._\n\n#### Configuring a group of properties to display with the diffBlock extension point\n\nA `diffBlock` contribution represents a number of `fields` that you want to display. It is rendered as a foldable box.\nThe `label` attribute of a `diffBlock` contribution is used as the title of the foldable box.\nA `field` is defined by its `schema` and its `name`.\n\nFor example, this is the \"heading\" `diffBlock` contribution:\n```xml\n<diffBlock name=\"heading\" label=\"label.diffBlock.heading\">\n  <fields>\n    <field schema=\"dublincore\" name=\"title\" />\n    <field schema=\"dublincore\" name=\"description\" />\n  </fields>\n</diffBlock>\n```\n_Note that the order of the fields is taken into account when rendering the diff block._\n\nFor complex properties, you can contribute inside the `field` element the property `items` that you want to display:\n```xml\n<field schema=\"complextypes\" name=\"complex\">\n  <items>\n    <item name=\"stringItem\" />\n    <item name=\"thirdItem\" />\n    <item name=\"fourthItem\" />\n  </items>\n</field>\n```\n\n_Note that the order of the items is taken into account when rendering the field._\n\nThis is used for the `files` field of the `files` diff block:\n```xml\n<field schema=\"files\" name=\"files\">\n  <items>\n    <!-- Display the file only, not the filename which is managed\n         by the file widget type -->\n    <item name=\"file\" displayContentDiffLinks=\"true\" />\n  </items>\n</field>\n```\n\nIf no `items` are specified, all the property items are displayed.\n\nFor content properties (that hold a blob) or string ones you can set the `displayContentDiffLinks` attribute to `true` on a `field` or an `item` to display the content diff links.\nThese links will open a fancybox showing the detailed content diff using the usual green and red colors to distinguish the added/removed parts of the content.\nFor now, 2 links are displayed: _Textual diff_ based on a text conversion and _Html diff_ based on an html conversion (keeps the content layout).\n\n#### Configuring property widgets with the widgets extension point\n\n##### Principle\n\nWhen rendering a `diffBlock`, the `DiffDisplayService` builds a layout definition on the fly, including a layout row for each `field` of the `diffBlock`.\nEach row contains a widget definition for the `field`, and the layout template renders 2 instances of this widget definition: one for the left document and one for the right document.\nThe content diff links, if displayed, are also rendered by a widget inside the layout row.\n\nHow is the widget definition built for a given `field`?\nA lookup is done in the `LayoutStore` service to find a specific widget definition named with the xpath of the property.\nIf such a definition is not found, a lookup is done to find a generic widget definition named with the type of the property.\n\nThis allows you to only contribute a specific widget definition if the generic one doesn't match your needs for a given field, typically if you need a custom template, label or custom properties.\n\n##### Example\n\nLets say we have contributed the following `diffBlock`:\n```xml\n<diffBlock name=\"myCustomBlock\" label=\"label.diffBlock.custom\">\n  <fields>\n    <field schema=\"file\" name=\"content\" />\n    <field schema=\"dublincore\" name=\"title\" />\n  </fields>\n</diffBlock>\n```\n\nand the following widgets to the `widgets` extension point of the `org.nuxeo.ecm.platform.forms.layout.LayoutStore` component:\n```xml\n<extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n  point=\"widgets\">\n\n  <widget name=\"file:content\" type=\"file\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <labels>\n      <label mode=\"any\">label.summary.download.file</label>\n    </labels>\n    <translated>true</translated>\n    <properties mode=\"any\">\n    </properties>\n  </widget>\n\n  <widget name=\"string\" type=\"template\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <properties mode=\"any\">\n      <property name=\"widgetType\">text</property>\n      <property name=\"template\">\n        /widgets/generic_diff_widget_template.xhtml\n      </property>\n    </properties>\n  </widget>\n\n</extension>\n```\n\nWhen rendering the \"myCustomBlock\" `diffBlock`, the `DiffDisplayService` will:\n\n- Look for a specific widget definition named \"file:content\" in the `LayoutStore`, find it and use it for the \"file:content\" field.\n\n- Look for a specific widget definition named \"dublincore:title\" in the `LayoutStore`, won't find it and therefore will look for a generic widget definition named with the field type, ie. \"string\", find it and use it for the dublincore:title field.\n\nIn this use case, the \"string\" generic widget definition is sufficient to display the \"dublincore:title\" field.\nIt uses a widget of type \"text\" with \"label.dublincore.title\" as a label and \"dublincore:title\" as a field definition.\nWe can easily understand here the interest of generic widgets: once you have the type and xpath of a property, the matching widget definition can be computed on the fly using the property type to guess the widget type (\"string\" => \"text\", \"date\" => \"datetime\", etc.) and the property xpath for the field definition and label.\n\nThe \"file:content\" specific widget definition is contributed here to use a custom label \"label.summary.download.file\" instead of the one that would have been generated for the \"content\" generic widget definition: \"label.file.content\".\n\n_Note that in both cases (generic and specific) you don't need to define the widget field definitions since they are automatically computed from the property xpath, except in particular cases like \"note:note\" where the \"mime-type\" field is needed._\n\n##### List and complex properties\n\nYou might already know that the widgets used to display list and complex properties have subwidgets.\nIn the case of a list property, a subwidget is needed for the list items; in the case of a complex property, a subwidget is needed for each item of the complex property.\nThe lookup done by the `DiffDisplayService_` for the first-level widgets is also done recursively for the subwidgets!\n\n###### List property\n\nFor a list property, lets take the example of \"dublincore:contributors\", which is a string list.\n\n- To display the list, nothing special is needed so the \"scalarList\" generic widget definition can be used.\n\n- To display a list item (a contributor, which is of type \"string\"), the \"string\" generic widget definition doesn't match our needs: it would display the contributor's username whereas we want to display its fullname (firstname lastname).\nSo we need a specific widget definition for the list items subwidget to use a custom template able to display the contributor's fullname.\nThe name of this widget definition must match the xpath of the list item property, ie. \"dublincore:contributors/item\".\n\nTherefore, two widget definitions are involved:\n\n- The \"scalarList\" generic widget definition:\n\n```xml\n<widget name=\"scalarList\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"displayAllItems\">false</property>\n    <property name=\"displayItemIndexes\">true</property>\n    <property name=\"template\">\n      /widgets/list_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"dublincore:contributors/item\" specific widget definition:\n\n```xml\n<widget name=\"dublincore:contributors/item\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.dublincore.contributors.item</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"template\">/widgets/contributors_item_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n###### Complex property\n\nFor a complex property, lets take the example of a \"complextypes:complex\" property with two items \"stringItem\" and \"directoryItem\".\n\"stringItem\" is a simple string, but \"directoryItem\" is a string that needs to be bound to the \"myDirectory\" directory.\n\n- To display the complex property, nothing special is needed so the \"complex\" generic widget definition can be used.\n\n- To display the \"directoryItem\" item, the \"string\" generic widget definition doesn't match our needs: it would display the directory entry code stored in the backend whereas we want to display its label.\nSo we need a specific widget definition for the \"directoryItem\" subwidget to use the \"selectOneDirectory\" widget type bound to the \"myDirectory\" directory.\nAs for a list item, the name of this widget definition must match the xpath of the complex property item, ie. \"complextypes:complex/directoryItem\".\n\nTherefore, two widget definitions are involved:\n\n- The \"complex\" generic widget definition:\n\n```xml\n<widget name=\"complex\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"template\">\n      /widgets/complex_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"complextypes:complex/directoryItem\" specific widget definition:\n\n```xml\n<widget name=\"complextypes:complex/directoryItem\" type=\"selectOneDirectory\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.complextypes.complex.directoryItem</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"directoryName\">myDirectory</property>\n    <property name=\"localize\">true</property>\n    <property name=\"ordering\">ordering,label</property>\n  </properties>\n</widget>\n```\n\n###### Useful widget properties\n\nYou can use the following properties on a list widget definition (typically \"scalarList\", \"complexList\" or \"files:files\"):\n\n`<property name=\"displayAllItems\">[true|false]</property>`\nIf set to `true`, all the list items will be displayed, otherwise only the different ones will be.\n\n`<property name=\"displayItemIndexes\">[true|false]</property>`\nIf set to `true`, a subwidget will be added to the widget definition to display the list item indexes.\n\nYou can use the following property on a complex widget definition (typically \"complex\"):\n\n`<property name=\"display\">[inline|*]</property>`\nIf set to `inline` the complex items will be displayed as a table with one line and one column per item, otherwise as a table with one column and one line per item.\n\n##### About the value bound to the diff widgets\n\nIf you take a look at [layout_diff_template.xhtml](nuxeo-diff-jsf/src/main/resources/web/nuxeo.war/layouts/layout_diff_template.xhtml), you will see that the `value` passed to the `<nxl:widget>` tag is `#{value.leftValue}` or `#{value.rightValue}`, `value` being the object passed to the `<nxl:layout>` tag `value` attribute: `diffDisplayBlock`, of type `DiffDisplayBlockImpl`.\nThe `leftValue` and `rightValue` members of `DiffDisplayBlockImpl` are of type `Map<String, Map<String, PropertyDiffDisplay>>`. The first level Map keys are schema names, the second level ones are field keys.\nFinally, the `PropertyDiffDisplay` object has two members: `value` and `styleClass`, `value` holding the value to display and `styleClass` the css style class to apply to the &lt;span&gt; wrapping the value.\n\nFor example if we compare two documents where only the \"dublincore:title\" property is different (\"My first doc\" and \"My second doc\") we could have the following `diffDisplayBlock` object:\n\n```java\ndiffDisplayBlock.getLeftValue() = {dublincore={title={value=\"My first doc\", styleClass=\"redBackgroundColor\"}}}\ndiffDisplayBlock.getRightValue() = {dublincore={title={value=\"My second doc\", styleClass=\"greenBackgroundColor\"}}}\n```\n\nOn the widget side, the field definitions must match the `diffDisplayBlock` object structure, that's why the generated field definitions of the widget used for \"dublincore:title\" would be:\n\n```xml\n<fields>\n  <field>dublincore:title/value</field>\n  <field>dublincore:title/styleClass</field>\n</fields>\n```\n\nThis is important to know when designing a custom template for a diff widget (ie. where field definitions are automatically generated): you can use `#{field_0}` for the value itself and `#{field_1`} for the css style class associated to the value.\nBy default, only the items of a complex property or of a list property where the `displayAllItems` widget property is `true` can have a styleClass equal to `redBackgroundColor` or `greenBackgroundColor` in order to highlight the different items among all.\n\n#### To summarize: what you need to contribute to have a nice diff result for your custom document types\n\n- A `diffDisplay` contribution for each document type.\n\n- The associated `diffBlock` contributions. Don't forget that you can specify the items you want to display for a complex property and the fields/items for which you want to display the content diff links.\n\n- The specific widgets needed when the generic ones don't match your needs. Typically for a date property if you need to change the date format, or for a property bound to a directory to specifiy the directory name. Also don't forget that you can contribute a specific widget for a complex property item or a list item, using the item xpath.\n\n- The labels for each `diffBlock`, each widget and each subwidget in your `messages*.properties` files.\nFor example:\n\n```\nlabel.diffBlock.custom=My custom diff block title\nlabel.customSchema.customField=Custom field\nlabel.customSchema.customField.firstComplexItem=First item of the complex custom field\n```\n\n### Content diff\n\nWork in progress!\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "56f1f6c0b7c5c1f67502f8718bf655e4",
            "encoding": "UTF-8",
            "length": 16731,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.diff.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.diff.service.impl.DocumentDiffServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    This service allows to make a diff between two\n    documents, or two versions of a document.\n\n    @author\n    Antoine Taillefer\n  \n",
          "documentationHtml": "<p>\nThis service allows to make a diff between two\ndocuments, or two versions of a document.\n</p><p>\nAntoine Taillefer\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.core/org.nuxeo.ecm.diff.service.DocumentDiffService",
          "name": "org.nuxeo.ecm.diff.service.DocumentDiffService",
          "requirements": [],
          "resolutionOrder": 177,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.diff.service.DocumentDiffService",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.core/org.nuxeo.ecm.diff.service.DocumentDiffService/Services/org.nuxeo.ecm.diff.service.DocumentDiffService",
              "id": "org.nuxeo.ecm.diff.service.DocumentDiffService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 191,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.service.DocumentDiffService\">\n\n  <documentation>\n    This service allows to make a diff between two\n    documents, or two versions of a document.\n\n    @author\n    Antoine Taillefer\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.diff.service.impl.DocumentDiffServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.diff.service.DocumentDiffService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-diff-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-diff-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm",
      "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.core",
      "id": "org.nuxeo.diff.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: 5.6\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.diff.core\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.diff.core;singleton:=true\r\nNuxeo-Component: OSGI-INF/document-diff-service.xml\r\n\r\n",
      "maxResolutionOrder": 177,
      "minResolutionOrder": 177,
      "packages": [
        "nuxeo-diff"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Diff\n\nThis repo hosts the source code of a plugin for Nuxeo Platform that allows to render a diff between two documents or two versions of a document.\nThe comparison takes into account all the properties shared by the documents, which means that if a comparison is done between two documents of a different type, only the schemas in common will be \"diffed\".\nThe comparison also takes into account blob-type properties.\n\n\n## Building and deploying\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Diff Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-diff).\n\n## Configuring\n\n### Diff display\n\nThe `DiffDisplayService` offers several extension points to configure the document diff display.\nMost of the code samples exposed here can be found in the [diff-display-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-display-contrib.xml) and [diff-widgets-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-widgets-contrib.xml) files.\n\n#### Configuring groups of properties to display with the diffDisplay extension point.\n\nA `diffDisplay` contribution represents a number of `diffBlocks` that you want to display when asking for a document comparison.\nIt is bound to a document type.\nA `diffBlock` contribution represents a number of properties (fields) that you want to display (see next section).\n\nWhen asking for the comparison between 2 versions of a document, the `diffDisplay` bound to the document type or a super type is used.\nIf no `diffDisplay` is found for this type or a super type a fall back is done on the default diff display mode: one block per document schema and for each block all the fields of the schema that are different.\n\n*Beware that in this case the order of the schemas and of the fields is undefined.*\n\nWhen asking for the comparison between 2 documents:\n- If they are of the same type: if  a `diffDisplay` is found for this type or a super type then it is used, else a fall back is done on the default diff display mode.\n- If they are of different types: if  a `diffDisplay` is found for a common super type then it is used, else a fall back is done on the default diff display mode.\n\nFor example, this is the `diffDisplay` contribution bound to the _File_ type:\n```xml\n<diffDisplay type=\"File\">\n  <diffBlocks>\n    <diffBlock name=\"heading\" />\n    <diffBlock name=\"dublincore\" />\n    <diffBlock name=\"files\" />\n  </diffDisplay>\n</diffBlocks>\n```\n\n_Note that the order of the diffBlocks is taken into account when rendering the diff display._\n\n#### Configuring a group of properties to display with the diffBlock extension point\n\nA `diffBlock` contribution represents a number of `fields` that you want to display. It is rendered as a foldable box.\nThe `label` attribute of a `diffBlock` contribution is used as the title of the foldable box.\nA `field` is defined by its `schema` and its `name`.\n\nFor example, this is the \"heading\" `diffBlock` contribution:\n```xml\n<diffBlock name=\"heading\" label=\"label.diffBlock.heading\">\n  <fields>\n    <field schema=\"dublincore\" name=\"title\" />\n    <field schema=\"dublincore\" name=\"description\" />\n  </fields>\n</diffBlock>\n```\n_Note that the order of the fields is taken into account when rendering the diff block._\n\nFor complex properties, you can contribute inside the `field` element the property `items` that you want to display:\n```xml\n<field schema=\"complextypes\" name=\"complex\">\n  <items>\n    <item name=\"stringItem\" />\n    <item name=\"thirdItem\" />\n    <item name=\"fourthItem\" />\n  </items>\n</field>\n```\n\n_Note that the order of the items is taken into account when rendering the field._\n\nThis is used for the `files` field of the `files` diff block:\n```xml\n<field schema=\"files\" name=\"files\">\n  <items>\n    <!-- Display the file only, not the filename which is managed\n         by the file widget type -->\n    <item name=\"file\" displayContentDiffLinks=\"true\" />\n  </items>\n</field>\n```\n\nIf no `items` are specified, all the property items are displayed.\n\nFor content properties (that hold a blob) or string ones you can set the `displayContentDiffLinks` attribute to `true` on a `field` or an `item` to display the content diff links.\nThese links will open a fancybox showing the detailed content diff using the usual green and red colors to distinguish the added/removed parts of the content.\nFor now, 2 links are displayed: _Textual diff_ based on a text conversion and _Html diff_ based on an html conversion (keeps the content layout).\n\n#### Configuring property widgets with the widgets extension point\n\n##### Principle\n\nWhen rendering a `diffBlock`, the `DiffDisplayService` builds a layout definition on the fly, including a layout row for each `field` of the `diffBlock`.\nEach row contains a widget definition for the `field`, and the layout template renders 2 instances of this widget definition: one for the left document and one for the right document.\nThe content diff links, if displayed, are also rendered by a widget inside the layout row.\n\nHow is the widget definition built for a given `field`?\nA lookup is done in the `LayoutStore` service to find a specific widget definition named with the xpath of the property.\nIf such a definition is not found, a lookup is done to find a generic widget definition named with the type of the property.\n\nThis allows you to only contribute a specific widget definition if the generic one doesn't match your needs for a given field, typically if you need a custom template, label or custom properties.\n\n##### Example\n\nLets say we have contributed the following `diffBlock`:\n```xml\n<diffBlock name=\"myCustomBlock\" label=\"label.diffBlock.custom\">\n  <fields>\n    <field schema=\"file\" name=\"content\" />\n    <field schema=\"dublincore\" name=\"title\" />\n  </fields>\n</diffBlock>\n```\n\nand the following widgets to the `widgets` extension point of the `org.nuxeo.ecm.platform.forms.layout.LayoutStore` component:\n```xml\n<extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n  point=\"widgets\">\n\n  <widget name=\"file:content\" type=\"file\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <labels>\n      <label mode=\"any\">label.summary.download.file</label>\n    </labels>\n    <translated>true</translated>\n    <properties mode=\"any\">\n    </properties>\n  </widget>\n\n  <widget name=\"string\" type=\"template\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <properties mode=\"any\">\n      <property name=\"widgetType\">text</property>\n      <property name=\"template\">\n        /widgets/generic_diff_widget_template.xhtml\n      </property>\n    </properties>\n  </widget>\n\n</extension>\n```\n\nWhen rendering the \"myCustomBlock\" `diffBlock`, the `DiffDisplayService` will:\n\n- Look for a specific widget definition named \"file:content\" in the `LayoutStore`, find it and use it for the \"file:content\" field.\n\n- Look for a specific widget definition named \"dublincore:title\" in the `LayoutStore`, won't find it and therefore will look for a generic widget definition named with the field type, ie. \"string\", find it and use it for the dublincore:title field.\n\nIn this use case, the \"string\" generic widget definition is sufficient to display the \"dublincore:title\" field.\nIt uses a widget of type \"text\" with \"label.dublincore.title\" as a label and \"dublincore:title\" as a field definition.\nWe can easily understand here the interest of generic widgets: once you have the type and xpath of a property, the matching widget definition can be computed on the fly using the property type to guess the widget type (\"string\" => \"text\", \"date\" => \"datetime\", etc.) and the property xpath for the field definition and label.\n\nThe \"file:content\" specific widget definition is contributed here to use a custom label \"label.summary.download.file\" instead of the one that would have been generated for the \"content\" generic widget definition: \"label.file.content\".\n\n_Note that in both cases (generic and specific) you don't need to define the widget field definitions since they are automatically computed from the property xpath, except in particular cases like \"note:note\" where the \"mime-type\" field is needed._\n\n##### List and complex properties\n\nYou might already know that the widgets used to display list and complex properties have subwidgets.\nIn the case of a list property, a subwidget is needed for the list items; in the case of a complex property, a subwidget is needed for each item of the complex property.\nThe lookup done by the `DiffDisplayService_` for the first-level widgets is also done recursively for the subwidgets!\n\n###### List property\n\nFor a list property, lets take the example of \"dublincore:contributors\", which is a string list.\n\n- To display the list, nothing special is needed so the \"scalarList\" generic widget definition can be used.\n\n- To display a list item (a contributor, which is of type \"string\"), the \"string\" generic widget definition doesn't match our needs: it would display the contributor's username whereas we want to display its fullname (firstname lastname).\nSo we need a specific widget definition for the list items subwidget to use a custom template able to display the contributor's fullname.\nThe name of this widget definition must match the xpath of the list item property, ie. \"dublincore:contributors/item\".\n\nTherefore, two widget definitions are involved:\n\n- The \"scalarList\" generic widget definition:\n\n```xml\n<widget name=\"scalarList\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"displayAllItems\">false</property>\n    <property name=\"displayItemIndexes\">true</property>\n    <property name=\"template\">\n      /widgets/list_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"dublincore:contributors/item\" specific widget definition:\n\n```xml\n<widget name=\"dublincore:contributors/item\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.dublincore.contributors.item</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"template\">/widgets/contributors_item_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n###### Complex property\n\nFor a complex property, lets take the example of a \"complextypes:complex\" property with two items \"stringItem\" and \"directoryItem\".\n\"stringItem\" is a simple string, but \"directoryItem\" is a string that needs to be bound to the \"myDirectory\" directory.\n\n- To display the complex property, nothing special is needed so the \"complex\" generic widget definition can be used.\n\n- To display the \"directoryItem\" item, the \"string\" generic widget definition doesn't match our needs: it would display the directory entry code stored in the backend whereas we want to display its label.\nSo we need a specific widget definition for the \"directoryItem\" subwidget to use the \"selectOneDirectory\" widget type bound to the \"myDirectory\" directory.\nAs for a list item, the name of this widget definition must match the xpath of the complex property item, ie. \"complextypes:complex/directoryItem\".\n\nTherefore, two widget definitions are involved:\n\n- The \"complex\" generic widget definition:\n\n```xml\n<widget name=\"complex\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"template\">\n      /widgets/complex_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"complextypes:complex/directoryItem\" specific widget definition:\n\n```xml\n<widget name=\"complextypes:complex/directoryItem\" type=\"selectOneDirectory\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.complextypes.complex.directoryItem</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"directoryName\">myDirectory</property>\n    <property name=\"localize\">true</property>\n    <property name=\"ordering\">ordering,label</property>\n  </properties>\n</widget>\n```\n\n###### Useful widget properties\n\nYou can use the following properties on a list widget definition (typically \"scalarList\", \"complexList\" or \"files:files\"):\n\n`<property name=\"displayAllItems\">[true|false]</property>`\nIf set to `true`, all the list items will be displayed, otherwise only the different ones will be.\n\n`<property name=\"displayItemIndexes\">[true|false]</property>`\nIf set to `true`, a subwidget will be added to the widget definition to display the list item indexes.\n\nYou can use the following property on a complex widget definition (typically \"complex\"):\n\n`<property name=\"display\">[inline|*]</property>`\nIf set to `inline` the complex items will be displayed as a table with one line and one column per item, otherwise as a table with one column and one line per item.\n\n##### About the value bound to the diff widgets\n\nIf you take a look at [layout_diff_template.xhtml](nuxeo-diff-jsf/src/main/resources/web/nuxeo.war/layouts/layout_diff_template.xhtml), you will see that the `value` passed to the `<nxl:widget>` tag is `#{value.leftValue}` or `#{value.rightValue}`, `value` being the object passed to the `<nxl:layout>` tag `value` attribute: `diffDisplayBlock`, of type `DiffDisplayBlockImpl`.\nThe `leftValue` and `rightValue` members of `DiffDisplayBlockImpl` are of type `Map<String, Map<String, PropertyDiffDisplay>>`. The first level Map keys are schema names, the second level ones are field keys.\nFinally, the `PropertyDiffDisplay` object has two members: `value` and `styleClass`, `value` holding the value to display and `styleClass` the css style class to apply to the &lt;span&gt; wrapping the value.\n\nFor example if we compare two documents where only the \"dublincore:title\" property is different (\"My first doc\" and \"My second doc\") we could have the following `diffDisplayBlock` object:\n\n```java\ndiffDisplayBlock.getLeftValue() = {dublincore={title={value=\"My first doc\", styleClass=\"redBackgroundColor\"}}}\ndiffDisplayBlock.getRightValue() = {dublincore={title={value=\"My second doc\", styleClass=\"greenBackgroundColor\"}}}\n```\n\nOn the widget side, the field definitions must match the `diffDisplayBlock` object structure, that's why the generated field definitions of the widget used for \"dublincore:title\" would be:\n\n```xml\n<fields>\n  <field>dublincore:title/value</field>\n  <field>dublincore:title/styleClass</field>\n</fields>\n```\n\nThis is important to know when designing a custom template for a diff widget (ie. where field definitions are automatically generated): you can use `#{field_0}` for the value itself and `#{field_1`} for the css style class associated to the value.\nBy default, only the items of a complex property or of a list property where the `displayAllItems` widget property is `true` can have a styleClass equal to `redBackgroundColor` or `greenBackgroundColor` in order to highlight the different items among all.\n\n#### To summarize: what you need to contribute to have a nice diff result for your custom document types\n\n- A `diffDisplay` contribution for each document type.\n\n- The associated `diffBlock` contributions. Don't forget that you can specify the items you want to display for a complex property and the fields/items for which you want to display the content diff links.\n\n- The specific widgets needed when the generic ones don't match your needs. Typically for a date property if you need to change the date format, or for a property bound to a directory to specifiy the directory name. Also don't forget that you can contribute a specific widget for a complex property item or a list item, using the item xpath.\n\n- The labels for each `diffBlock`, each widget and each subwidget in your `messages*.properties` files.\nFor example:\n\n```\nlabel.diffBlock.custom=My custom diff block title\nlabel.customSchema.customField=Custom field\nlabel.customSchema.customField.firstComplexItem=First item of the complex custom field\n```\n\n### Content diff\n\nWork in progress!\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "56f1f6c0b7c5c1f67502f8718bf655e4",
        "encoding": "UTF-8",
        "length": 16731,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-web-resources-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.web.resources.api",
          "org.nuxeo.web.resources.core",
          "org.nuxeo.web.resources.jsf",
          "org.nuxeo.web.resources.rest",
          "org.nuxeo.web.resources.wro"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources",
        "id": "grp:org.nuxeo.web.resources",
        "name": "org.nuxeo.web.resources",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.web.resources.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.web.resources.core.service.WebResourceManagerImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The WebResourceManager service provides extension points for\n    pluggable resources, resource bundles and resource processors.\n\n    @since 7.3\n  \n",
          "documentationHtml": "<p>\nThe WebResourceManager service provides extension points for\npluggable resources, resource bundles and resource processors.\n</p><p>\n&#64;since 7.3\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.WebResources",
              "descriptors": [
                "org.nuxeo.ecm.web.resources.core.ResourceDescriptor"
              ],
              "documentation": "\n\n      The resources extension point allows to declare typed resources, with dependencies.\n\n      Example:\n\n      <code>\n    <resource name=\"foldable-box.js\">\n        <path>scripts/foldable-box.js</path>\n        <require>effects</require>\n    </resource>\n</code>\n\n\n      There are several ways to declare the resource type. It can be retrieved\n      from the resource name ('js' for above example) or declared explicitely,\n      for instance the following declaration is almost equivalent\n      (the resource name changes).\n\n      <code>\n    <resource name=\"foldable-box\" type=\"js\">\n        <path>scripts/foldable-box.js</path>\n        <require>effects</require>\n    </resource>\n</code>\n\n\n      The above example also specifies a dependency on a resource named \"effects\",\n      any number of dependencies can be piled up on the declaration:\n\n      <code>\n    <resource name=\"foldable-box\" type=\"js\">\n        <path>scripts/foldable-box.js</path>\n        <require>effects</require>\n        <require>jquery</require>\n    </resource>\n</code>\n\n\n      When aggregating resources with dependencies, order will be respected:\n      for instance, the effects and jquery resources will be declared *before*\n      the foldable-box resource in above example.\n\n      The \"path\" element resolves the resource inside the jar that holds the\n      extension point contribution declaration. An alternative way can be used\n      to reference the resource path in the nuxeo.war directory:\n\n      <code>\n    <resource name=\"foldable-box.js\">\n        <uri>/scripts/foldable-box.js</uri>\n    </resource>\n</code>\n\n\n      Notice the \"uri\" element instead of the \"path\", and leading slash\n      (making the resource lookup from the war directory root).\n\n      When only the path is filled, the resource uri is filled automatically\n      with the resource classpath uri in the corresponding runtime bundle context.\n\n      When using the uri element, wildcard are supported, for instance:\n\n      <code>\n    <resource name=\"scripts.js\">\n        <uri>/scripts/*.js</uri>\n    </resource>\n</code>\n\n\n      Alternatively, classpath, file URL and external URLs are allowed:\n      <code>\n    <uri>classpath:com/mycompany/resources/script.js</uri>\n    <uri>file:c:/temp/file.css</uri>\n    <uri>http://www.site.com/static/style.css</uri>\n</code>\n\n\n      Minimization, URL rewriting, etc... processing of resources can be applied\n      implicitly to all resources of a given type.\n      Resources definition can also explicitly reference processors that\n      should to be applied to them, see the \"processors\" extension point documentation.\n\n      <code>\n    <resource name=\"foldable-box.css\">\n        <path>css/foldable-box.css</path>\n        <processors>\n            <processor>flavor</processor>\n        </processors>\n    </resource>\n</code>\n",
              "documentationHtml": "<p>\nThe resources extension point allows to declare typed resources, with dependencies.\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;resource name&#61;&#34;foldable-box.js&#34;&gt;\n        &lt;path&gt;scripts/foldable-box.js&lt;/path&gt;\n        &lt;require&gt;effects&lt;/require&gt;\n    &lt;/resource&gt;\n</code></pre><p>\nThere are several ways to declare the resource type. It can be retrieved\nfrom the resource name (&#39;js&#39; for above example) or declared explicitely,\nfor instance the following declaration is almost equivalent\n(the resource name changes).\n</p><p>\n</p><pre><code>    &lt;resource name&#61;&#34;foldable-box&#34; type&#61;&#34;js&#34;&gt;\n        &lt;path&gt;scripts/foldable-box.js&lt;/path&gt;\n        &lt;require&gt;effects&lt;/require&gt;\n    &lt;/resource&gt;\n</code></pre><p>\nThe above example also specifies a dependency on a resource named &#34;effects&#34;,\nany number of dependencies can be piled up on the declaration:\n</p><p>\n</p><pre><code>    &lt;resource name&#61;&#34;foldable-box&#34; type&#61;&#34;js&#34;&gt;\n        &lt;path&gt;scripts/foldable-box.js&lt;/path&gt;\n        &lt;require&gt;effects&lt;/require&gt;\n        &lt;require&gt;jquery&lt;/require&gt;\n    &lt;/resource&gt;\n</code></pre><p>\nWhen aggregating resources with dependencies, order will be respected:\nfor instance, the effects and jquery resources will be declared *before*\nthe foldable-box resource in above example.\n</p><p>\nThe &#34;path&#34; element resolves the resource inside the jar that holds the\nextension point contribution declaration. An alternative way can be used\nto reference the resource path in the nuxeo.war directory:\n</p><p>\n</p><pre><code>    &lt;resource name&#61;&#34;foldable-box.js&#34;&gt;\n        &lt;uri&gt;/scripts/foldable-box.js&lt;/uri&gt;\n    &lt;/resource&gt;\n</code></pre><p>\nNotice the &#34;uri&#34; element instead of the &#34;path&#34;, and leading slash\n(making the resource lookup from the war directory root).\n</p><p>\nWhen only the path is filled, the resource uri is filled automatically\nwith the resource classpath uri in the corresponding runtime bundle context.\n</p><p>\nWhen using the uri element, wildcard are supported, for instance:\n</p><p>\n</p><pre><code>    &lt;resource name&#61;&#34;scripts.js&#34;&gt;\n        &lt;uri&gt;/scripts/*.js&lt;/uri&gt;\n    &lt;/resource&gt;\n</code></pre><p>\nAlternatively, classpath, file URL and external URLs are allowed:\n</p><p></p><pre><code>    &lt;uri&gt;classpath:com/mycompany/resources/script.js&lt;/uri&gt;\n    &lt;uri&gt;file:c:/temp/file.css&lt;/uri&gt;\n    &lt;uri&gt;http://www.site.com/static/style.css&lt;/uri&gt;\n</code></pre><p>\nMinimization, URL rewriting, etc... processing of resources can be applied\nimplicitly to all resources of a given type.\nResources definition can also explicitly reference processors that\nshould to be applied to them, see the &#34;processors&#34; extension point documentation.\n</p><p>\n</p><pre><code>    &lt;resource name&#61;&#34;foldable-box.css&#34;&gt;\n        &lt;path&gt;css/foldable-box.css&lt;/path&gt;\n        &lt;processors&gt;\n            &lt;processor&gt;flavor&lt;/processor&gt;\n        &lt;/processors&gt;\n    &lt;/resource&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.core/org.nuxeo.ecm.platform.WebResources/ExtensionPoints/org.nuxeo.ecm.platform.WebResources--resources",
              "id": "org.nuxeo.ecm.platform.WebResources--resources",
              "label": "resources (org.nuxeo.ecm.platform.WebResources)",
              "name": "resources",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.WebResources",
              "descriptors": [
                "org.nuxeo.ecm.web.resources.core.ResourceBundleDescriptor"
              ],
              "documentation": "\n\n      The resourceBundles extension point allows to group resources by name.\n\n      Example:\n\n      <code>\n    <bundle name=\"myapp\">\n        <resources>\n            <resource>jquery.js</resource>\n            <resource>foldable-box.js</resource>\n            <resource>foldable-box.css</resource>\n        </resources>\n    </bundle>\n</code>\n\n\n      Bundles support override and merging logics: another module can contribute\n      to the same bundle:\n\n      <code>\n    <bundle name=\"myapp\">\n        <resources append=\"true\">\n            <resource>my.css</resource>\n        </resources>\n    </bundle>\n</code>\n\n\n      If the attribute append is not set, or set to false, resources will be overridden.\n\n      Pages and page elements should refer to resource bundle to allow pluggability.\n\n    \n",
              "documentationHtml": "<p>\nThe resourceBundles extension point allows to group resources by name.\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;bundle name&#61;&#34;myapp&#34;&gt;\n        &lt;resources&gt;\n            &lt;resource&gt;jquery.js&lt;/resource&gt;\n            &lt;resource&gt;foldable-box.js&lt;/resource&gt;\n            &lt;resource&gt;foldable-box.css&lt;/resource&gt;\n        &lt;/resources&gt;\n    &lt;/bundle&gt;\n</code></pre><p>\nBundles support override and merging logics: another module can contribute\nto the same bundle:\n</p><p>\n</p><pre><code>    &lt;bundle name&#61;&#34;myapp&#34;&gt;\n        &lt;resources append&#61;&#34;true&#34;&gt;\n            &lt;resource&gt;my.css&lt;/resource&gt;\n        &lt;/resources&gt;\n    &lt;/bundle&gt;\n</code></pre><p>\nIf the attribute append is not set, or set to false, resources will be overridden.\n</p><p>\nPages and page elements should refer to resource bundle to allow pluggability.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.core/org.nuxeo.ecm.platform.WebResources/ExtensionPoints/org.nuxeo.ecm.platform.WebResources--bundles",
              "id": "org.nuxeo.ecm.platform.WebResources--bundles",
              "label": "bundles (org.nuxeo.ecm.platform.WebResources)",
              "name": "bundles",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.WebResources",
              "descriptors": [
                "org.nuxeo.ecm.web.resources.core.ProcessorDescriptor"
              ],
              "documentation": "\n\n      The processors extension point allows to define what processors should\n      apply to resources. Some builtin processors apply to all resources,\n      implicitly, this is the case for all processors coming with wro4j.\n\n      Other processors require the resource to reference them explicitly\n      in the resource definition (like the \"flavor\" Nuxeo-specific processor).\n\n      Example:\n\n      <code>\n    <processor name=\"myProc\" order=\"10\" type=\"wroPost\">\n        <class>org.nuxeo.ecm.web.resources.tests.MockProcessor</class>\n    </processor>\n</code>\n\n\n      The processor type is a marker that allows to group and order processors\n      for a given usage (here, as a wro4j post processor).\n\n      Multiple types are also supported:\n\n      <code>\n    <processor name=\"myProc\" order=\"10\">\n        <types>\n            <type>wropPre</type>\n            <type>wropPost</type>\n        </types>\n        <class>org.nuxeo.ecm.web.resources.tests.MockProcessor</class>\n    </processor>\n</code>\n\n\n      The processor class usually needs to follow a given interface depending on\n      its type, but this check is only done at runtime.\n      For instance, processors with the \"wroPre\" type have to extend\n      ro.isdc.wro.model.resource.processor.ResourcePreProcessor and processors\n      with the \"wroPost\" type have to extend\n      ro.isdc.wro.model.resource.processor.ResourcePostProcessor.\n\n      Builtin wro processors can also be registered without mentioning a class,\n      using their wro alias:\n\n      <code>\n    <processor name=\"cssMin\" order=\"30\" type=\"wroPre\"/>\n</code>\n\n\n      Some default processors (like cssMin above) are already registered by default\n      in Nuxeo.\n\n    \n",
              "documentationHtml": "<p>\nThe processors extension point allows to define what processors should\napply to resources. Some builtin processors apply to all resources,\nimplicitly, this is the case for all processors coming with wro4j.\n</p><p>\nOther processors require the resource to reference them explicitly\nin the resource definition (like the &#34;flavor&#34; Nuxeo-specific processor).\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;processor name&#61;&#34;myProc&#34; order&#61;&#34;10&#34; type&#61;&#34;wroPost&#34;&gt;\n        &lt;class&gt;org.nuxeo.ecm.web.resources.tests.MockProcessor&lt;/class&gt;\n    &lt;/processor&gt;\n</code></pre><p>\nThe processor type is a marker that allows to group and order processors\nfor a given usage (here, as a wro4j post processor).\n</p><p>\nMultiple types are also supported:\n</p><p>\n</p><pre><code>    &lt;processor name&#61;&#34;myProc&#34; order&#61;&#34;10&#34;&gt;\n        &lt;types&gt;\n            &lt;type&gt;wropPre&lt;/type&gt;\n            &lt;type&gt;wropPost&lt;/type&gt;\n        &lt;/types&gt;\n        &lt;class&gt;org.nuxeo.ecm.web.resources.tests.MockProcessor&lt;/class&gt;\n    &lt;/processor&gt;\n</code></pre><p>\nThe processor class usually needs to follow a given interface depending on\nits type, but this check is only done at runtime.\nFor instance, processors with the &#34;wroPre&#34; type have to extend\nro.isdc.wro.model.resource.processor.ResourcePreProcessor and processors\nwith the &#34;wroPost&#34; type have to extend\nro.isdc.wro.model.resource.processor.ResourcePostProcessor.\n</p><p>\nBuiltin wro processors can also be registered without mentioning a class,\nusing their wro alias:\n</p><p>\n</p><pre><code>    &lt;processor name&#61;&#34;cssMin&#34; order&#61;&#34;30&#34; type&#61;&#34;wroPre&#34;/&gt;\n</code></pre><p>\nSome default processors (like cssMin above) are already registered by default\nin Nuxeo.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.core/org.nuxeo.ecm.platform.WebResources/ExtensionPoints/org.nuxeo.ecm.platform.WebResources--processors",
              "id": "org.nuxeo.ecm.platform.WebResources--processors",
              "label": "processors (org.nuxeo.ecm.platform.WebResources)",
              "name": "processors",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.core/org.nuxeo.ecm.platform.WebResources",
          "name": "org.nuxeo.ecm.platform.WebResources",
          "requirements": [],
          "resolutionOrder": 918,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.WebResources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.core/org.nuxeo.ecm.platform.WebResources/Services/org.nuxeo.ecm.web.resources.api.service.WebResourceManager",
              "id": "org.nuxeo.ecm.web.resources.api.service.WebResourceManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 838,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.WebResources\">\n  <documentation>\n    The WebResourceManager service provides extension points for\n    pluggable resources, resource bundles and resource processors.\n\n    @since 7.3\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.web.resources.api.service.WebResourceManager\" />\n  </service>\n  <implementation class=\"org.nuxeo.ecm.web.resources.core.service.WebResourceManagerImpl\" />\n\n  <extension-point name=\"resources\">\n    <documentation>\n\n      The resources extension point allows to declare typed resources, with dependencies.\n\n      Example:\n\n      <code>\n        <resource name=\"foldable-box.js\">\n          <path>scripts/foldable-box.js</path>\n          <require>effects</require>\n        </resource>\n      </code>\n\n      There are several ways to declare the resource type. It can be retrieved\n      from the resource name ('js' for above example) or declared explicitely,\n      for instance the following declaration is almost equivalent\n      (the resource name changes).\n\n      <code>\n        <resource name=\"foldable-box\" type=\"js\">\n          <path>scripts/foldable-box.js</path>\n          <require>effects</require>\n        </resource>\n      </code>\n\n      The above example also specifies a dependency on a resource named \"effects\",\n      any number of dependencies can be piled up on the declaration:\n\n      <code>\n        <resource name=\"foldable-box\" type=\"js\">\n          <path>scripts/foldable-box.js</path>\n          <require>effects</require>\n          <require>jquery</require>\n        </resource>\n      </code>\n\n      When aggregating resources with dependencies, order will be respected:\n      for instance, the effects and jquery resources will be declared *before*\n      the foldable-box resource in above example.\n\n      The \"path\" element resolves the resource inside the jar that holds the\n      extension point contribution declaration. An alternative way can be used\n      to reference the resource path in the nuxeo.war directory:\n\n      <code>\n        <resource name=\"foldable-box.js\">\n          <uri>/scripts/foldable-box.js</uri>\n        </resource>\n      </code>\n\n      Notice the \"uri\" element instead of the \"path\", and leading slash\n      (making the resource lookup from the war directory root).\n\n      When only the path is filled, the resource uri is filled automatically\n      with the resource classpath uri in the corresponding runtime bundle context.\n\n      When using the uri element, wildcard are supported, for instance:\n\n      <code>\n        <resource name=\"scripts.js\">\n          <uri>/scripts/*.js</uri>\n        </resource>\n      </code>\n\n      Alternatively, classpath, file URL and external URLs are allowed:\n      <code>\n        <uri>classpath:com/mycompany/resources/script.js</uri>\n        <uri>file:c:/temp/file.css</uri>\n        <uri>http://www.site.com/static/style.css</uri>\n      </code>\n\n      Minimization, URL rewriting, etc... processing of resources can be applied\n      implicitly to all resources of a given type.\n      Resources definition can also explicitly reference processors that\n      should to be applied to them, see the \"processors\" extension point documentation.\n\n      <code>\n        <resource name=\"foldable-box.css\">\n          <path>css/foldable-box.css</path>\n          <processors>\n            <processor>flavor</processor>\n          </processors>\n        </resource>\n      </code>\n\n    </documentation>\n    <object class=\"org.nuxeo.ecm.web.resources.core.ResourceDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"bundles\">\n    <documentation>\n\n      The resourceBundles extension point allows to group resources by name.\n\n      Example:\n\n      <code>\n        <bundle name=\"myapp\">\n          <resources>\n            <resource>jquery.js</resource>\n            <resource>foldable-box.js</resource>\n            <resource>foldable-box.css</resource>\n          </resources>\n        </bundle>\n      </code>\n\n      Bundles support override and merging logics: another module can contribute\n      to the same bundle:\n\n      <code>\n        <bundle name=\"myapp\">\n          <resources append=\"true\">\n            <resource>my.css</resource>\n          </resources>\n        </bundle>\n      </code>\n\n      If the attribute append is not set, or set to false, resources will be overridden.\n\n      Pages and page elements should refer to resource bundle to allow pluggability.\n\n    </documentation>\n    <object class=\"org.nuxeo.ecm.web.resources.core.ResourceBundleDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"processors\">\n    <documentation>\n\n      The processors extension point allows to define what processors should\n      apply to resources. Some builtin processors apply to all resources,\n      implicitly, this is the case for all processors coming with wro4j.\n\n      Other processors require the resource to reference them explicitly\n      in the resource definition (like the \"flavor\" Nuxeo-specific processor).\n\n      Example:\n\n      <code>\n        <processor name=\"myProc\" type=\"wroPost\" order=\"10\">\n          <class>org.nuxeo.ecm.web.resources.tests.MockProcessor</class>\n        </processor>\n      </code>\n\n      The processor type is a marker that allows to group and order processors\n      for a given usage (here, as a wro4j post processor).\n\n      Multiple types are also supported:\n\n      <code>\n        <processor name=\"myProc\" order=\"10\">\n          <types>\n            <type>wropPre</type>\n            <type>wropPost</type>\n          </types>\n          <class>org.nuxeo.ecm.web.resources.tests.MockProcessor</class>\n        </processor>\n      </code>\n\n      The processor class usually needs to follow a given interface depending on\n      its type, but this check is only done at runtime.\n      For instance, processors with the \"wroPre\" type have to extend\n      ro.isdc.wro.model.resource.processor.ResourcePreProcessor and processors\n      with the \"wroPost\" type have to extend\n      ro.isdc.wro.model.resource.processor.ResourcePostProcessor.\n\n      Builtin wro processors can also be registered without mentioning a class,\n      using their wro alias:\n\n      <code>\n        <processor name=\"cssMin\" type=\"wroPre\" order=\"30\" />\n      </code>\n\n      Some default processors (like cssMin above) are already registered by default\n      in Nuxeo.\n\n    </documentation>\n    <object class=\"org.nuxeo.ecm.web.resources.core.ProcessorDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/webresources-framework.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-web-resources-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.core",
      "id": "org.nuxeo.web.resources.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: 1\r\nBundle-Version: 2023.7.9-t20240130-104915\r\nBundle-Name: Nuxeo Web Resources Core\r\nBundle-SymbolicName: org.nuxeo.web.resources.core;singleton:=true\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: core\r\nNuxeo-Component: OSGI-INF/webresources-framework.xml\r\n\r\n",
      "maxResolutionOrder": 918,
      "minResolutionOrder": 918,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-theme-styling",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.theme.migration",
          "org.nuxeo.theme.styling"
        ],
        "hierarchyPath": "/grp:org.nuxeo.theme",
        "id": "grp:org.nuxeo.theme",
        "name": "org.nuxeo.theme",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.theme.styling",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.styling/org.nuxeo.theme.localconfiguration/Contributions/org.nuxeo.theme.localconfiguration--schema",
              "id": "org.nuxeo.theme.localconfiguration--schema",
              "registrationOrder": 55,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"theme_configuration\" prefix=\"themeconf\" src=\"schemas/theme_configuration.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.styling/org.nuxeo.theme.localconfiguration/Contributions/org.nuxeo.theme.localconfiguration--doctype",
              "id": "org.nuxeo.theme.localconfiguration--doctype",
              "registrationOrder": 53,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"ThemeLocalConfiguration\">\n      <schema name=\"theme_configuration\"/>\n    </facet>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.styling/org.nuxeo.theme.localconfiguration/Contributions/org.nuxeo.theme.localconfiguration--adapters",
              "id": "org.nuxeo.theme.localconfiguration--adapters",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.theme.localconfiguration.LocalThemeConfig\" factory=\"org.nuxeo.theme.localconfiguration.LocalThemeConfigAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.styling/org.nuxeo.theme.localconfiguration",
          "name": "org.nuxeo.theme.localconfiguration",
          "requirements": [],
          "resolutionOrder": 880,
          "services": [],
          "startOrder": 750,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.theme.localconfiguration\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"theme_configuration\" prefix=\"themeconf\"\n      src=\"schemas/theme_configuration.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <facet name=\"ThemeLocalConfiguration\">\n      <schema name=\"theme_configuration\" />\n    </facet>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.theme.localconfiguration.LocalThemeConfig\"\n      factory=\"org.nuxeo.theme.localconfiguration.LocalThemeConfigAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/theme-local-configuration.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.theme.styling.service.ThemeStylingServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The ThemeStylingService service provides extension points for\n    pluggable resources and resource bundles management per page.\n\n    @since 5.5\n  \n",
          "documentationHtml": "<p>\nThe ThemeStylingService service provides extension points for\npluggable resources and resource bundles management per page.\n</p><p>\n&#64;since 5.5\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.theme.styling.service",
              "descriptors": [
                "org.nuxeo.theme.styling.service.descriptors.PageDescriptor"
              ],
              "documentation": "\n      The pages extension point allows to define a set of resources and\n      resource bundles for a given \"page\", as well as additional information\n      about available flavors, for instance.\n\n      Example:\n\n      <code>\n    <page charset=\"utf-8\" name=\"galaxy/default\">\n        <defaultFlavor>default</defaultFlavor>\n        <flavors>\n            <flavor>default</flavor>\n            <flavor>rainbow</flavor>\n        </flavors>\n        <resources>\n            <bundle>nuxeo_includes</bundle>\n            <bundle>nuxeo_base</bundle>\n            <bundle>nuxeo_header_footer</bundle>\n            <bundle>nuxeo_dm</bundle>\n            <resource>my_resource.css</resource>\n        </resources>\n    </page>\n</code>\n\n\n      The charset and favorites are used inside the page head.\n\n      Flavors define available flavors on this page, resource bundles are\n      also references (see corresponding extension points on this same component).\n\n      This extension point accepts merge. When contributing new elements to\n      flavors or resources, the attribute append=\"true\" should be added,\n      otherwise existing configurations will be overridden.\n\n      Attribute \"charset\" is available only since 7.4 (it was previously\n      defined by the Theme extension point layout configuration).\n    \n",
              "documentationHtml": "<p>\nThe pages extension point allows to define a set of resources and\nresource bundles for a given &#34;page&#34;, as well as additional information\nabout available flavors, for instance.\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;page charset&#61;&#34;utf-8&#34; name&#61;&#34;galaxy/default&#34;&gt;\n        &lt;defaultFlavor&gt;default&lt;/defaultFlavor&gt;\n        &lt;flavors&gt;\n            &lt;flavor&gt;default&lt;/flavor&gt;\n            &lt;flavor&gt;rainbow&lt;/flavor&gt;\n        &lt;/flavors&gt;\n        &lt;resources&gt;\n            &lt;bundle&gt;nuxeo_includes&lt;/bundle&gt;\n            &lt;bundle&gt;nuxeo_base&lt;/bundle&gt;\n            &lt;bundle&gt;nuxeo_header_footer&lt;/bundle&gt;\n            &lt;bundle&gt;nuxeo_dm&lt;/bundle&gt;\n            &lt;resource&gt;my_resource.css&lt;/resource&gt;\n        &lt;/resources&gt;\n    &lt;/page&gt;\n</code></pre><p>\nThe charset and favorites are used inside the page head.\n</p><p>\nFlavors define available flavors on this page, resource bundles are\nalso references (see corresponding extension points on this same component).\n</p><p>\nThis extension point accepts merge. When contributing new elements to\nflavors or resources, the attribute append&#61;&#34;true&#34; should be added,\notherwise existing configurations will be overridden.\n</p><p>\nAttribute &#34;charset&#34; is available only since 7.4 (it was previously\ndefined by the Theme extension point layout configuration).\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.styling/org.nuxeo.theme.styling.service/ExtensionPoints/org.nuxeo.theme.styling.service--pages",
              "id": "org.nuxeo.theme.styling.service--pages",
              "label": "pages (org.nuxeo.theme.styling.service)",
              "name": "pages",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.theme.styling.service",
              "descriptors": [
                "org.nuxeo.theme.styling.service.descriptors.FlavorDescriptor"
              ],
              "documentation": "\n      The flavors extension point allows to define a set of variables that can\n      be referenced inside CSS files, for dynamic replacement depending on\n      context, as well as a logo.\n\n      Example:\n\n      <code>\n    <flavor name=\"default\">\n        <label>label.theme.flavor.nuxeo.default</label>\n        <logo>\n            <path>/img/nuxeo_logo.png</path>\n            <previewPath>/img/nuxeo_preview_logo_black.png</previewPath>\n            <width>113</width>\n            <height>20</height>\n            <title>Nuxeo</title>\n        </logo>\n        <links>\n            <icon name=\"icon\">/icons/favicon.png</icon>\n            <icon name=\"shortcut icon\">/icons/favicon.ico</icon>\n        </links>\n        <presetsList>\n            <presets category=\"border\" src=\"themes/palettes/default-borders.properties\"/>\n            <presets category=\"background\" src=\"themes/palettes/default-backgrounds.properties\"/>\n            <presets category=\"font\" src=\"themes/palettes/default-fonts.properties\"/>\n            <presets category=\"color\" src=\"themes/palettes/default-colors.properties\"/>\n        </presetsList>\n        <palettePreview>\n            <colors>\n                <color>#17384e</color>\n                <color>#00adff</color>\n                <color>#00adff</color>\n                <color>#00adff</color>\n                <color>#fff</color>\n                <color>#00adff</color>\n                <color>#404040</color>\n                <color>#cfecff</color>\n                <color>#e6f1ff</color>\n            </colors>\n        </palettePreview>\n    </flavor>\n</code>\n\n\n      The presets files are looked up in the jar holding the flavor declaration.\n      CSS files will reference the flavor marker, as well as additionnal hint\n      about the type of preset to use:\n\n      <code>\n        .nx-page input[type=\"button\"] {\n          background: none \"button (__FLAVOR__ background)\";\n          border-radius: 2px;\n          border: 1px solid;\n          border-color: \"button (__FLAVOR__ border)\";\n          color: \"link.action (__FLAVOR__ color)\";\n          cursor: pointer;\n          display: inline-block;\n          font-size: .95em;\n          font-weight: bold;\n          line-height: 1.3em;\n          margin: 0 .5em .5em 0;\n          padding: .4em .9em;\n          text-decoration: none;\n          white-space: nowrap }\n      </code>\n\n\n      The current flavor can be computed at runtime using negotiator logics, see\n      the negotiators extension point on this service.\n\n      The default flavor defined for a given page will be used if\n      the page does not accept this flavor in its configuration.\n\n      Attribute \"links\" is available only since 7.4 and allows to define\n      favicons visible on the page (it was previously defined by the Theme\n      extension point layout configuration).\n    \n",
              "documentationHtml": "<p>\nThe flavors extension point allows to define a set of variables that can\nbe referenced inside CSS files, for dynamic replacement depending on\ncontext, as well as a logo.\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;flavor name&#61;&#34;default&#34;&gt;\n        &lt;label&gt;label.theme.flavor.nuxeo.default&lt;/label&gt;\n        &lt;logo&gt;\n            &lt;path&gt;/img/nuxeo_logo.png&lt;/path&gt;\n            &lt;previewPath&gt;/img/nuxeo_preview_logo_black.png&lt;/previewPath&gt;\n            &lt;width&gt;113&lt;/width&gt;\n            &lt;height&gt;20&lt;/height&gt;\n            &lt;title&gt;Nuxeo&lt;/title&gt;\n        &lt;/logo&gt;\n        &lt;links&gt;\n            &lt;icon name&#61;&#34;icon&#34;&gt;/icons/favicon.png&lt;/icon&gt;\n            &lt;icon name&#61;&#34;shortcut icon&#34;&gt;/icons/favicon.ico&lt;/icon&gt;\n        &lt;/links&gt;\n        &lt;presetsList&gt;\n            &lt;presets category&#61;&#34;border&#34; src&#61;&#34;themes/palettes/default-borders.properties&#34;/&gt;\n            &lt;presets category&#61;&#34;background&#34; src&#61;&#34;themes/palettes/default-backgrounds.properties&#34;/&gt;\n            &lt;presets category&#61;&#34;font&#34; src&#61;&#34;themes/palettes/default-fonts.properties&#34;/&gt;\n            &lt;presets category&#61;&#34;color&#34; src&#61;&#34;themes/palettes/default-colors.properties&#34;/&gt;\n        &lt;/presetsList&gt;\n        &lt;palettePreview&gt;\n            &lt;colors&gt;\n                &lt;color&gt;#17384e&lt;/color&gt;\n                &lt;color&gt;#00adff&lt;/color&gt;\n                &lt;color&gt;#00adff&lt;/color&gt;\n                &lt;color&gt;#00adff&lt;/color&gt;\n                &lt;color&gt;#fff&lt;/color&gt;\n                &lt;color&gt;#00adff&lt;/color&gt;\n                &lt;color&gt;#404040&lt;/color&gt;\n                &lt;color&gt;#cfecff&lt;/color&gt;\n                &lt;color&gt;#e6f1ff&lt;/color&gt;\n            &lt;/colors&gt;\n        &lt;/palettePreview&gt;\n    &lt;/flavor&gt;\n</code></pre><p>\nThe presets files are looked up in the jar holding the flavor declaration.\nCSS files will reference the flavor marker, as well as additionnal hint\nabout the type of preset to use:\n</p><p>\n</p><pre><code>        .nx-page input[type&#61;&#34;button&#34;] {\n          background: none &#34;button (__FLAVOR__ background)&#34;;\n          border-radius: 2px;\n          border: 1px solid;\n          border-color: &#34;button (__FLAVOR__ border)&#34;;\n          color: &#34;link.action (__FLAVOR__ color)&#34;;\n          cursor: pointer;\n          display: inline-block;\n          font-size: .95em;\n          font-weight: bold;\n          line-height: 1.3em;\n          margin: 0 .5em .5em 0;\n          padding: .4em .9em;\n          text-decoration: none;\n          white-space: nowrap }\n</code></pre><p>\nThe current flavor can be computed at runtime using negotiator logics, see\nthe negotiators extension point on this service.\n</p><p>\nThe default flavor defined for a given page will be used if\nthe page does not accept this flavor in its configuration.\n</p><p>\nAttribute &#34;links&#34; is available only since 7.4 and allows to define\nfavicons visible on the page (it was previously defined by the Theme\nextension point layout configuration).\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.styling/org.nuxeo.theme.styling.service/ExtensionPoints/org.nuxeo.theme.styling.service--flavors",
              "id": "org.nuxeo.theme.styling.service--flavors",
              "label": "flavors (org.nuxeo.theme.styling.service)",
              "name": "flavors",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.theme.styling.service",
              "descriptors": [
                "org.nuxeo.theme.styling.service.descriptors.NegotiationDescriptor"
              ],
              "documentation": "\n      The negotations extension point allows to define a list of Java classes\n      that will compute the current page or current flavor to use, depending\n      on the context.\n\n      Example:\n\n      <code>\n    <negotiation target=\"jsfFlavor\">\n        <negotiator\n            class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestParameter\" order=\"10\">\n            <property name=\"param\">flavor</property>\n        </negotiator>\n        <negotiator\n            class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestAttribute\" order=\"20\">\n            <property name=\"param\">flavor</property>\n        </negotiator>\n        <negotiator class=\"org.nuxeo.ecm.localconf.LocalThemeFlavor\" order=\"30\">\n            <property name=\"negotiatedPageVariable\">jsfPage</property>\n        </negotiator>\n        <negotiator\n            class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPageFlavor\" order=\"100\">\n            <property name=\"negotiatedPageVariable\">jsfPage</property>\n        </negotiator>\n    </negotiation>\n</code>\n\n\n      Negotiator classes must implement the\n      org.nuxeo.theme.styling.negotiation.Negotiator interface. The abstract\n      class org.nuxeo.theme.styling.negotiation.AbstractNegotiator can be\n      extended to benefit from generic implementation.\n\n      The context used in negotiator API can depend on the caller. In JSF\n      default pages, this context will be the current JSF FacesContext.\n\n      @since 7.4\n    \n",
              "documentationHtml": "<p>\nThe negotations extension point allows to define a list of Java classes\nthat will compute the current page or current flavor to use, depending\non the context.\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;negotiation target&#61;&#34;jsfFlavor&#34;&gt;\n        &lt;negotiator\n            class&#61;&#34;org.nuxeo.ecm.web.resources.jsf.negotiators.RequestParameter&#34; order&#61;&#34;10&#34;&gt;\n            &lt;property name&#61;&#34;param&#34;&gt;flavor&lt;/property&gt;\n        &lt;/negotiator&gt;\n        &lt;negotiator\n            class&#61;&#34;org.nuxeo.ecm.web.resources.jsf.negotiators.RequestAttribute&#34; order&#61;&#34;20&#34;&gt;\n            &lt;property name&#61;&#34;param&#34;&gt;flavor&lt;/property&gt;\n        &lt;/negotiator&gt;\n        &lt;negotiator class&#61;&#34;org.nuxeo.ecm.localconf.LocalThemeFlavor&#34; order&#61;&#34;30&#34;&gt;\n            &lt;property name&#61;&#34;negotiatedPageVariable&#34;&gt;jsfPage&lt;/property&gt;\n        &lt;/negotiator&gt;\n        &lt;negotiator\n            class&#61;&#34;org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPageFlavor&#34; order&#61;&#34;100&#34;&gt;\n            &lt;property name&#61;&#34;negotiatedPageVariable&#34;&gt;jsfPage&lt;/property&gt;\n        &lt;/negotiator&gt;\n    &lt;/negotiation&gt;\n</code></pre><p>\nNegotiator classes must implement the\norg.nuxeo.theme.styling.negotiation.Negotiator interface. The abstract\nclass org.nuxeo.theme.styling.negotiation.AbstractNegotiator can be\nextended to benefit from generic implementation.\n</p><p>\nThe context used in negotiator API can depend on the caller. In JSF\ndefault pages, this context will be the current JSF FacesContext.\n</p><p>\n&#64;since 7.4\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.styling/org.nuxeo.theme.styling.service/ExtensionPoints/org.nuxeo.theme.styling.service--negotiations",
              "id": "org.nuxeo.theme.styling.service--negotiations",
              "label": "negotiations (org.nuxeo.theme.styling.service)",
              "name": "negotiations",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.styling/org.nuxeo.theme.styling.service",
          "name": "org.nuxeo.theme.styling.service",
          "requirements": [
            "org.nuxeo.ecm.platform.WebResources"
          ],
          "resolutionOrder": 920,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.theme.styling.service",
              "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.styling/org.nuxeo.theme.styling.service/Services/org.nuxeo.theme.styling.service.ThemeStylingService",
              "id": "org.nuxeo.theme.styling.service.ThemeStylingService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 934,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.theme.styling.service\">\n  <documentation>\n    The ThemeStylingService service provides extension points for\n    pluggable resources and resource bundles management per page.\n\n    @since 5.5\n  </documentation>\n\n  <require>org.nuxeo.ecm.platform.WebResources</require>\n\n  <service>\n    <provide interface=\"org.nuxeo.theme.styling.service.ThemeStylingService\" />\n  </service>\n  <implementation class=\"org.nuxeo.theme.styling.service.ThemeStylingServiceImpl\" />\n\n  <extension-point name=\"pages\">\n    <documentation>\n      The pages extension point allows to define a set of resources and\n      resource bundles for a given \"page\", as well as additional information\n      about available flavors, for instance.\n\n      Example:\n\n      <code>\n        <page name=\"galaxy/default\" charset=\"utf-8\">\n          <defaultFlavor>default</defaultFlavor>\n          <flavors>\n            <flavor>default</flavor>\n            <flavor>rainbow</flavor>\n          </flavors>\n          <resources>\n            <bundle>nuxeo_includes</bundle>\n            <bundle>nuxeo_base</bundle>\n            <bundle>nuxeo_header_footer</bundle>\n            <bundle>nuxeo_dm</bundle>\n            <resource>my_resource.css</resource>\n          </resources>\n        </page>\n      </code>\n\n      The charset and favorites are used inside the page head.\n\n      Flavors define available flavors on this page, resource bundles are\n      also references (see corresponding extension points on this same component).\n\n      This extension point accepts merge. When contributing new elements to\n      flavors or resources, the attribute append=\"true\" should be added,\n      otherwise existing configurations will be overridden.\n\n      Attribute \"charset\" is available only since 7.4 (it was previously\n      defined by the Theme extension point layout configuration).\n    </documentation>\n    <object class=\"org.nuxeo.theme.styling.service.descriptors.PageDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"flavors\">\n    <documentation>\n      The flavors extension point allows to define a set of variables that can\n      be referenced inside CSS files, for dynamic replacement depending on\n      context, as well as a logo.\n\n      Example:\n\n      <code>\n        <flavor name=\"default\">\n          <label>label.theme.flavor.nuxeo.default</label>\n          <logo>\n            <path>/img/nuxeo_logo.png</path>\n            <previewPath>/img/nuxeo_preview_logo_black.png</previewPath>\n            <width>113</width>\n            <height>20</height>\n            <title>Nuxeo</title>\n          </logo>\n          <links>\n            <icon name=\"icon\">/icons/favicon.png</icon>\n            <icon name=\"shortcut icon\">/icons/favicon.ico</icon>\n          </links>\n          <presetsList>\n            <presets category=\"border\" src=\"themes/palettes/default-borders.properties\" />\n            <presets category=\"background\" src=\"themes/palettes/default-backgrounds.properties\" />\n            <presets category=\"font\" src=\"themes/palettes/default-fonts.properties\" />\n            <presets category=\"color\" src=\"themes/palettes/default-colors.properties\" />\n          </presetsList>\n          <palettePreview>\n            <colors>\n              <color>#17384e</color>\n              <color>#00adff</color>\n              <color>#00adff</color>\n              <color>#00adff</color>\n              <color>#fff</color>\n              <color>#00adff</color>\n              <color>#404040</color>\n              <color>#cfecff</color>\n              <color>#e6f1ff</color>\n            </colors>\n          </palettePreview>\n        </flavor>\n      </code>\n\n      The presets files are looked up in the jar holding the flavor declaration.\n      CSS files will reference the flavor marker, as well as additionnal hint\n      about the type of preset to use:\n\n      <code>\n        .nx-page input[type=\"button\"] {\n          background: none \"button (__FLAVOR__ background)\";\n          border-radius: 2px;\n          border: 1px solid;\n          border-color: \"button (__FLAVOR__ border)\";\n          color: \"link.action (__FLAVOR__ color)\";\n          cursor: pointer;\n          display: inline-block;\n          font-size: .95em;\n          font-weight: bold;\n          line-height: 1.3em;\n          margin: 0 .5em .5em 0;\n          padding: .4em .9em;\n          text-decoration: none;\n          white-space: nowrap }\n      </code>\n\n      The current flavor can be computed at runtime using negotiator logics, see\n      the negotiators extension point on this service.\n\n      The default flavor defined for a given page will be used if\n      the page does not accept this flavor in its configuration.\n\n      Attribute \"links\" is available only since 7.4 and allows to define\n      favicons visible on the page (it was previously defined by the Theme\n      extension point layout configuration).\n    </documentation>\n    <object class=\"org.nuxeo.theme.styling.service.descriptors.FlavorDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"negotiations\">\n    <documentation>\n      The negotations extension point allows to define a list of Java classes\n      that will compute the current page or current flavor to use, depending\n      on the context.\n\n      Example:\n\n      <code>\n        <negotiation target=\"jsfFlavor\">\n          <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestParameter\"\n            order=\"10\">\n            <property name=\"param\">flavor</property>\n          </negotiator>\n          <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestAttribute\"\n            order=\"20\">\n            <property name=\"param\">flavor</property>\n          </negotiator>\n          <negotiator class=\"org.nuxeo.ecm.localconf.LocalThemeFlavor\"\n            order=\"30\">\n            <property name=\"negotiatedPageVariable\">jsfPage</property>\n          </negotiator>\n          <negotiator\n            class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPageFlavor\"\n            order=\"100\">\n            <property name=\"negotiatedPageVariable\">jsfPage</property>\n          </negotiator>\n        </negotiation>\n      </code>\n\n      Negotiator classes must implement the\n      org.nuxeo.theme.styling.negotiation.Negotiator interface. The abstract\n      class org.nuxeo.theme.styling.negotiation.AbstractNegotiator can be\n      extended to benefit from generic implementation.\n\n      The context used in negotiator API can depend on the caller. In JSF\n      default pages, this context will be the current JSF FacesContext.\n\n      @since 7.4\n    </documentation>\n    <object class=\"org.nuxeo.theme.styling.service.descriptors.NegotiationDescriptor\" />\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/theme-styling-framework.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-theme-styling-2023.7.9.jar",
      "groupId": "org.nuxeo.theme",
      "hierarchyPath": "/grp:org.nuxeo.theme/org.nuxeo.theme.styling",
      "id": "org.nuxeo.theme.styling",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240130-104934\r\nBundle-Name: NXThemes Styling\r\nBundle-SymbolicName: org.nuxeo.theme.styling;singleton:=true\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: web\r\nRequire-Bundle: org.nuxeo.web.resources.core\r\nNuxeo-Component: OSGI-INF/theme-styling-framework.xml,OSGI-INF/theme-loc\r\n al-configuration.xml\r\n\r\n",
      "maxResolutionOrder": 920,
      "minResolutionOrder": 880,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.web.resources.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-preview-jsf",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.preview.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview",
        "id": "grp:org.nuxeo.ecm.platform.preview",
        "name": "org.nuxeo.ecm.platform.preview",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.preview.jsf",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent--remotableSeamBeans",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.SeamRemotingJSBuilderComponent/Contributions/org.nuxeo.ecm.platform.preview.SeamRemotingJSBuilderComponent--remotableSeamBeans",
              "id": "org.nuxeo.ecm.platform.preview.SeamRemotingJSBuilderComponent--remotableSeamBeans",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent",
                "name": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"remotableSeamBeans\" target=\"org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent\">\n    <remotableSeamBeans>\n      <beans>\n        <bean>previewActions</bean>\n      </beans>\n    </remotableSeamBeans>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.SeamRemotingJSBuilderComponent",
          "name": "org.nuxeo.ecm.platform.preview.SeamRemotingJSBuilderComponent",
          "requirements": [],
          "resolutionOrder": 702,
          "services": [],
          "startOrder": 396,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.preview.SeamRemotingJSBuilderComponent\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent\" point=\"remotableSeamBeans\">\n    <remotableSeamBeans>\n      <beans>\n        <bean>previewActions</bean>\n      </beans>\n    </remotableSeamBeans>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/seamremotingjsbuilder-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.widgets/Contributions/org.nuxeo.ecm.platform.preview.widgets--widgettypes",
              "id": "org.nuxeo.ecm.platform.preview.widgets--widgettypes",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"documentPreview\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Document Preview</title>\n        <description>\n          <p>This widget type displays the document preview.</p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/document_preview_widget.xhtml\n      </property>\n    </widgetType>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.widgets",
          "name": "org.nuxeo.ecm.platform.preview.widgets",
          "requirements": [],
          "resolutionOrder": 703,
          "services": [],
          "startOrder": 405,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.preview.widgets\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"documentPreview\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Document Preview</title>\n        <description>\n          <p>This widget type displays the document preview.</p>\n        </description>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <defaultConfiguration>\n            <field>data</field>\n          </defaultConfiguration>\n        </fields>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/document_preview_widget.xhtml\n      </property>\n    </widgetType>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/widgets-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      GET /nuxeo/restAPI/preview/{repoId}/{docId}/{fieldPath}?subPath=(subPath)\n    \n",
              "documentationHtml": "<p>\nGET /nuxeo/restAPI/preview/{repoId}/{docId}/{fieldPath}?subPath&#61;(subPath)\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService--restlets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.restAPI.contrib/Contributions/org.nuxeo.ecm.platform.preview.restAPI.contrib--restlets",
              "id": "org.nuxeo.ecm.platform.preview.restAPI.contrib--restlets",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
                "name": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"restlets\" target=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\">\n\n    <documentation>\n      GET /nuxeo/restAPI/preview/{repoId}/{docId}/{fieldPath}?subPath=(subPath)\n    </documentation>\n\n    <restletPlugin class=\"org.nuxeo.ecm.platform.preview.restlet.PreviewRestlet\" enabled=\"true\" name=\"preview\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/preview/{repo}/{docid}/{fieldPath}/{subPath}</urlPattern>\n        <urlPattern>/preview/{repo}/{docid}/{fieldPath}/</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.restAPI.contrib",
          "name": "org.nuxeo.ecm.platform.preview.restAPI.contrib",
          "requirements": [],
          "resolutionOrder": 704,
          "services": [],
          "startOrder": 404,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.preview.restAPI.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\"\n    point=\"restlets\">\n\n    <documentation>\n      GET /nuxeo/restAPI/preview/{repoId}/{docId}/{fieldPath}?subPath=(subPath)\n    </documentation>\n\n    <restletPlugin\n      name=\"preview\"\n      class=\"org.nuxeo.ecm.platform.preview.restlet.PreviewRestlet\"\n      enabled=\"true\"\n      useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/preview/{repo}/{docid}/{fieldPath}/{subPath}</urlPattern>\n        <urlPattern>/preview/{repo}/{docid}/{fieldPath}/</urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/restAPI-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.actions/Contributions/org.nuxeo.ecm.platform.preview.actions--actions",
              "id": "org.nuxeo.ecm.platform.preview.actions--actions",
              "registrationOrder": 39,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <!-- disable the old tab as we now use the showPreviewPopup action -->\n    <action enabled=\"false\" icon=\"/icons/file.gif\" id=\"TAB_PREVIEW\" label=\"label.document.preview\" link=\"/incl/tabs/preview_tab.xhtml\" order=\"200\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>view_preview</filter-id>\n    </action>\n\n    <action enabled=\"false\" icon=\"/icons/pdf.png\" id=\"POPUP_PREVIEW\" label=\"label.document.preview\" link=\"javascript:doPreview\" order=\"130\">\n      <category>POPUP</category>\n      <filter-id>popup_view_preview</filter-id>\n    </action>\n\n    <action enabled=\"true\" icon=\"/icons/preview.png\" id=\"showFancyBoxPreviewPopup\" label=\"label.document.preview\" link=\"javascript:doPreviewPopup\" order=\"130\">\n      <category>POPUP</category>\n      <filter-id>popup_view_preview</filter-id>\n    </action>\n\n    <action icon=\"/icons/contextual_menu/preview.png\" id=\"showFancyBoxPreview\" label=\"label.document.preview\" order=\"50\" type=\"fancybox\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>view_preview</filter-id>\n      <filter-id>not_folder</filter-id>\n      <filter-id>not_anonymous</filter-id>\n      <properties>\n        <property name=\"iframe\">\n          #{previewActions.getCurrentDocumentPreviewPopupURL()}\n        </property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/contextual_menu/preview.png\" id=\"blobPreview\" label=\"label.document.preview\" order=\"150\" type=\"fancybox\">\n      <category>BLOB_ACTIONS</category>\n      <filter-id>hasBlobPreview</filter-id>\n      <properties>\n        <property name=\"iframe\">#{previewActions.getPreviewURL(document, blobXPath)}</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.actions/Contributions/org.nuxeo.ecm.platform.preview.actions--filters",
              "id": "org.nuxeo.ecm.platform.preview.actions--filters",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"view_preview\">\n      <rule grant=\"true\">\n        <condition>#{previewActions.hasPreview}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"notHasPreview\">\n      <rule grant=\"true\">\n        <condition>#{not previewActions.hasPreview}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"popup_view_preview\">\n      <rule grant=\"true\">\n        <condition>#{previewActions.documentHasPreview(document)}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"hasBlobPreview\">\n      <rule grant=\"true\">\n        <condition>#{previewActions.hasBlobPreview(document, blobXPath)}</condition>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.actions",
          "name": "org.nuxeo.ecm.platform.preview.actions",
          "requirements": [],
          "resolutionOrder": 705,
          "services": [],
          "startOrder": 397,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.preview.actions\">\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <!-- disable the old tab as we now use the showPreviewPopup action -->\n    <action id=\"TAB_PREVIEW\" link=\"/incl/tabs/preview_tab.xhtml\" enabled=\"false\"\n      order=\"200\" label=\"label.document.preview\" icon=\"/icons/file.gif\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>view_preview</filter-id>\n    </action>\n\n    <action id=\"POPUP_PREVIEW\" link=\"javascript:doPreview\" order=\"130\"\n      enabled=\"false\" label=\"label.document.preview\" icon=\"/icons/pdf.png\">\n      <category>POPUP</category>\n      <filter-id>popup_view_preview</filter-id>\n    </action>\n\n    <action id=\"showFancyBoxPreviewPopup\" link=\"javascript:doPreviewPopup\"\n      order=\"130\" enabled=\"true\" label=\"label.document.preview\" icon=\"/icons/preview.png\">\n      <category>POPUP</category>\n      <filter-id>popup_view_preview</filter-id>\n    </action>\n\n    <action id=\"showFancyBoxPreview\" order=\"50\" type=\"fancybox\"\n      label=\"label.document.preview\" icon=\"/icons/contextual_menu/preview.png\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>view_preview</filter-id>\n      <filter-id>not_folder</filter-id>\n      <filter-id>not_anonymous</filter-id>\n      <properties>\n        <property name=\"iframe\">\n          #{previewActions.getCurrentDocumentPreviewPopupURL()}\n        </property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"blobPreview\" type=\"fancybox\"\n            label=\"label.document.preview\" icon=\"/icons/contextual_menu/preview.png\" order=\"150\">\n      <category>BLOB_ACTIONS</category>\n      <filter-id>hasBlobPreview</filter-id>\n      <properties>\n        <property name=\"iframe\">#{previewActions.getPreviewURL(document, blobXPath)}</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"view_preview\">\n      <rule grant=\"true\">\n        <condition>#{previewActions.hasPreview}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"notHasPreview\">\n      <rule grant=\"true\">\n        <condition>#{not previewActions.hasPreview}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"popup_view_preview\">\n      <rule grant=\"true\">\n        <condition>#{previewActions.documentHasPreview(document)}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"hasBlobPreview\">\n      <rule grant=\"true\">\n        <condition>#{previewActions.hasBlobPreview(document, blobXPath)}</condition>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--startURL",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.authentication/Contributions/org.nuxeo.ecm.platform.preview.authentication--startURL",
              "id": "org.nuxeo.ecm.platform.preview.authentication--startURL",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>viewer/</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.authentication",
          "name": "org.nuxeo.ecm.platform.preview.authentication",
          "requirements": [],
          "resolutionOrder": 707,
          "services": [],
          "startOrder": 400,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.preview.authentication\">\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"startURL\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>viewer/</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/auth-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--MimeTypePreviewer",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.jsf.adapter.contrib/Contributions/org.nuxeo.ecm.platform.preview.jsf.adapter.contrib--MimeTypePreviewer",
              "id": "org.nuxeo.ecm.platform.preview.jsf.adapter.contrib--MimeTypePreviewer",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "name": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"MimeTypePreviewer\" target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\">\n    <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.ImagePreviewer\">\n      <pattern>image.*</pattern>\n    </previewer>\n    <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.PdfPreviewer\">\n      <pattern>application/pdf</pattern>\n    </previewer>\n    <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.VideoPreviewer\">\n      <pattern>video.*</pattern>\n    </previewer>\n    <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.MarkdownPreviewer\">\n      <pattern>text/x-web-markdown</pattern>\n    </previewer>\n    <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.OfficePreviewer\">\n      <!-- Microsoft office documents -->\n      <pattern>application/msword</pattern>\n      <pattern>application/vnd.ms-powerpoint</pattern>\n      <pattern>application/vnd.ms-excel</pattern>\n      <!-- Microsoft office 2007 documents -->\n      <pattern>application/vnd.openxmlformats-officedocument.wordprocessingml.document</pattern>\n      <pattern>application/vnd.openxmlformats-officedocument.presentationml.presentation</pattern>\n      <pattern>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</pattern>\n      <!-- OpenOffice.org 1.x documents -->\n      <pattern>application/vnd.sun.xml.writer</pattern>\n      <pattern>application/vnd.sun.xml.writer.template</pattern>\n      <pattern>application/vnd.sun.xml.impress</pattern>\n      <pattern>application/vnd.sun.xml.impress.template</pattern>\n      <pattern>application/vnd.sun.xml.calc</pattern>\n      <pattern>application/vnd.sun.xml.calc.template</pattern>\n      <pattern>application/vnd.sun.xml.draw</pattern>\n      <pattern>application/vnd.sun.xml.draw.template</pattern>\n      <!-- OpenOffice.org 2.x documents -->\n      <pattern>application/vnd.oasis.opendocument.spreadsheet</pattern>\n      <pattern>application/vnd.oasis.opendocument.spreadsheet-template</pattern>\n      <pattern>application/vnd.oasis.opendocument.text</pattern>\n      <pattern>application/vnd.oasis.opendocument.text-template</pattern>\n      <pattern>application/vnd.oasis.opendocument.presentation</pattern>\n      <pattern>application/vnd.oasis.opendocument.presentation-template</pattern>\n      <pattern>application/vnd.oasis.opendocument.graphics</pattern>\n      <pattern>application/vnd.oasis.opendocument.graphics-template</pattern>\n      <!-- WordPerfect -->\n      <pattern>application/wordperfect</pattern>\n    </previewer>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.jsf.adapter.contrib",
          "name": "org.nuxeo.ecm.platform.preview.jsf.adapter.contrib",
          "requirements": [],
          "resolutionOrder": 708,
          "services": [],
          "startOrder": 402,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.preview.jsf.adapter.contrib\">\n  <extension target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\"\n    point=\"MimeTypePreviewer\">\n    <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.ImagePreviewer\">\n      <pattern>image.*</pattern>\n    </previewer>\n    <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.PdfPreviewer\">\n      <pattern>application/pdf</pattern>\n    </previewer>\n    <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.VideoPreviewer\">\n      <pattern>video.*</pattern>\n    </previewer>\n    <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.MarkdownPreviewer\">\n      <pattern>text/x-web-markdown</pattern>\n    </previewer>\n    <previewer class=\"org.nuxeo.ecm.platform.preview.adapter.OfficePreviewer\">\n      <!-- Microsoft office documents -->\n      <pattern>application/msword</pattern>\n      <pattern>application/vnd.ms-powerpoint</pattern>\n      <pattern>application/vnd.ms-excel</pattern>\n      <!-- Microsoft office 2007 documents -->\n      <pattern>application/vnd.openxmlformats-officedocument.wordprocessingml.document</pattern>\n      <pattern>application/vnd.openxmlformats-officedocument.presentationml.presentation</pattern>\n      <pattern>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</pattern>\n      <!-- OpenOffice.org 1.x documents -->\n      <pattern>application/vnd.sun.xml.writer</pattern>\n      <pattern>application/vnd.sun.xml.writer.template</pattern>\n      <pattern>application/vnd.sun.xml.impress</pattern>\n      <pattern>application/vnd.sun.xml.impress.template</pattern>\n      <pattern>application/vnd.sun.xml.calc</pattern>\n      <pattern>application/vnd.sun.xml.calc.template</pattern>\n      <pattern>application/vnd.sun.xml.draw</pattern>\n      <pattern>application/vnd.sun.xml.draw.template</pattern>\n      <!-- OpenOffice.org 2.x documents -->\n      <pattern>application/vnd.oasis.opendocument.spreadsheet</pattern>\n      <pattern>application/vnd.oasis.opendocument.spreadsheet-template</pattern>\n      <pattern>application/vnd.oasis.opendocument.text</pattern>\n      <pattern>application/vnd.oasis.opendocument.text-template</pattern>\n      <pattern>application/vnd.oasis.opendocument.presentation</pattern>\n      <pattern>application/vnd.oasis.opendocument.presentation-template</pattern>\n      <pattern>application/vnd.oasis.opendocument.graphics</pattern>\n      <pattern>application/vnd.oasis.opendocument.graphics-template</pattern>\n      <!-- WordPerfect -->\n      <pattern>application/wordperfect</pattern>\n    </previewer>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/preview-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService--codecs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.docview.contrib/Contributions/org.nuxeo.ecm.platform.preview.docview.contrib--codecs",
              "id": "org.nuxeo.ecm.platform.preview.docview.contrib--codecs",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"codecs\" target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\">\n\n      <documentViewCodec class=\"org.nuxeo.ecm.platform.preview.codec.DocumentPreviewCodec\" enabled=\"true\" name=\"preview\" prefix=\"restAPI/preview\"/>\n    </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf/org.nuxeo.ecm.platform.preview.docview.contrib",
          "name": "org.nuxeo.ecm.platform.preview.docview.contrib",
          "requirements": [],
          "resolutionOrder": 710,
          "services": [],
          "startOrder": 401,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.preview.docview.contrib\">\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\"\n      point=\"codecs\">\n\n      <documentViewCodec name=\"preview\" enabled=\"true\" prefix=\"restAPI/preview\"\n        class=\"org.nuxeo.ecm.platform.preview.codec.DocumentPreviewCodec\" />\n    </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/docview-codec-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-preview-jsf-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.jsf",
      "id": "org.nuxeo.ecm.platform.preview.jsf",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM Preview JSF\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.preview.jsf;singleton:=true\r\nBundle-Category: web,stateless\r\nNuxeo-Component: OSGI-INF/seamremotingjsbuilder-contrib.xml,OSGI-INF/wid\r\n gets-contrib.xml,OSGI-INF/restAPI-contrib.xml,OSGI-INF/actions-contrib.\r\n xml,OSGI-INF/auth-contrib.xml,OSGI-INF/preview-adapter-contrib.xml,OSGI\r\n -INF/docview-codec-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 710,
      "minResolutionOrder": 702,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-elasticsearch-automation",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.elasticsearch.audit",
          "org.nuxeo.elasticsearch.automation",
          "org.nuxeo.elasticsearch.core",
          "org.nuxeo.elasticsearch.http.readonly",
          "org.nuxeo.elasticsearch.rest",
          "org.nuxeo.elasticsearch.seqgen",
          "org.nuxeo.elasticsearch.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.elasticsearch",
        "id": "grp:org.nuxeo.elasticsearch",
        "name": "org.nuxeo.elasticsearch",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "nuxeo-elasticsearch\n===================\n\n## About\n\nThis project aims at providing Nuxeo bundles to integrate\nElasticsearch with the Nuxeo Platform.\n\nThe idea is to index/query Nuxeo Documents to/from Elasticsearch.\n\n## Building\n\nTo build and run the tests, simply start the Maven build:\n\n    mvn clean install\n\n## Running tests\n\n### Using the embedded Elasticsearch\n\nWith the default `RestClient`:\n```bash\nmvn -nsu test\n# -Dnuxeo.test.elasticsearch.client=RestClient is set by default\n```\n\nOr with the `TransportClient`\n\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient\n```\n\n### Using an external Elasticsearch\n\n1. Start an Elasticsearch using docker:\n```bash\ndocker run -p 9400:9200 -p 9600:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.5.3\n```\n\n2.a Run the test with `RestClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.addressList=http://localhost:9400\n```\n\n2.b Or run the test with `TransportClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient -Dnuxeo.test.elasticsearch.clusterName=docker-cluster -Dnuxeo.test.elasticsearch.addressList=localhost:9600\n```\n\n## Links\n\n- Administration: http://doc.nuxeo.com/x/UBY5AQ\n- Configuring mapping: http://doc.nuxeo.com/x/WxI5AQ\n- Overview: http://doc.nuxeo.com/x/iYElAQ\n- [Open jira tikets](https://jira.nuxeo.com/issues/?jql=project%20%3D%20NXP%20AND%20component%20%3D%20Elasticsearch%20AND%20Status%20!%3D%20%22Resolved%22%20ORDER%20BY%20updated%20DESC%2C%20priority%20DESC%2C%20created%20ASC)\n",
            "digest": "39fe49f5b0c4b24c62cb008ba470a7c5",
            "encoding": "UTF-8",
            "length": 1513,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.elasticsearch.automation",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.automation/org.nuxeo.ecm.automation.elasticsearch.contrib/Contributions/org.nuxeo.ecm.automation.elasticsearch.contrib--operations",
              "id": "org.nuxeo.ecm.automation.elasticsearch.contrib--operations",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.automation.elasticsearch.ElasticsearchIndexOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.elasticsearch.ElasticsearchWaitForIndexingOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.elasticsearch.ElasticsearchBulkIndexOperation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.automation.server.AutomationServer--bindings",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.automation/org.nuxeo.ecm.automation.elasticsearch.contrib/Contributions/org.nuxeo.ecm.automation.elasticsearch.contrib--bindings",
              "id": "org.nuxeo.ecm.automation.elasticsearch.contrib--bindings",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bindings\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <binding name=\"Elasticsearch.Index\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Elasticsearch.WaitForIndexing\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Elasticsearch.BulkIndex\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.automation/org.nuxeo.ecm.automation.elasticsearch.contrib",
          "name": "org.nuxeo.ecm.automation.elasticsearch.contrib",
          "requirements": [],
          "resolutionOrder": 203,
          "services": [],
          "startOrder": 86,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.automation.elasticsearch.contrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.ecm.automation.elasticsearch.ElasticsearchIndexOperation\" />\n    <operation class=\"org.nuxeo.ecm.automation.elasticsearch.ElasticsearchWaitForIndexingOperation\" />\n    <operation class=\"org.nuxeo.ecm.automation.elasticsearch.ElasticsearchBulkIndexOperation\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.automation.server.AutomationServer\" point=\"bindings\">\n    <binding name=\"Elasticsearch.Index\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Elasticsearch.WaitForIndexing\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Elasticsearch.BulkIndex\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-elasticsearch-automation-2023.7.9.jar",
      "groupId": "org.nuxeo.elasticsearch",
      "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.automation",
      "id": "org.nuxeo.elasticsearch.automation",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240130-105538\r\nBundle-Name: Elasticsearch Automation module\r\nBundle-SymbolicName: org.nuxeo.elasticsearch.automation;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/operations-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 203,
      "minResolutionOrder": 203,
      "packages": [],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "nuxeo-elasticsearch\n===================\n\n## About\n\nThis project aims at providing Nuxeo bundles to integrate\nElasticsearch with the Nuxeo Platform.\n\nThe idea is to index/query Nuxeo Documents to/from Elasticsearch.\n\n## Building\n\nTo build and run the tests, simply start the Maven build:\n\n    mvn clean install\n\n## Running tests\n\n### Using the embedded Elasticsearch\n\nWith the default `RestClient`:\n```bash\nmvn -nsu test\n# -Dnuxeo.test.elasticsearch.client=RestClient is set by default\n```\n\nOr with the `TransportClient`\n\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient\n```\n\n### Using an external Elasticsearch\n\n1. Start an Elasticsearch using docker:\n```bash\ndocker run -p 9400:9200 -p 9600:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.5.3\n```\n\n2.a Run the test with `RestClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.addressList=http://localhost:9400\n```\n\n2.b Or run the test with `TransportClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient -Dnuxeo.test.elasticsearch.clusterName=docker-cluster -Dnuxeo.test.elasticsearch.addressList=localhost:9600\n```\n\n## Links\n\n- Administration: http://doc.nuxeo.com/x/UBY5AQ\n- Configuring mapping: http://doc.nuxeo.com/x/WxI5AQ\n- Overview: http://doc.nuxeo.com/x/iYElAQ\n- [Open jira tikets](https://jira.nuxeo.com/issues/?jql=project%20%3D%20NXP%20AND%20component%20%3D%20Elasticsearch%20AND%20Status%20!%3D%20%22Resolved%22%20ORDER%20BY%20updated%20DESC%2C%20priority%20DESC%2C%20created%20ASC)\n",
        "digest": "39fe49f5b0c4b24c62cb008ba470a7c5",
        "encoding": "UTF-8",
        "length": 1513,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-webengine-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.webengine.base",
          "org.nuxeo.ecm.webengine.core",
          "org.nuxeo.ecm.webengine.invite",
          "org.nuxeo.ecm.webengine.jaxrs",
          "org.nuxeo.ecm.webengine.ui"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.webengine",
        "id": "grp:org.nuxeo.ecm.webengine",
        "name": "org.nuxeo.ecm.webengine",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.webengine.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.webengine.WebEngineComponent",
          "declaredStartOrder": null,
          "documentation": "\n    @author Bogdan Stefanescu (bs@nuxeo.com)\n    Manage templates\n  \n",
          "documentationHtml": "<p>\nManage templates\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webengine.WebEngineComponent",
              "descriptors": [
                "org.nuxeo.ecm.webengine.rendering.RenderingExtensionDescriptor"
              ],
              "documentation": "\n      @author Bogdan Stefanescu (bs@nuxeo.com)\n      Expose the registration of freemarker templates (directives, methods or global shared variables)\n      This way custom templates can be registered into the freemarker engine from outside\n      <code>\n    <rendering-extension class=\"org.nuxeo.ecm.platform.my.MyExtension\" name=\"myExtension\"/>\n</code>\n",
              "documentationHtml": "<p>\nExpose the registration of freemarker templates (directives, methods or global shared variables)\nThis way custom templates can be registered into the freemarker engine from outside\n</p><p></p><pre><code>    &lt;rendering-extension class&#61;&#34;org.nuxeo.ecm.platform.my.MyExtension&#34; name&#61;&#34;myExtension&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.webengine.WebEngineComponent/ExtensionPoints/org.nuxeo.ecm.webengine.WebEngineComponent--rendering-extension",
              "id": "org.nuxeo.ecm.webengine.WebEngineComponent--rendering-extension",
              "label": "rendering-extension (org.nuxeo.ecm.webengine.WebEngineComponent)",
              "name": "rendering-extension",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webengine.WebEngineComponent",
              "descriptors": [
                "org.nuxeo.ecm.webengine.security.GuardDescriptor"
              ],
              "documentation": "\n      @author Bogdan Stefanescu (bs@nuxeo.com)\n      Register global guards. Guards are used to define permissions\n      <code>\n    <guard expression=\"(GUARD1 OR GUARD2) AND user=bogdan\" id=\"MyGuard\"/>\n</code>\n",
              "documentationHtml": "<p>\nRegister global guards. Guards are used to define permissions\n</p><p></p><pre><code>    &lt;guard expression&#61;&#34;(GUARD1 OR GUARD2) AND user&#61;bogdan&#34; id&#61;&#34;MyGuard&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.webengine.WebEngineComponent/ExtensionPoints/org.nuxeo.ecm.webengine.WebEngineComponent--guard",
              "id": "org.nuxeo.ecm.webengine.WebEngineComponent--guard",
              "label": "guard (org.nuxeo.ecm.webengine.WebEngineComponent)",
              "name": "guard",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webengine.WebEngineComponent",
              "descriptors": [
                "org.nuxeo.ecm.webengine.ResourceBinding"
              ],
              "documentation": "\n      @author Bogdan Stefanescu (bs@nuxeo.com)\n      Register a JAX-RS root resource\n      <code>\n    <resource class=\"org.nuxeo.Resource\" path=\"{lang:[a-z]}\" singleton=\"false\"/>\n</code>\n",
              "documentationHtml": "<p>\nRegister a JAX-RS root resource\n</p><p></p><pre><code>    &lt;resource class&#61;&#34;org.nuxeo.Resource&#34; path&#61;&#34;{lang:[a-z]}&#34; singleton&#61;&#34;false&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.webengine.WebEngineComponent/ExtensionPoints/org.nuxeo.ecm.webengine.WebEngineComponent--resource",
              "id": "org.nuxeo.ecm.webengine.WebEngineComponent--resource",
              "label": "resource (org.nuxeo.ecm.webengine.WebEngineComponent)",
              "name": "resource",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webengine.WebEngineComponent",
              "descriptors": [
                "org.nuxeo.ecm.webengine.PathDescriptor"
              ],
              "documentation": "\n      Obsolete since 8.4, transactions are always active.\n    \n",
              "documentationHtml": "<p>\nObsolete since 8.4, transactions are always active.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.webengine.WebEngineComponent/ExtensionPoints/org.nuxeo.ecm.webengine.WebEngineComponent--request-configuration",
              "id": "org.nuxeo.ecm.webengine.WebEngineComponent--request-configuration",
              "label": "request-configuration (org.nuxeo.ecm.webengine.WebEngineComponent)",
              "name": "request-configuration",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.webengine.WebEngineComponent--rendering-extension",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.webengine.WebEngineComponent/Contributions/org.nuxeo.ecm.webengine.WebEngineComponent--rendering-extension",
              "id": "org.nuxeo.ecm.webengine.WebEngineComponent--rendering-extension",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.webengine.WebEngineComponent",
                "name": "org.nuxeo.ecm.webengine.WebEngineComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"rendering-extension\" target=\"org.nuxeo.ecm.webengine.WebEngineComponent\">\n    <rendering-extension class=\"org.nuxeo.ecm.webengine.rendering.ScriptMethod\" name=\"script\"/>\n    <rendering-extension class=\"org.nuxeo.ecm.webengine.rendering.RenderDirective\" name=\"render\"/>\n    <rendering-extension class=\"org.nuxeo.ecm.platform.rendering.wiki.WikiTransformer\" name=\"wiki\"/>\n    <rendering-extension class=\"org.nuxeo.ecm.webengine.rendering.APIHelper\" name=\"API\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--filterConfig",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.webengine.WebEngineComponent/Contributions/org.nuxeo.ecm.webengine.WebEngineComponent--filterConfig",
              "id": "org.nuxeo.ecm.webengine.WebEngineComponent--filterConfig",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filterConfig\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n    <filterConfig name=\"webengine\" synchonize=\"false\" transactional=\"true\">\n      <pattern>/nuxeo/site.*</pattern>\n    </filterConfig>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.webengine.WebEngineComponent",
          "name": "org.nuxeo.ecm.webengine.WebEngineComponent",
          "requirements": [
            "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService"
          ],
          "resolutionOrder": 931,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.webengine.WebEngineComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.webengine.WebEngineComponent/Services/org.nuxeo.ecm.webengine.WebEngine",
              "id": "org.nuxeo.ecm.webengine.WebEngine",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 911,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webengine.WebEngineComponent\">\n  <require>org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService</require>\n\n  <implementation\n          class=\"org.nuxeo.ecm.webengine.WebEngineComponent\" />\n  <documentation>\n    @author Bogdan Stefanescu (bs@nuxeo.com)\n    Manage templates\n  </documentation>\n\n  <!-- you can change the default rendering engine by setting this property to the engine class name\n  <property name=\"engine\" value=\"org.nuxeo.ecm.platform.rendering.fm.FreemarkerEngine\"/>\n  -->\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.webengine.WebEngine\" />\n  </service>\n\n  <extension-point name=\"rendering-extension\">\n    <documentation>\n      @author Bogdan Stefanescu (bs@nuxeo.com)\n      Expose the registration of freemarker templates (directives, methods or global shared variables)\n      This way custom templates can be registered into the freemarker engine from outside\n      <code>\n        <rendering-extension name=\"myExtension\" class=\"org.nuxeo.ecm.platform.my.MyExtension\"/>\n      </code>\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.webengine.rendering.RenderingExtensionDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"guard\">\n    <documentation>\n      @author Bogdan Stefanescu (bs@nuxeo.com)\n      Register global guards. Guards are used to define permissions\n      <code>\n        <guard id=\"MyGuard\" expression=\"(GUARD1 OR GUARD2) AND user=bogdan\">\n        </guard>\n      </code>\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.webengine.security.GuardDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"resource\">\n    <documentation>\n      @author Bogdan Stefanescu (bs@nuxeo.com)\n      Register a JAX-RS root resource\n      <code>\n        <resource path=\"{lang:[a-z]}\" singleton=\"false\" class=\"org.nuxeo.Resource\" />\n      </code>\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.webengine.ResourceBinding\" />\n  </extension-point>\n\n  <extension-point name=\"request-configuration\">\n    <documentation>\n      Obsolete since 8.4, transactions are always active.\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.webengine.PathDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.webengine.WebEngineComponent\" point=\"rendering-extension\">\n    <rendering-extension name=\"script\" class=\"org.nuxeo.ecm.webengine.rendering.ScriptMethod\"/>\n    <rendering-extension name=\"render\" class=\"org.nuxeo.ecm.webengine.rendering.RenderDirective\"/>\n    <rendering-extension name=\"wiki\" class=\"org.nuxeo.ecm.platform.rendering.wiki.WikiTransformer\"/>\n    <rendering-extension name=\"API\" class=\"org.nuxeo.ecm.webengine.rendering.APIHelper\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\"\n    point=\"filterConfig\">\n    <filterConfig name=\"webengine\" transactional=\"true\" synchonize=\"false\">\n      <pattern>${org.nuxeo.ecm.contextPath}/site.*</pattern>\n    </filterConfig>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/webengine-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--sessionManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig/Contributions/org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig--sessionManager",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig--sessionManager",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"sessionManager\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <sessionManager class=\"org.nuxeo.ecm.webengine.login.WebEngineSessionManager\" enabled=\"true\" name=\"WebEngine\">\n    </sessionManager>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--startURL",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig/Contributions/org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig--startURL",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig--startURL",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>site/</pattern>\n      </patterns>\n    </startURLPattern>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--authenticators",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig/Contributions/org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig--authenticators",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig--authenticators",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"authenticators\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <authenticationPlugin class=\"org.nuxeo.ecm.webengine.login.WebEngineFormAuthenticator\" enabled=\"true\" name=\"WEBENGINE_FORM_AUTH\">\n      <needStartingURLSaving>true</needStartingURLSaving>\n      <parameters>\n        <parameter name=\"UsernameKey\">username</parameter>\n        <parameter name=\"PasswordKey\">********</parameter>\n      </parameters>\n      <stateful>false</stateful>\n    </authenticationPlugin>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--chain",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig/Contributions/org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig--chain",
              "id": "org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig--chain",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"chain\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <authenticationChain>\n      <plugins>\n        <plugin>BASIC_AUTH</plugin>\n        <plugin>TOKEN_AUTH</plugin>\n        <plugin>OAUTH2_AUTH</plugin>\n        <plugin>JWT_AUTH</plugin>\n        <plugin>FORM_AUTH</plugin>\n        <plugin>WEBENGINE_FORM_AUTH</plugin>\n        <plugin>ANONYMOUS_AUTH</plugin>\n      </plugins>\n    </authenticationChain>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig",
          "name": "org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig",
          "requirements": [
            "org.nuxeo.ecm.platform.ui.web.auth.defaultConfig",
            "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService"
          ],
          "resolutionOrder": 932,
          "services": [],
          "startOrder": 533,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig\">\n\n  <!-- replace auth chain -->\n  <require>org.nuxeo.ecm.platform.ui.web.auth.defaultConfig</require>\n  <require>org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"sessionManager\">\n\n    <sessionManager name=\"WebEngine\" enabled=\"true\" class=\"org.nuxeo.ecm.webengine.login.WebEngineSessionManager\">\n    </sessionManager>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"startURL\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>site/</pattern>\n      </patterns>\n    </startURLPattern>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"authenticators\">\n    <authenticationPlugin name=\"WEBENGINE_FORM_AUTH\" enabled=\"true\" class=\"org.nuxeo.ecm.webengine.login.WebEngineFormAuthenticator\">\n      <needStartingURLSaving>true</needStartingURLSaving>\n      <parameters>\n        <parameter name=\"UsernameKey\">username</parameter>\n        <parameter name=\"PasswordKey\">********</parameter>\n      </parameters>\n      <stateful>false</stateful>\n    </authenticationPlugin>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"chain\">\n\n    <authenticationChain>\n      <plugins>\n        <plugin>BASIC_AUTH</plugin>\n        <plugin>TOKEN_AUTH</plugin>\n        <plugin>OAUTH2_AUTH</plugin>\n        <plugin>JWT_AUTH</plugin>\n        <plugin>FORM_AUTH</plugin>\n        <plugin>WEBENGINE_FORM_AUTH</plugin>\n        <plugin>ANONYMOUS_AUTH</plugin>\n      </plugins>\n    </authenticationChain>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/authentication-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.webengine.JsonFactoryManagerImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.webengine.core.service.json",
          "name": "org.nuxeo.ecm.webengine.core.service.json",
          "requirements": [],
          "resolutionOrder": 933,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.webengine.core.service.json",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core/org.nuxeo.ecm.webengine.core.service.json/Services/org.nuxeo.ecm.webengine.JsonFactoryManager",
              "id": "org.nuxeo.ecm.webengine.JsonFactoryManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 658,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.webengine.core.service.json\">\n\n  <implementation class=\"org.nuxeo.ecm.webengine.JsonFactoryManagerImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.webengine.JsonFactoryManager\" />\n  </service>\n\n</component>",
          "xmlFileName": "/OSGI-INF/json-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-webengine-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.webengine",
      "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.core",
      "id": "org.nuxeo.ecm.webengine.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.webengine,org.nuxeo.ecm.webengine.app,org.\r\n nuxeo.ecm.webengine.app.annotations,org.nuxeo.ecm.webengine.app.documen\r\n t,org.nuxeo.ecm.webengine.app.extensions,org.nuxeo.ecm.webengine.app.im\r\n pl,org.nuxeo.ecm.webengine.app.jersey,org.nuxeo.ecm.webengine.debug,org\r\n .nuxeo.ecm.webengine.forms,org.nuxeo.ecm.webengine.forms.validation,org\r\n .nuxeo.ecm.webengine.forms.validation.annotations,org.nuxeo.ecm.webengi\r\n ne.forms.validation.test,org.nuxeo.ecm.webengine.install,org.nuxeo.ecm.\r\n webengine.loader,org.nuxeo.ecm.webengine.loader.store,org.nuxeo.ecm.web\r\n engine.login,org.nuxeo.ecm.webengine.model,org.nuxeo.ecm.webengine.mode\r\n l.exceptions,org.nuxeo.ecm.webengine.model.impl,org.nuxeo.ecm.webengine\r\n .model.io,org.nuxeo.ecm.webengine.model.methods,org.nuxeo.ecm.webengine\r\n .model.view,org.nuxeo.ecm.webengine.notifier,org.nuxeo.ecm.webengine.re\r\n ndering,org.nuxeo.ecm.webengine.scripting,org.nuxeo.ecm.webengine.secur\r\n ity,org.nuxeo.ecm.webengine.security.guards,org.nuxeo.ecm.webengine.ser\r\n vlet,org.nuxeo.ecm.webengine.session,org.nuxeo.ecm.webengine.util,org.n\r\n uxeo.runtime.annotations,org.nuxeo.runtime.annotations.loader,org.nuxeo\r\n .runtime.contribution,org.nuxeo.runtime.contribution.impl\r\nPrivate-Package: .\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: stateless\r\nBundle-Name: Nuxeo WebEngine Core\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nNuxeo-Component: OSGI-INF/webengine-framework.xml,OSGI-INF/authenticatio\r\n n-contrib.xml,OSGI-INF/json-service.xml\r\nImport-Package: com.sun.jersey.core.spi.component,com.sun.jersey.spi.con\r\n tainer.servlet,com.sun.jersey.spi.inject,freemarker.core,freemarker.ext\r\n .jsp,freemarker.ext.servlet,freemarker.template,groovy.lang,javax.annot\r\n ation;version=\"1.0\",javax.naming,javax.script,javax.security.auth,javax\r\n .security.auth.login,javax.servlet,javax.servlet.http,javax.ws.rs;versi\r\n on=\"1.1\",javax.ws.rs.core;version=\"1.1\",javax.ws.rs.ext;version=\"1.1\",j\r\n avax.xml.parsers,org.apache.commons.fileupload,org.apache.commons.fileu\r\n pload.disk,org.apache.commons.fileupload.servlet,org.apache.commons.log\r\n ging,org.codehaus.groovy.classgen,org.codehaus.groovy.control,org.codeh\r\n aus.groovy.runtime,org.nuxeo.common.collections,org.nuxeo.common.utils,\r\n org.nuxeo.common.xmap,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.co\r\n re;api=split,org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.im\r\n pl.blob,org.nuxeo.ecm.core.api.local,org.nuxeo.ecm.core.api.model,org.n\r\n uxeo.ecm.core.api.model.impl,org.nuxeo.ecm.core.api.model.impl.primitiv\r\n es,org.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.core.api.security,or\r\n g.nuxeo.ecm.core.api.security.impl,org.nuxeo.ecm.core.schema,org.nuxeo.\r\n ecm.core.schema.types,org.nuxeo.ecm.core.url,org.nuxeo.ecm.directory;ap\r\n i=split,org.nuxeo.ecm.platform.api.login,org.nuxeo.ecm.platform.renderi\r\n ng.api,org.nuxeo.ecm.platform.rendering.fm,org.nuxeo.ecm.platform.rende\r\n ring.fm.adapters,org.nuxeo.ecm.platform.rendering.wiki,org.nuxeo.ecm.pl\r\n atform.ui.web.auth,org.nuxeo.ecm.platform.ui.web.auth.interfaces,org.nu\r\n xeo.ecm.platform.ui.web.auth.plugins,org.nuxeo.ecm.platform.versioning.\r\n api,org.nuxeo.ecm.platform.web.common.vh,org.nuxeo.ecm.webengine.login,\r\n org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runtime.model,org.nux\r\n eo.runtime.services.streaming,org.osgi.framework;version=\"1.4\",org.w3c.\r\n dom\r\nEclipse-BuddyPolicy: dependent\r\nBundle-SymbolicName: org.nuxeo.ecm.webengine.core;singleton:=true\r\nNuxeo-WebModule: org.nuxeo.ecm.webengine.app.WebEngineApplication\r\n\r\n",
      "maxResolutionOrder": 933,
      "minResolutionOrder": 931,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-lang-ext",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.lang",
          "org.nuxeo.ecm.platform.lang.ext"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.lang",
        "id": "grp:org.nuxeo.ecm.platform.lang",
        "name": "org.nuxeo.ecm.platform.lang",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.lang.ext",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--loginScreen",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.lang/org.nuxeo.ecm.platform.lang.ext/org.nuxeo.ecm.platform.ui.web.login.lang.ext/Contributions/org.nuxeo.ecm.platform.ui.web.login.lang.ext--loginScreen",
              "id": "org.nuxeo.ecm.platform.ui.web.login.lang.ext--loginScreen",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"loginScreen\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <loginScreenConfig>\n      <supportedLocales append=\"true\">\n        <locale>de</locale><!-- German - Germany -->\n        <locale>de_DE</locale><!-- German - Germany -->\n        <locale>es</locale><!-- Spanish - Spain -->\n        <locale>es_ES</locale><!-- Spanish - Spain -->\n        <locale>eu_ES</locale><!-- Basque -->\n        <locale>fr</locale><!-- French - France -->\n        <locale>fr_FR</locale><!-- French - France -->\n        <locale>id_ID</locale><!-- Indonesian - Indonesia -->\n        <locale>it_IT</locale><!-- Italian - Italy -->\n        <locale>ja</locale><!-- Japanese (Gregorian calendar) - Japan -->\n        <locale>ja_JP</locale><!-- Japanese (Gregorian calendar) - Japan -->\n        <locale>nl</locale><!-- Dutch - Netherlands -->\n        <locale>nl_NL</locale><!-- Dutch - Netherlands -->\n        <locale>sq_AL</locale><!-- Albanian -->\n        <locale>sv_SE</locale><!-- Swedish -->\n        <locale>zh_CN</locale><!-- Chinese (Simplified) - China -->\n      </supportedLocales>\n    </loginScreenConfig>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.lang/org.nuxeo.ecm.platform.lang.ext/org.nuxeo.ecm.platform.ui.web.login.lang.ext",
          "name": "org.nuxeo.ecm.platform.ui.web.login.lang.ext",
          "requirements": [
            "org.nuxeo.ecm.platform.ui.web.login"
          ],
          "resolutionOrder": 621,
          "services": [],
          "startOrder": 541,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.ui.web.login.lang.ext\"\n  version=\"1.0\">\n  <require>org.nuxeo.ecm.platform.ui.web.login</require>\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"loginScreen\">\n    <loginScreenConfig>\n      <supportedLocales append=\"true\">\n        <locale>de</locale><!-- German - Germany -->\n        <locale>de_DE</locale><!-- German - Germany -->\n        <locale>es</locale><!-- Spanish - Spain -->\n        <locale>es_ES</locale><!-- Spanish - Spain -->\n        <locale>eu_ES</locale><!-- Basque -->\n        <locale>fr</locale><!-- French - France -->\n        <locale>fr_FR</locale><!-- French - France -->\n        <locale>id_ID</locale><!-- Indonesian - Indonesia -->\n        <locale>it_IT</locale><!-- Italian - Italy -->\n        <locale>ja</locale><!-- Japanese (Gregorian calendar) - Japan -->\n        <locale>ja_JP</locale><!-- Japanese (Gregorian calendar) - Japan -->\n        <locale>nl</locale><!-- Dutch - Netherlands -->\n        <locale>nl_NL</locale><!-- Dutch - Netherlands -->\n        <locale>sq_AL</locale><!-- Albanian -->\n        <locale>sv_SE</locale><!-- Swedish -->\n        <locale>zh_CN</locale><!-- Chinese (Simplified) - China -->\n      </supportedLocales>\n    </loginScreenConfig>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/login-screen-config.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-lang-ext-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.lang/org.nuxeo.ecm.platform.lang.ext",
      "id": "org.nuxeo.ecm.platform.lang.ext",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240130-105049\r\nBundle-Name: Nuxeo ECM Language Extensions pack\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.lang.ext\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: stateless,web\r\nNuxeo-Component: OSGI-INF/login-screen-config.xml\r\n\r\n",
      "maxResolutionOrder": 621,
      "minResolutionOrder": 621,
      "packages": [],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "# Nuxeo external translations\n\nThis module contains community-created translations, as well as some basic\ntools to help manage these translations.\n\n## How to update an existing translation?\n\nIf you want to participate to the translation process, please read the\n[How to translate the Nuxeo Platform](http://doc.nuxeo.com/x/dAQz)\npage.\n\nThe rest of this README is for developers that are maintaining this\nmodule according to Crowdin translation files. Note there is some\n[tooling used to handle this module](https://github.com/nuxeo/tools-nuxeo-crowdin/).\n\n## WARNING\n\nAll properties files in this module are managed automatically: except\non edge cases, you should never push changes to these files on GitHub,\notherwise they may be lost at next automated synchronization.\n\nNote that only the master branch is handled by synchronization, manual\nchanges are still needed on maintenance branches.\n\n\n## How to add a new language?\n\n1. Set the new language as a new target language on Crowdin, and download the corresponding file.\n\n  Rename this translation file to `messages_xx_XX.properties`, where `xx_XX` is the 4 letters codename for your language, and reference it in the `crowdin.ini` file.\n\n2. Create a Nuxeo Bundle and put your file under\n\n        src/main/resources/web/nuxeo.war/WEB-INF/classes/\n\n3. Modify the deployment-fragment.xml file accordingly:\n\n        <?xml version=\"1.0\"?>\n        <fragment version=\"1\">\n          <require>org.nuxeo.ecm.platform.lang.ext</require>\n          <extension target=\"faces-config#APPLICATION_LOCALE\">\n            <locale-config>\n              <supported-locale>xx_XX</supported-locale> <!-- Your custom locale -->\n            </locale-config>\n          </extension>\n          <install>\n            <!-- Unzip the contents of our nuxeo.war into the real nuxeo.war on the server -->\n            <unzip from=\"${bundle.fileName}\" to=\"/\" prefix=\"web\">\n              <include>web/nuxeo.war/**</include>\n            </unzip>\n            <!-- Add fallback to two letters locale for browser compatibility if needed -->\n            <copy from=\"nuxeo.war/WEB-INF/classes/messages_xx_XX.properties\"\n                  to=\"nuxeo.war/WEB-INF/classes/messages_xx.properties\"/>\n          </install>\n        </fragment>\n\n## Where to add your existing translations?\n\nHere's the resolving order when looking for a label in Brazilian for\ninstance.\n\n    messages_pt_BR.properties -> messages_pt_PT.properties -> messages_en.properties -> messages.properties\n\nBrazilian is a 'dialect' of Portuguese, so there is first a fallback\non Portuguese, then a fallback to the default language of the\napplication (\"en\" for Nuxeo) then to messages.properties.\n\nMost of the fallback is actually handled directly by Crowdin, the tool\nwe use for translations. When downloading a file from Crowdin, like\n`messages_pt_BR.properties` for instance, the missing labels will be\nreplaced by the ones from file `messages_pt_PT.properties` (if it\nexists), then by the reference English file used by Crowdin. This is\nwhy you'll see English translations by default in some non-English\nfiles.\n\nWhat's with these two letter files like `messages_pt.properties`? Those are actually an automatic copy of the four letter version, purposed to provide a fallback when browser language is set to a two letter format. So you are not supposed to modify them, ever.\n\n\n## How to add custom translations to an existing language?\n\nIf you want to add your custom label translations to an existing\nlanguage, you can contribute it to the main file holding all\ntranslations.\n\n1. Take your `messages_xx_XX.properties` where `xx_XX` is the 4 letters codename for your language.\n\n2. Create a Nuxeo Bundle and put your file under:\n\n        src/main/resources/web/nuxeo.war/WEB-INF/classes/\n\n3. Modify the deployment-fragment.xml file accordingly:\n\n        <?xml version=\"1.0\"?>\n        <fragment version=\"1\">\n          <require>org.nuxeo.ecm.platform.lang.ext</require>\n          <install>\n            <delete path=\"${bundle.fileName}.tmp\" />\n            <mkdir path=\"${bundle.fileName}.tmp\" />\n            <unzip from=\"${bundle.fileName}\" to=\"${bundle.fileName}.tmp\" />\n            <!-- Add the content of messages_xx_XX.properties at the end of the existing file -->\n            <append from=\"${bundle.fileName}.tmp/web/nuxeo.war/WEB-INF/classes/messages_xx_XX.properties\"\n                    to=\"nuxeo.war/WEB-INF/classes/messages_xx_XX.properties\" addNewLine=\"true\" />\n            <!-- Add fallback to two letters locale for browser compatibility if needed -->\n            <append from=\"${bundle.fileName}.tmp/web/nuxeo.war/WEB-INF/classes/messages_xx_XX.properties\"\n                    to=\"nuxeo.war/WEB-INF/classes/messages_xx.properties\" addNewLine=\"true\" />\n            <delete path=\"${bundle.fileName}.tmp\" />\n          </install>\n        </fragment>\n\n## How to override existing translations?\n\nThe same procedure as above can be used to override some existing\ntranslations. Just make sure you also require any bundle that would\ndefine them (like bundle \"`org.nuxeo.ecm.platform.lang.ext`\" above): the\nlast definition in the file wins over the others.\n",
        "digest": "b417f9c42960af26f7e2baebc0a11215",
        "encoding": "UTF-8",
        "length": 5132,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-signature-config",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.signature.api",
          "org.nuxeo.ecm.platform.signature.config",
          "org.nuxeo.ecm.platform.signature.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature",
        "id": "grp:org.nuxeo.ecm.platform.signature",
        "name": "org.nuxeo.ecm.platform.signature",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Platform Signature\n\n\nThis is a digital signature plugin for signing PDF files. It provides multiple functionalities related to digital signing of documents, among others:\n\n1. to create user certificates and store them within the Nuxeo CAP Instance.\n2. to sign pdf documents\n3. to share/download the local root certificate used for signing all documents within the domain\n\n\n<A name=\"buildinganddeploying\"></A>\n## Building and deploying\n\nTo see the list of all commands available for building and deploying, use the following:\n\n    $ ant usage\n\n### How to build\n\nYou can build Nuxeo Digital Signature plugin with:\n\n    $ ant build\n\nIf you want to build and launch the tests, do it with:\n\n    $ ant build-with-tests\n\n### How to deploy\n\nConfigure the build.properties files (starting from the `build.properties.sample` file to be found in the current folder), to point your Tomcat instance:\n\n    $ cp build.properties.sample build.properties\n    $ vi build.properties\n\nYou can then deploy Nuxeo Digital Signature to your Tomcat instance with:\n\n    $ ant deploy-tomcat\n\nYou can also take all generated jar files (currently 3, present in the target directories of all submodules of this project), copy them into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\n\n## Project Structure\n\nThis project can be divided conceptually into 3 parts:\n\n1) certificate generation (low-level PKI object operations, CA operations)\n\n2) certificate persistence (storing and retrieving keystores containing certificates inside nuxeo directories)\n\n3) pdf signing with an existing certificate\n\n\n## Configuration:\n\n1) Install your root keystore file in a secured directory\n\nTo do initial testing you can use the keystore specified in:\n./nuxeo-platform-signature-core/src/main/resources/OSGI-INF/root-contrib.xml\n\n2) You might have to modify your server system's java encryption configuration by installing JCE Unlimited Strength Jurisdiction Policy Files needed for passwords longer than 7 characters,\n\n*Note: cryptography exportation laws differ between countries so make sure you are using adequate encryption configuration, libraries and tools.*\n\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.",
            "digest": "22f56d5291b9c9107486dbf2319cb39c",
            "encoding": "UTF-8",
            "length": 2832,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.signature.config",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Contribution of default values for the certificates\n    creation service. Must be overridden by a project-specific component\n    to provide custom values.\n  \n",
          "documentationHtml": "<p>\nContribution of default values for the certificates\ncreation service. Must be overridden by a project-specific component\nto provide custom values.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      The configuration of the server root certificate.\n    \n",
              "documentationHtml": "<p>\nThe configuration of the server root certificate.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.signature.api.pki.RootService--rootconfig",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.config/org.nuxeo.signature.config.default/Contributions/org.nuxeo.signature.config.default--rootconfig",
              "id": "org.nuxeo.signature.config.default--rootconfig",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.signature.api.pki.RootService",
                "name": "org.nuxeo.ecm.platform.signature.api.pki.RootService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"rootconfig\" target=\"org.nuxeo.ecm.platform.signature.api.pki.RootService\">\n    <documentation>\n      The configuration of the server root certificate.\n    </documentation>\n    <configuration>\n      <rootKeystoreFilePath>pdfca-keystore.jks</rootKeystoreFilePath>\n      <rootKeystorePassword>********</rootKeystorePassword>\n      <rootCertificateAlias>pdfcakey</rootCertificateAlias>\n      <!-- or proper certificate -->\n      <rootKeyAlias>pdfcakey</rootKeyAlias>\n      <rootKeyPassword>********</rootKeyPassword>\n    </configuration>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      The parameters for user certificate creation.\n    \n",
              "documentationHtml": "<p>\nThe parameters for user certificate creation.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.signature.api.user.CUserService--cuserdescriptor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.config/org.nuxeo.signature.config.default/Contributions/org.nuxeo.signature.config.default--cuserdescriptor",
              "id": "org.nuxeo.signature.config.default--cuserdescriptor",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.signature.api.user.CUserService",
                "name": "org.nuxeo.ecm.platform.signature.api.user.CUserService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"cuserdescriptor\" target=\"org.nuxeo.ecm.platform.signature.api.user.CUserService\">\n    <documentation>\n      The parameters for user certificate creation.\n    </documentation>\n    <userDescriptor>\n      <countryCode>US</countryCode>\n      <organization>Example Organization</organization>\n      <organizationalUnit>Users</organizationalUnit>\n    </userDescriptor>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.signature.api.sign.SignatureService--signature",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.config/org.nuxeo.signature.config.default/Contributions/org.nuxeo.signature.config.default--signature",
              "id": "org.nuxeo.signature.config.default--signature",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.signature.api.sign.SignatureService",
                "name": "org.nuxeo.ecm.platform.signature.api.sign.SignatureService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"signature\" target=\"org.nuxeo.ecm.platform.signature.api.sign.SignatureService\">\n    <configuration>\n      <reason>This document signed as an example.\n      </reason>\n      <layout columns=\"3\" id=\"defaultConfig\" lines=\"5\" startColumn=\"1\" startLine=\"1\" textSize=\"10\"/>\n    </configuration>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.config/org.nuxeo.signature.config.default",
          "name": "org.nuxeo.signature.config.default",
          "requirements": [],
          "resolutionOrder": 493,
          "services": [],
          "startOrder": 741,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.signature.config.default\">\n\n  <documentation>\n    Contribution of default values for the certificates\n    creation service. Must be overridden by a project-specific component\n    to provide custom values.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.signature.api.pki.RootService\" point=\"rootconfig\">\n    <documentation>\n      The configuration of the server root certificate.\n    </documentation>\n    <configuration>\n      <rootKeystoreFilePath>pdfca-keystore.jks</rootKeystoreFilePath>\n      <rootKeystorePassword>********</rootKeystorePassword>\n      <rootCertificateAlias>pdfcakey</rootCertificateAlias>\n      <!-- or proper certificate -->\n      <rootKeyAlias>pdfcakey</rootKeyAlias>\n      <rootKeyPassword>********</rootKeyPassword>\n    </configuration>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.signature.api.user.CUserService\" point=\"cuserdescriptor\">\n    <documentation>\n      The parameters for user certificate creation.\n    </documentation>\n    <userDescriptor>\n      <countryCode>US</countryCode>\n      <organization>Example Organization</organization>\n      <organizationalUnit>Users</organizationalUnit>\n    </userDescriptor>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.signature.api.sign.SignatureService\" point=\"signature\">\n    <configuration>\n      <reason>This document signed as an example.\n      </reason>\n      <layout id=\"defaultConfig\" lines=\"5\" columns=\"3\" startLine=\"1\" startColumn=\"1\" textSize=\"10\"/>\n    </configuration>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/signature-default-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-signature-config-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.config",
      "id": "org.nuxeo.ecm.platform.signature.config",
      "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: Digital Signature Default Config\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.signature.config;singleton:=\r\n true\r\nNuxeo-Component: OSGI-INF/signature-default-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 493,
      "minResolutionOrder": 493,
      "packages": [
        "nuxeo-signature"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Platform Signature\n\n\nThis is a digital signature plugin for signing PDF files. It provides multiple functionalities related to digital signing of documents, among others:\n\n1. to create user certificates and store them within the Nuxeo CAP Instance.\n2. to sign pdf documents\n3. to share/download the local root certificate used for signing all documents within the domain\n\n\n<A name=\"buildinganddeploying\"></A>\n## Building and deploying\n\nTo see the list of all commands available for building and deploying, use the following:\n\n    $ ant usage\n\n### How to build\n\nYou can build Nuxeo Digital Signature plugin with:\n\n    $ ant build\n\nIf you want to build and launch the tests, do it with:\n\n    $ ant build-with-tests\n\n### How to deploy\n\nConfigure the build.properties files (starting from the `build.properties.sample` file to be found in the current folder), to point your Tomcat instance:\n\n    $ cp build.properties.sample build.properties\n    $ vi build.properties\n\nYou can then deploy Nuxeo Digital Signature to your Tomcat instance with:\n\n    $ ant deploy-tomcat\n\nYou can also take all generated jar files (currently 3, present in the target directories of all submodules of this project), copy them into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\n\n## Project Structure\n\nThis project can be divided conceptually into 3 parts:\n\n1) certificate generation (low-level PKI object operations, CA operations)\n\n2) certificate persistence (storing and retrieving keystores containing certificates inside nuxeo directories)\n\n3) pdf signing with an existing certificate\n\n\n## Configuration:\n\n1) Install your root keystore file in a secured directory\n\nTo do initial testing you can use the keystore specified in:\n./nuxeo-platform-signature-core/src/main/resources/OSGI-INF/root-contrib.xml\n\n2) You might have to modify your server system's java encryption configuration by installing JCE Unlimited Strength Jurisdiction Policy Files needed for passwords longer than 7 characters,\n\n*Note: cryptography exportation laws differ between countries so make sure you are using adequate encryption configuration, libraries and tools.*\n\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.",
        "digest": "22f56d5291b9c9107486dbf2319cb39c",
        "encoding": "UTF-8",
        "length": 2832,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-launcher-commons",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.connect.standalone",
          "org.nuxeo.launcher.commons",
          "org.nuxeo.osgi",
          "org.nuxeo.runtime",
          "org.nuxeo.runtime.aws",
          "org.nuxeo.runtime.cluster",
          "org.nuxeo.runtime.datasource",
          "org.nuxeo.runtime.jtajca",
          "org.nuxeo.runtime.kv",
          "org.nuxeo.runtime.management",
          "org.nuxeo.runtime.metrics",
          "org.nuxeo.runtime.migration",
          "org.nuxeo.runtime.mongodb",
          "org.nuxeo.runtime.nuxeo-runtime-deploy",
          "org.nuxeo.runtime.pubsub",
          "org.nuxeo.runtime.reload",
          "org.nuxeo.runtime.stream"
        ],
        "hierarchyPath": "/grp:org.nuxeo.runtime",
        "id": "grp:org.nuxeo.runtime",
        "name": "org.nuxeo.runtime",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.launcher.commons",
      "components": [],
      "fileName": "nuxeo-launcher-commons-2023.7.9.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.launcher.commons",
      "id": "org.nuxeo.launcher.commons",
      "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: 2023.7.9-t20240130-104621\r\nBundle-SymbolicName: org.nuxeo.launcher.commons;\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-forms-layout-client",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.forms.layout.api",
          "org.nuxeo.ecm.platform.forms.layout.client",
          "org.nuxeo.ecm.platform.forms.layout.core",
          "org.nuxeo.ecm.platform.forms.layout.export",
          "org.nuxeo.ecm.platform.forms.layout.io",
          "org.nuxeo.ecm.platform.forms.layout.io.plugins"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout",
        "id": "grp:org.nuxeo.ecm.platform.forms.layout",
        "name": "org.nuxeo.ecm.platform.forms.layout",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.forms.layout.client",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Component that provides layouts/widgets contributions used when\n    rendering layouts/widgets dev screens\n\n    @author Anahide Tchertchian\n    (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nComponent that provides layouts/widgets contributions used when\nrendering layouts/widgets dev screens\n</p><p>\n(at&#64;nuxeo.com)\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouttypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.dev/Contributions/org.nuxeo.ecm.platform.forms.layout.dev--layouttypes",
              "id": "org.nuxeo.ecm.platform.forms.layout.dev--layouttypes",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouttypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layoutType name=\"devLayout\">\n      <templates>\n        <template mode=\"any\">\n          /widgets/dev/layouts/dev_layout_template.xhtml\n        </template>\n      </templates>\n    </layoutType>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.dev/Contributions/org.nuxeo.ecm.platform.forms.layout.dev--layouts",
              "id": "org.nuxeo.ecm.platform.forms.layout.dev--layouts",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"widget_dev_layout\" type=\"devLayout\">\n      <rows>\n        <row>\n          <widget>type</widget>\n        </row>\n        <row>\n          <widget>typeCategory</widget>\n        </row>\n        <row>\n          <widget>mode</widget>\n        </row>\n        <row>\n          <widget>dynamic</widget>\n        </row>\n        <row>\n          <widget>properties</widget>\n        </row>\n        <row>\n          <widget>controls</widget>\n        </row>\n      </rows>\n      <widget name=\"type\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Type</label>\n        </labels>\n        <fields>\n          <field>type</field>\n        </fields>\n      </widget>\n      <widget name=\"typeCategory\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Type Category</label>\n        </labels>\n        <fields>\n          <field>typeCategory</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.typeCategory or\n            layoutValue.typeCategory == 'jsf', 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"mode\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Mode</label>\n        </labels>\n        <fields>\n          <field>mode</field>\n        </fields>\n      </widget>\n      <widget name=\"dynamic\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Dynamic</label>\n        </labels>\n        <fields>\n          <field>dynamic</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(layoutValue.dynamic, mode, 'hidden')}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"properties\" type=\"template\">\n        <labels>\n          <label mode=\"any\">Properties</label>\n        </labels>\n        <fields>\n          <field>properties</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.properties, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/dev/properties_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"controls\" type=\"template\">\n        <labels>\n          <label mode=\"any\">Controls</label>\n        </labels>\n        <fields>\n          <field>controls</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.controls, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/dev/properties_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"layout_dev_layout\" type=\"devLayout\">\n      <rows>\n        <row>\n          <widget>type</widget>\n        </row>\n        <row>\n          <widget>mode</widget>\n        </row>\n        <row>\n          <widget>dynamic</widget>\n        </row>\n        <row>\n          <widget>properties</widget>\n        </row>\n      </rows>\n      <widget name=\"type\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Type</label>\n        </labels>\n        <fields>\n          <field>type</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.type, 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"mode\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Mode</label>\n        </labels>\n        <fields>\n          <field>mode</field>\n        </fields>\n      </widget>\n      <widget name=\"dynamic\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Dynamic</label>\n        </labels>\n        <fields>\n          <field>dynamic</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(layoutValue.dynamic, mode, 'hidden')}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"properties\" type=\"template\">\n        <labels>\n          <label mode=\"any\">Properties</label>\n        </labels>\n        <fields>\n          <field>properties</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.properties, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/dev/properties_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.dev",
          "name": "org.nuxeo.ecm.platform.forms.layout.dev",
          "requirements": [],
          "resolutionOrder": 368,
          "services": [],
          "startOrder": 326,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.forms.layout.dev\">\n\n  <documentation>\n    Component that provides layouts/widgets contributions used when\n    rendering layouts/widgets dev screens\n\n    @author Anahide Tchertchian\n    (at@nuxeo.com)\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouttypes\">\n\n    <layoutType name=\"devLayout\">\n      <templates>\n        <template mode=\"any\">\n          /widgets/dev/layouts/dev_layout_template.xhtml\n        </template>\n      </templates>\n    </layoutType>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"widget_dev_layout\" type=\"devLayout\">\n      <rows>\n        <row>\n          <widget>type</widget>\n        </row>\n        <row>\n          <widget>typeCategory</widget>\n        </row>\n        <row>\n          <widget>mode</widget>\n        </row>\n        <row>\n          <widget>dynamic</widget>\n        </row>\n        <row>\n          <widget>properties</widget>\n        </row>\n        <row>\n          <widget>controls</widget>\n        </row>\n      </rows>\n      <widget name=\"type\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Type</label>\n        </labels>\n        <fields>\n          <field>type</field>\n        </fields>\n      </widget>\n      <widget name=\"typeCategory\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Type Category</label>\n        </labels>\n        <fields>\n          <field>typeCategory</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.typeCategory or\n            layoutValue.typeCategory == 'jsf', 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"mode\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Mode</label>\n        </labels>\n        <fields>\n          <field>mode</field>\n        </fields>\n      </widget>\n      <widget name=\"dynamic\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Dynamic</label>\n        </labels>\n        <fields>\n          <field>dynamic</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(layoutValue.dynamic, mode, 'hidden')}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"properties\" type=\"template\">\n        <labels>\n          <label mode=\"any\">Properties</label>\n        </labels>\n        <fields>\n          <field>properties</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.properties, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/dev/properties_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"controls\" type=\"template\">\n        <labels>\n          <label mode=\"any\">Controls</label>\n        </labels>\n        <fields>\n          <field>controls</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.controls, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/dev/properties_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"layout_dev_layout\" type=\"devLayout\">\n      <rows>\n        <row>\n          <widget>type</widget>\n        </row>\n        <row>\n          <widget>mode</widget>\n        </row>\n        <row>\n          <widget>dynamic</widget>\n        </row>\n        <row>\n          <widget>properties</widget>\n        </row>\n      </rows>\n      <widget name=\"type\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Type</label>\n        </labels>\n        <fields>\n          <field>type</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.type, 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"mode\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Mode</label>\n        </labels>\n        <fields>\n          <field>mode</field>\n        </fields>\n      </widget>\n      <widget name=\"dynamic\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Dynamic</label>\n        </labels>\n        <fields>\n          <field>dynamic</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(layoutValue.dynamic, mode, 'hidden')}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"properties\" type=\"template\">\n        <labels>\n          <label mode=\"any\">Properties</label>\n        </labels>\n        <fields>\n          <field>properties</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.properties, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/dev/properties_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n    </layout>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouts-dev-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Component that provides main contributions to the web layout\n    manager widget\n    types.\n\n    @version 1.0 @author Anahide Tchertchian (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nComponent that provides main contributions to the web layout\nmanager widget\ntypes.\n</p><p>\n&#64;version 1.0 &#64;author Anahide Tchertchian (at&#64;nuxeo.com)\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.LayoutStore--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.MainContribution/Contributions/org.nuxeo.ecm.platform.forms.layout.MainContribution--widgets",
              "id": "org.nuxeo.ecm.platform.forms.layout.MainContribution--widgets",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "name": "org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\">\n\n    <widget name=\"escape\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Escape</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to false, the held value will not be escaped.\n          For instance if it contains HTML tags, they will be\n          rendered as part of\n          the rendered HTML page instead of being rendered as text content.\n          Defaults to true.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>escape</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Yes (default value)\" itemValue=\"true\"/>\n        <option itemLabel=\"No\" itemValue=\"false\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"style\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style</label>\n      </labels>\n      <fields>\n        <field>style</field>\n      </fields>\n    </widget>\n\n    <widget name=\"styleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style class</label>\n      </labels>\n      <fields>\n        <field>styleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"subStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Sub style class</label>\n      </labels>\n      <fields>\n        <field>subStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"subItemStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Sub item style class</label>\n      </labels>\n      <fields>\n        <field>subItemStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"title\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Title</label>\n      </labels>\n      <fields>\n        <field>title</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"text_localize\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Localize</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to true, the held value will be translated.\n          This property cannot be an EL expression, it will only resolve literal\n          values 'true' or 'false'. Defaults to false. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>localize</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"accesskey\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Access key</label>\n      </labels>\n      <fields>\n        <field>accesskey</field>\n      </fields>\n    </widget>\n\n    <widget name=\"alt\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Alt</label>\n      </labels>\n      <fields>\n        <field>alt</field>\n      </fields>\n    </widget>\n\n    <widget name=\"dir\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Direction</label>\n      </labels>\n      <fields>\n        <field>dir</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"\" itemValue=\"\"/>\n        <option itemLabel=\"Left to right\" itemValue=\"LTR\"/>\n        <option itemLabel=\"Right to left\" itemValue=\"RTL\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"placeholder\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Placeholder</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String representing a short hint (a word or short\n          phrase)\n          intended to aid the user with data entry.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>placeholder</field>\n      </fields>\n    </widget>\n\n    <widget name=\"disabled\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Disabled</label>\n      </labels>\n      <fields>\n        <field>disabled</field>\n      </fields>\n    </widget>\n\n    <widget name=\"immediate\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Immediate</label>\n      </labels>\n      <fields>\n        <field>immediate</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"lang\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Lang</label>\n      </labels>\n      <fields>\n        <field>lang</field>\n      </fields>\n    </widget>\n\n    <widget name=\"maxlength\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Max length</label>\n      </labels>\n      <fields>\n        <field>maxlength</field>\n      </fields>\n    </widget>\n\n    <widget name=\"required\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Required</label>\n      </labels>\n      <fields>\n        <field>required</field>\n      </fields>\n    </widget>\n\n    <widget name=\"size\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Size</label>\n      </labels>\n      <fields>\n        <field>size</field>\n      </fields>\n      <controls mode=\"any\">\n        <control name=\"deprecatedVersion\">6.0</control>\n        <control name=\"deprecatedDescription\">Size must now be set in css, not with the size attribute</control>\n      </controls>\n    </widget>\n\n    <widget name=\"validator\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Validator</label>\n      </labels>\n      <fields>\n        <field>validator</field>\n      </fields>\n    </widget>\n\n    <widget name=\"valueChangeListener\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Value change listener</label>\n      </labels>\n      <fields>\n        <field>valueChangeListener</field>\n      </fields>\n    </widget>\n\n    <widget name=\"redisplay\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Redisplay</label>\n      </labels>\n      <fields>\n        <field>redisplay</field>\n      </fields>\n    </widget>\n\n    <widget name=\"textarea_cols\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Number of columns</label>\n      </labels>\n      <fields>\n        <field>cols</field>\n      </fields>\n    </widget>\n\n    <widget name=\"textarea_rows\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Number of rows</label>\n      </labels>\n      <fields>\n        <field>rows</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_pattern\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Pattern</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String pattern for the date and time, as described by\n          the java.text.SimpleDateFormat class, and as used in the standard\n          DateTimeConverter. Default value is \"MMM d, yyyy\". Sample value:\n          \"#{nxu:basicDateFormatter()}\" or \"#{nxu:basicDateAndTimeFormatter()}\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pattern</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_timeZone\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Time zone</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String timeZone ID. The server time zone is\n          used if not\n          set.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>timeZone</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_format\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Format</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String format for the date and time, as described by\n          the java.text.SimpleDateFormat class, and as used in the standard\n          DateTimeConverter. Default value is \"MMM d, yyyy\". Sample value:\n          \"#{nxu:basicDateFormatter()}\" or \"#{nxu:basicDateAndTimeFormatter()}\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>format</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_locale\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Locale</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String representing the locale to use for\n          the calendar.\n          Current locale is used if not set.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>locale</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"\" itemValue=\"\"/>\n        <option itemLabel=\"Catalan\" itemValue=\"ca\"/>\n        <option itemLabel=\"Chinese\" itemValue=\"cn\"/>\n        <option itemLabel=\"Czech\" itemValue=\"cz\"/>\n        <option itemLabel=\"Deutsch\" itemValue=\"de\"/>\n        <option itemLabel=\"English\" itemValue=\"en\"/>\n        <option itemLabel=\"Spanish\" itemValue=\"es\"/>\n        <option itemLabel=\"French\" itemValue=\"fr\"/>\n        <option itemLabel=\"Italiano\" itemValue=\"it\"/>\n        <option itemLabel=\"Japanese\" itemValue=\"jp\"/>\n        <option itemLabel=\"Nederlands\" itemValue=\"nl\"/>\n        <option itemLabel=\"Polish\" itemValue=\"pl\"/>\n        <option itemLabel=\"Portuguese\" itemValue=\"pt\"/>\n        <option itemLabel=\"Romanian\" itemValue=\"ro\"/>\n        <option itemLabel=\"Russian\" itemValue=\"ru\"/>\n        <option itemLabel=\"svenska\" itemValue=\"sv\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"datetime_timeZone\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Time zone</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String timeZone ID. The server time zone is used if\n          not set.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>timeZone</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_triggerImg\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Trigger image</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Image path to use for the trigger. Available since\n          5.4.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>triggerImg</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_triggerLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Trigger label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Label to display on the trigger image. Defaults to\n          \"...\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>triggerLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_triggerStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Trigger style class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Style class to set on the trigger button tag, defaults\n          to 'calendarTrigger'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>triggerStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"file_downloadLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Download label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Value binding that will be used as the download link\n          value, and will attempt to be translated.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>downloadLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"file_iconRendered\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Icon rendered</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean flag indicating whether or not the file icon\n          should be rendered. Defaults to true.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>iconRendered</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Yes (default value)\" itemValue=\"true\"/>\n        <option itemLabel=\"No\" itemValue=\"false\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"htmltext_disableHtmlInit\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Disable HTML init</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to true, the default display will be\n          the text\n          display\n          (not html editor). Available since 5.3.1.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>disableHtmlInit</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"htmltext_width\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Width</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The textarea width. Defaults to \"640\".\n          Give the exact\n          size in pixels or percentage.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>width</field>\n      </fields>\n    </widget>\n\n    <widget name=\"htmltext_height\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Height</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The textarea height. Defaults to \"400\".\n          Give the exact\n          size in pixels or percentage.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>height</field>\n      </fields>\n    </widget>\n\n    <widget name=\"htmltext_editorSelector\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Editor selector</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The class to use to identify text areas to turn into\n          html editors. Defaults to \"mceEditor\". See the editor_selector option\n          in TinyMCE\n          (http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/editor_selector).\n        </label>\n      </helpLabels>\n      <fields>\n        <field>editorSelector</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"htmltext_configuration\" type=\"textarea\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">JSON configuration</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          JSON configuration map for TinyMCE initialization, that will be merged\n          with default configuration. Available since 8.1.\n          Example: {\"toolbar4\": \"paste\"}\n        </label>\n      </helpLabels>\n      <fields>\n        <field>configuration</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directoryName\" type=\"selectOneResource\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Vocabulary</label>\n      </labels>\n      <fields>\n        <field>directoryName</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"resourceName\">vocabularies</property>\n      </properties>\n      <properties widgetMode=\"any\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"directoryNameDemoPreview\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Vocabulary</label>\n      </labels>\n      <fields>\n        <field>directoryName</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"edit_demo_preview\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"directory_localize\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Localize</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Activate localization of vocabulary labels. Labels are\n          translated as usual picking values in messages*.properties files.\n          Database localization should also be activated if localized labels\n          are provided by the vocabulary itself.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>localize</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"directory_dbl10n\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Activate database localization</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Activate retrieval of localized labels in the\n          vocabulary database, when translations are held by the directory\n          itself, in fields with a label_[lang] pattern, and defaulting to\n          label_en. Available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>dbl10n</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"directory_displayIdAndLabel\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display id and label</label>\n      </labels>\n      <fields>\n        <field>displayIdAndLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_style\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style</label>\n      </labels>\n      <fields>\n        <field>style</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_cssStyle\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style</label>\n      </labels>\n      <fields>\n        <field>cssStyle</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_cssStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style class</label>\n      </labels>\n      <fields>\n        <field>cssStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_styleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style class</label>\n      </labels>\n      <fields>\n        <field>styleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_displayObsoleteEntries\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display obsolete entries</label>\n      </labels>\n      <fields>\n        <field>displayObsoleteEntries</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_notDisplayDefaultOption\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Do not display the default option</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          True if there should not be displayed a \"Please select\n          a value\" option\n        </label>\n      </helpLabels>\n      <fields>\n        <field>notDisplayDefaultOption</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_ordering\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Sort criterion</label>\n      </labels>\n      <fields>\n        <field>ordering</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Label (default)\" itemValue=\"label\"/>\n        <option itemLabel=\"Ordering\" itemValue=\"ordering\"/>\n        <option itemLabel=\"Id\" itemValue=\"id\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"complex_subwidgets_display\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The display attribute controls the rendering of\n          subwidgets. Available since 5.4.2.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>display</field>\n      </fields>\n      <selectOptions>\n        <!-- block-like renderings available since 5.6 -->\n        <option itemLabel=\"Block (label on the left, default)\" itemValue=\"block_left\"/>\n        <option itemLabel=\"Block (label on top)\" itemValue=\"block_top\"/>\n        <option itemLabel=\"Table\" itemValue=\"table\"/>\n        <option itemLabel=\"In line\" itemValue=\"inline\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"list_subwidgets_display\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The display attribute controls the rendering of\n          subwidgets. Available since 5.4.2.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>display</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Block (label on the left, default)\" itemValue=\"block_left\"/>\n        <option itemLabel=\"Block (label on top)\" itemValue=\"block_top\"/>\n        <option itemLabel=\"Table\" itemValue=\"table\"/>\n        <option itemLabel=\"In line\" itemValue=\"inline\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"subwidgets_hideSubLabels\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide subwidgets labels</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the rendering of subwidgets\n          labels. Available since 5.4.2.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideSubLabels</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_diff\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Diff</label>\n      </labels>\n      <fields>\n        <field>diff</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_orderable\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Orderable</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to order the\n          items. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>orderable</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_hideDeleteButton\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide delete button</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to remove the\n          'delete' button for each list item. Available since 5.6.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideDeleteButton</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_hideAddButton\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide add button</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to remove the\n          'add' button to add an item to the list. Available since 5.6.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideAddButton</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_listTemplateItem\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">List template item</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute enables to control the template for\n          each item that needs to be added to the list. In most common cases,\n          this value is deduced from the field definition, using the expression:\n          #{nxd:propertyDefaultValue(widget.fieldDefinitions[0].propertyName)}.\n          This needs to be adapted for subwidgets (when handling lists of lists\n          for instance) or when using this widget on another object that a\n          DocumentModel property. For instance, for a subwidget, you can use:\n          #{nxd:propertyDefaultValue('mySchema:listOfLists/stringListItem')}.\n          Available since 5.6.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>listTemplateItem</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_removeEmpty\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Remove empty item(s)</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This boolean attribute allows to remove null items from the list on edit.\n          Items are only removed when there are changes to the list items.\n          Available since 7.3.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>removeEmpty</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_number\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Number of open item(s)</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This integer attribute allows to set the number of new items that should\n          be opened when displaying the list widget.\n          Available since 7.3.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>number</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_addLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">'Add' action label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This string attribute allows to configure the label used for\n          the 'add' action on the list widget. It is translated if the widget\n          is marked as translated.\n          Available since 7.3.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>addLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"container_subwidgets_display\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The display attribute controls the rendering of\n          subwidgets.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>display</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Block (label on the left, default)\" itemValue=\"block_left\"/>\n        <option itemLabel=\"Block (label on top)\" itemValue=\"block_top\"/>\n        <option itemLabel=\"Table\" itemValue=\"table\"/>\n        <option itemLabel=\"In line\" itemValue=\"inline\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"container_subwidgets_hideSubLabels\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide subwidgets labels</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the rendering of subwidgets\n          labels.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideSubLabels</field>\n      </fields>\n    </widget>\n\n    <widget name=\"widgetsDisplay\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Widgets Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The display attribute controls the rendering of\n          widgets.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>widgetsDisplay</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Label on the left (default)\" itemValue=\"label_left\"/>\n        <option itemLabel=\"Label on top\" itemValue=\"label_top\"/>\n        <option itemLabel=\"No Label\" itemValue=\"no_label\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"select_layout\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Layout</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The select layout binding.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>layout</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Line direction (default)\" itemValue=\"\"/>\n        <option itemLabel=\"Page direction\" itemValue=\"pageDirection\"/>\n        <option itemLabel=\"Line direction\" itemValue=\"lineDirection\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"select_layout_page_default\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Layout</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The select layout binding.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>layout</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Page direction (default)\" itemValue=\"\"/>\n        <option itemLabel=\"Page direction\" itemValue=\"pageDirection\"/>\n        <option itemLabel=\"Line direction\" itemValue=\"lineDirection\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"select_selectOptions\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Select Options</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The select options binding.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>selectOptions</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"select_var\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Variable</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The variable name for select options expressions\n          resolution. Usually defaults to 'item'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>var</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select_itemLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Item label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Expression referencing the variable name to display\n          the option label.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>itemLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select_itemValue\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Item label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Expression referencing the variable name to display\n          the option id.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>itemValue</field>\n      </fields>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.MainContribution/Contributions/org.nuxeo.ecm.platform.forms.layout.MainContribution--widgettypes",
              "id": "org.nuxeo.ecm.platform.forms.layout.MainContribution--widgettypes",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"text\">\n      <configuration>\n        <title>Text</title>\n        <description>\n          <p>\n            The text widget displays an input text in create or edit mode, with\n            additional message tag for errors, and a regular text output in\n            any\n            other mode.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputText /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;h:outputText /&gt; tag in other modes.\n          </p>\n        </description>\n        <demo id=\"textWidget\" previewEnabled=\"true\"/>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n            <type>path</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>string</type>\n          </defaultTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"text_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">escape</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">text_localize</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"text_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">maxlength</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">size</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">alt</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TextWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"int\">\n      <configuration>\n        <title>Integer</title>\n        <description>\n          <p>\n            The int widget displays an input text in create or edit mode, with\n            additional message tag for errors, and a regular text output in\n            any\n            other mode. It uses a number converter.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputText /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;h:outputText /&gt; tag in other modes.\n          </p>\n        </description>\n        <demo id=\"intWidget\" previewEnabled=\"true\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>integer</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>integer</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"int_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"int_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">maxlength</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">size</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">alt</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.IntWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"double\">\n      <configuration>\n        <title>Floating point</title>\n        <sinceVersion>5.4.2</sinceVersion>\n        <description>\n          <p>\n            The floating point (aka \"double\") widget displays an input text in\n            create or edit mode, with additional message tag for errors, and a\n            regular text output in any other mode. It uses a JSF double\n            converter.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputText /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;h:outputText /&gt; tag in other modes.\n          </p>\n        </description>\n        <!--<demo id=\"doubleWidget\" /> -->\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>double</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>double</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"double_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"double_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">maxlength</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">size</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">alt</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DoubleWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"secret\">********<configuration>\n        <title>Secret</title>\n        <description>\n          <p>\n            The secret widget displays an input secret text in create or edit\n            mode, with additional message tag for errors, and nothing in any\n            other mode.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputSecret /&gt; tag in create or edit mode.\n          </p>\n        </description>\n        <demo id=\"secretWidget\" previewEnabled=\"true\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"secret_widget_type_properties_edit\">********<rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">maxlength</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">size</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">alt</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">redisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SecretWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"textarea\">\n      <configuration>\n        <title>Textarea</title>\n        <description>\n          <p>\n            The textarea widget displays a textarea in create or edit mode,\n            with\n            additional message tag for errors, and a regular text output in\n            any\n            other mode.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputTextarea /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;h:outputText /&gt; tag in other modes.\n          </p>\n        </description>\n        <demo id=\"textareaWidget\" previewEnabled=\"true\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"textarea_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">escape</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"textarea_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">textarea_cols</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">textarea_rows</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TextareaWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"datetime\">\n      <configuration>\n        <title>Datetime</title>\n        <description>\n          <p>\n            The datetime widget displays a javascript calendar in create or\n            edit\n            mode, with additional message tag for errors, and a regular text\n            output in any other mode. It uses a date time converter.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;nxu:inputDatetime /&gt; tag in create or edit mode, and\n            properties accepted on a &lt;h:outputText /&gt; tag in other\n            modes.\n            The converter will also be given these properties.\n          </p>\n        </description>\n        <demo id=\"datetimeWidget\" previewEnabled=\"true\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>date</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>date</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"datetime_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_pattern</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_timeZone</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"datetime_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_format</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_locale</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_timeZone</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerImg</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerStyleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DateTimeWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"template\">\n      <configuration>\n        <title>Template</title>\n        <description>\n          <p>\n            The template widget displays a template content whatever the mode.\n          </p>\n          <p>\n            Widgets using this type must provide the path to this template ;\n            this template can check the mode to adapt the rendering.\n          </p>\n          <p>\n            Note that the same handler class can be used to define a new widget\n            type using a designated template, by registering it as is:\n          </p>\n          <p>\n            &lt;widgetType name=\"template\"&gt; &lt;handler-class&gt;\n            org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n            &lt;/handler-class&gt; &lt;property name=\"template\"&gt;\n            /widgets/my_custom_widget_template.xhtml &lt;/property&gt;\n            &lt;/widgetType&gt; </p>\n        </description>\n        <demo id=\"templateWidget\" previewEnabled=\"false\"/>\n        <categories>\n          <category>dev</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>true</complex>\n          <supportedTypes>\n            <type>*</type>\n          </supportedTypes>\n        </fields>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"template_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>template</widget>\n                </row>\n              </rows>\n              <widget name=\"template\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">widget_templates</property>\n                </properties>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"file\">\n      <configuration>\n        <title>File</title>\n        <description>\n          <p>\n            The file widget displays a file uploader/editor in create or edit\n            mode, with additional message tag for errors, and a link to the file\n            in other modes.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;nxu:inputFile /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;nxu:outputFile /&gt; tag in other modes.\n          </p>\n        </description>\n        <demo id=\"fileWidget\" previewEnabled=\"true\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>blob</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>blob</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"file_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_downloadLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_iconRendered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"file_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_downloadLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_iconRendered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.FileWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"htmltext\">\n      <configuration>\n        <title>HTML text</title>\n        <description>\n          <p>\n            The htmltext widget displays an html text editor in create or edit\n            mode, with additional message tag for errors, and a regular text\n            output in other modes (without escaping the text).\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;nxu:editor /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;nxu:outputText /&gt; tag in other modes.\n          </p>\n        </description>\n        <demo id=\"htmltextWidget\" previewEnabled=\"true\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"htmltext_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"htmltext_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">htmltext_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">htmltext_height</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">htmltext_disableHtmlInit</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">htmltext_editorSelector</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">htmltext_configuration</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.HtmlTextWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectOneListbox\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <title>Select One Listbox</title>\n        <description/>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectOneListbox_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectOneListboxWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListbox\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Select Many Listbox</title>\n        <description/>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyListbox_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectManyListboxWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectOneMenu\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <title>Select One Menu</title>\n        <description/>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"selectOneMenu_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectOneMenuWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyMenu\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Select Many Menu</title>\n        <description/>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyMenu_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectManyMenuWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectOneRadio\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Select One Radio</title>\n        <description/>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectOneRadio_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectOneRadioWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckbox\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Select Many Checkbox</title>\n        <description/>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckbox_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectManyCheckboxWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectOneDirectory\">\n      <configuration>\n        <title>Single vocabulary</title>\n        <description>\n          <p>\n            The selectOneDirectory widget displays a selection of vocabulary\n            entries in create or edit mode, with additional message tag for\n            errors, and the directory entry label in other modes.\n          </p>\n        </description>\n        <demo id=\"selectOneDirectoryWidget\" previewEnabled=\"true\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.id}</property>\n            <property name=\"ordering\">label</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"selectOneDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"view\">\n            <layout name=\"selectOneDirectory_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"selectOneDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayObsoleteEntries\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_ordering</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyle</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DirectorySelectOneWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectOneRadioDirectory\">\n      <configuration>\n        <title>Single vocabulary radio</title>\n        <description>\n          <p>\n            This widget displays radio buttons in edit mode for given category.\n          </p>\n        </description>\n        <demo id=\"selectOneRadioDirectoryWidget\" previewEnabled=\"true\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.id}</property>\n            <property name=\"ordering\">label</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"selectOneRadioDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"view\">\n            <layout name=\"selectOneRadioDirectory_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"selectOneRadioDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayObsoleteEntries\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_ordering</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyle</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DirectorySelectOneRadioWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyDirectory\">\n      <configuration>\n        <title>Multiple vocabulary</title>\n        <description>\n          <p>\n            The selectManyDirectory widget displays a multi selection of\n            vocabulary entries in create or edit mode, with additional message\n            tag for errors, and the directory entries labels in other modes.\n          </p>\n        </description>\n        <demo id=\"selectManyDirectoryWidget\" previewEnabled=\"true\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.id}</property>\n            <property name=\"ordering\">label</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"selectManyDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"view\">\n            <layout name=\"selectManyDirectory_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayObsoleteEntries\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_ordering</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyle</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DirectorySelectManyWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxDirectory\">\n      <configuration>\n        <title>Multiple vocabulary checkbox</title>\n        <description>\n          <p>\n            The selectManyCheckboxDirectory widget displays a multi selection\n            of\n            vocabulary entries in create or edit mode, with additional message\n            tag for errors, and the directory entries labels in other modes.\n          </p>\n        </description>\n        <demo id=\"selectManyCheckboxDirectoryWidget\" previewEnabled=\"true\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.id}</property>\n            <property name=\"ordering\">label</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"selectManyCheckboxDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"view\">\n            <layout name=\"selectManyCheckboxDirectory_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayObsoleteEntries\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_ordering</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyle</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DirectorySelectManyCheckboxWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"list\">\n      <configuration>\n        <title>List</title>\n        <description>\n          <p>\n            The list widget displays an editable list of items in create or\n            edit mode, with additional message tag for errors, and the same list\n            of items in other modes. It is not usable within a list widget (see\n            sublist widget for this feature).\n          </p>\n          <p>Items are defined using sub wigdets configuration.</p>\n          <p>\n            This is actually a template widget type whose template uses a\n            &lt;nxu:inputList /&gt; tag in edit or create mode, and a table\n            iterating over items in other modes.\n          </p>\n          <p>\n            Since 5.6, it will apply to the current value (e.g. the layout or\n            parent widget value) if no field definition is given.\n          </p>\n        </description>\n        <demo id=\"listWidget\" previewEnabled=\"false\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n            <type>path</type>\n            <type>date</type>\n            <type>blob</type>\n            <type>integer</type>\n            <type>double</type>\n            <type>boolean</type>\n            <type>complex</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>string</type>\n            <type>path</type>\n            <type>date</type>\n            <type>integer</type>\n            <type>double</type>\n            <type>boolean</type>\n            <type>complex</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"list_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_subwidgets_display</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">subwidgets_hideSubLabels</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"list_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_diff</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_hideDeleteButton</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_hideAddButton</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_listTemplateItem</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_removeEmpty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_number</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_addLabel</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.ListWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/js_list_widget_template.xhtml</property>\n      <property name=\"compatTemplate\">/widgets/list_widget_template.xhtml</property>\n    </widgetType>\n\n    <widgetType name=\"complex\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <title>Complex</title>\n        <description>\n          <p>\n            The complex widget displays its sub widgets, and is controlling of\n            a map-like. Each of the map items rendering is done through sub\n            widgets configuration.\n          </p>\n          <p>\n            Since 5.6, it will apply to the current value (e.g. the layout or\n            parent widget value) if no field definition is given.\n          </p>\n        </description>\n        <demo id=\"complexWidget\" previewEnabled=\"false\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n        <fields>\n          <list>false</list>\n          <complex>true</complex>\n          <supportedTypes>\n            <type>complex</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>complex</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"complex_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">complex_subwidgets_display</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">subwidgets_hideSubLabels</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/complex_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"container\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>Container</title>\n        <description>\n          <p>\n            The container widget displays its subwidgets with display options\n            to control the rendering of global div container as well as each\n            container of sub items, using the widget label as header.\n          </p>\n          <p>\n            If the widget is marked as handling labels (marker available on all\n            widgets since 5.6), the header will be displayed. Otherwise it will\n            never be displayed.\n          </p>\n          <p>\n            On version 5.6 (only this version), this widget also accepts custom\n            properties to add forms around some of its subwidgets. If the\n            property with name \"nxw_addForm_#{widgetIndex}\" is present and\n            resolves to true, then a form will be added around the subwidgets at\n            index #{widgetIndex}. For instance, adding a property\n            \"nxw_addForm_0\" with value true, the first subwidget will be\n            surrounded with a form.\n          </p>\n          <p>\n            From version 5.7, subwidgets hold this information directly, by\n            declaring a control with key \"addForm\" and value \"true\".\n          </p>\n          <p>\n            It will apply to the current value (e.g. the layout or parent\n            widget value) if no field definition is given.\n          </p>\n        </description>\n        <categories>\n          <category>decoration</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n        <handlingLabels>true</handlingLabels>\n        <supportedControls>\n          <control>requireSurroundingForm</control>\n          <control>useAjaxForm</control>\n          <control>handlingLabels</control>\n        </supportedControls>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"container_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">container_subwidgets_display</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">container_subwidgets_hideSubLabels\n                  </widget>\n                </row>\n                <row>\n                  <widget>foldable</widget>\n                </row>\n                <row>\n                  <widget>foldedByDefault</widget>\n                </row>\n                <row>\n                  <widget>headerStyleClass</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n                <row>\n                  <widget>subLabelStyleClass</widget>\n                </row>\n                <row>\n                  <widget>subStyleClass</widget>\n                </row>\n                <row>\n                  <widget>showIfEmpty</widget>\n                </row>\n                <row>\n                  <widget>tip</widget>\n                </row>\n              </rows>\n              <widget name=\"foldable\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Foldable</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, the widget label will be\n                    displayed in a header of a box, containing the sub widgets\n                    rendering. This box is foldable in javascript. Ignored if\n                    the widget is not marked as handling labels as the header\n                    will not be displayed in this case. If label is empty, a\n                    default label will be shown. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldable</field>\n                </fields>\n              </widget>\n              <widget name=\"foldedByDefault\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Folded by default</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, and property \"foldable\" is\n                    also set to true,\n                    the box will be folded by default. Defaults\n                    to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldedByDefault</field>\n                </fields>\n              </widget>\n              <widget name=\"showIfEmpty\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Show if empty</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, the widget label will be\n                    displayed even if there are no subwidgets. Defaults to\n                    false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showIfEmpty</field>\n                </fields>\n              </widget>\n              <widget name=\"tip\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Tip</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Label to display on top of the container\n                    widget content, that will be translated if the widget is\n                    translated. Available since 5.7.3.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>tip</field>\n                </fields>\n              </widget>\n              <widget name=\"headerStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Header style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the header, displaying this\n                    widget label.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>headerStyleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the global container div.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"subLabelStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Sub Label style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the sub widget label.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>subLabelStyleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"subStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Sub style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the container of each sub\n                    widget.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>subStyleClass</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/container_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"checkbox\">\n      <configuration>\n        <title>Checkbox</title>\n        <description>\n          <p>\n            The checkbox widget displays a checkbox in create, edit and any\n            other mode, with additional message tag for errors.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:selectBooleanCheckbox /&gt; tag in create, edit mode, and\n            other modes.\n          </p>\n        </description>\n        <demo id=\"checkboxWidget\" previewEnabled=\"true\"/>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>boolean</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>boolean</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"checkbox_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"checkbox_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.CheckboxWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"hidden\">\n      <configuration>\n        <title>Hidden</title>\n        <description>\n          <p>\n            The hidden widget is for a hidden field in create, edit and any\n            other mode, with additional message tag for errors.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputHidden /&gt; tag in create, edit mode, and other modes.\n          </p>\n        </description>\n        <!-- demo does not present it (yet?) -->\n        <!--\n          <demo id=\"hiddenWidget\" previewEnabled=\"false\"/>\n        -->\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"hidden_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"hidden_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.HiddenWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"layout\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Layout</title>\n        <description>\n          <p>The layout widget renders a layout.</p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;nxl:layout /&gt; tag in all modes.\n          </p>\n          <p>\n            Since 5.6, it will apply to the current value (e.g. the layout or\n            parent widget value) if no field definition is given.\n          </p>\n        </description>\n        <categories>\n          <category>dev</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"layout_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>name</widget>\n                </row>\n                <row>\n                  <widget>nameDemoPreview</widget>\n                </row>\n                <row>\n                  <widget>mode</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">widgetsDisplay</widget>\n                </row>\n                <row>\n                  <widget>template</widget>\n                </row>\n              </rows>\n              <widget name=\"name\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout name. Since 5.6, this attribute\n                    accepts a list of multiple layout names, separated by\n                    commas.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>name</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                  <property name=\"resourceName\">layouts</property>\n                </properties>\n              </widget>\n              <widget name=\"nameDemoPreview\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout name. Since 5.6, this attribute\n                    accepts a list of multiple layout names, separated by\n                    commas.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>name</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"mode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Layout mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If not set, the mode is resolved from the\n                    usual widget mode. Otherwise it's taken instead when not\n                    empty. WARNING: Before 5.5, mode was not resolved from the\n                    widget mode, so this value was required.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>mode</field>\n                </fields>\n              </widget>\n              <widget name=\"template\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layout_templates</property>\n                </properties>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.LayoutWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"richtext_with_mimetype\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Richtext</title>\n        <description>\n          <p>\n            This widget displays an html text editor or a textarea in create or\n            edit mode, depending on the mimetype defined.\n          </p>\n          <p>\n            It accepts two fields bindings:\n            <ul>\n              <li>first field holds the text content</li>\n              <li>second field holds the text mimetype (text/plain,\n                text/html...)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <categories>\n          <!-- do not export with documents -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"richtext_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>cssClass</widget>\n                </row>\n              </rows>\n              <widget name=\"cssClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <fields>\n                  <field>cssClass</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"richtext_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget>height</widget>\n                </row>\n                <row>\n                  <widget>width</widget>\n                </row>\n                <row>\n                  <widget>cols</widget>\n                </row>\n                <row>\n                  <widget>rows</widget>\n                </row>\n                <row>\n                  <widget>editorSelector</widget>\n                </row>\n              </rows>\n              <widget name=\"width\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Width</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The textarea width. Defaults to \"700\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>width</field>\n                </fields>\n              </widget>\n              <widget name=\"height\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Height</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The textarea height. Defaults to \"400\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>height</field>\n                </fields>\n              </widget>\n              <widget name=\"cols\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Number of columns</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The cols attribute sets the number of\n                    columns to display.\n                    Available since 5.3.1.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cols</field>\n                </fields>\n              </widget>\n              <widget name=\"rows\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Number of rows</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The rows attribute sets the number of rows\n                    to display.\n                    Available since 5.3.1.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>rows</field>\n                </fields>\n              </widget>\n              <widget name=\"editorSelector\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Editor selector</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The class to use to identify text areas to\n                    turn into html\n                    editors. Defaults to \"mceEditor\". See the\n                    editor_selector\n                    option in tiny_mce\n                    (http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/editor_selector).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>editorSelector</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/richtext_with_mimetype_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"duration\">\n      <configuration>\n        <sinceVersion>5.3.2</sinceVersion>\n        <title>Duration</title>\n        <description>\n          This widget displays a i18n formatted duration of a field\n          holding a\n          value measured in seconds (can be Long, Double or String\n          valued). NB:\n          only view mode is supported right now.\n        </description>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n            <type>int</type>\n            <type>double</type>\n          </supportedTypes>\n        </fields>\n        <!-- no props -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/duration_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"setVariable\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Set variable</title>\n        <description>\n          <p>\n            This widget exposes a variable to the context for\n            rendering,\n            allowing its sub widgets to reference it.\n          </p>\n          <p>\n            This is mostly useful to simplify resolution of a variable in sub\n            contexts, and benefit from caching on the variable resolution.\n          </p>\n        </description>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"set_variable_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>var</widget>\n                </row>\n                <row>\n                  <widget>value</widget>\n                </row>\n                <row>\n                  <widget>cache</widget>\n                </row>\n                <row>\n                  <widget>resolveTwice</widget>\n                </row>\n              </rows>\n              <widget name=\"var\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Variable name</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The variable under which name the value will\n                    be exposed, making it available to sub widgets.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>var</field>\n                </fields>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"value\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Value</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The value to resolve for the variable name.\n                    The variable under which name the value will\n                    be exposed,\n                    making it available to sub widgets.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>value</field>\n                </fields>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"cache\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Cache</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean expressing if exposed value should\n                    be cached in the page.\n                    If set to true, the variable will be\n                    resolved only once per page rendering (or re-rendering in\n                    case of ajax requests). Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cache</field>\n                </fields>\n              </widget>\n              <widget name=\"resolveTwice\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Resolve twice</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean expressing if expression should be\n                    resolved twice: sometimes the expression uses a\n                    configuration element, and the first resolution of the\n                    expression will resolve to another expression, that may need\n                    to be itself evaluated again. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>resolveTwice</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <categories>\n          <category>dev</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/set_variable_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Configuration of properties disabled by default for reference\n      in EL expressions.\n    \n",
              "documentationHtml": "<p>\nConfiguration of properties disabled by default for reference\nin EL expressions.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--disabledPropertyRefs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.MainContribution/Contributions/org.nuxeo.ecm.platform.forms.layout.MainContribution--disabledPropertyRefs",
              "id": "org.nuxeo.ecm.platform.forms.layout.MainContribution--disabledPropertyRefs",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"disabledPropertyRefs\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n    <documentation>\n      Configuration of properties disabled by default for reference\n      in EL expressions.\n    </documentation>\n\n    <disabledPropertyRef name=\"converter\" widgetTypeCategory=\"jsf\"/>\n    <disabledPropertyRef name=\"validator\" widgetTypeCategory=\"jsf\"/>\n\n    <!-- avoid bad interactions with JBoss-el size EL resolver... -->\n    <disabledPropertyRef name=\"size\" widgetTypeCategory=\"jsf\"/>\n\n    <!-- rich:calendar does not resolve some attributes as EL expressions -->\n    <disabledPropertyRef name=\"showApplyButton\" widgetType=\"datetime\" widgetTypeCategory=\"jsf\"/>\n    <disabledPropertyRef name=\"defaultTime\" widgetType=\"datetime\" widgetTypeCategory=\"jsf\"/>\n    <disabledPropertyRef name=\"pattern\" widgetType=\"datetime\" widgetTypeCategory=\"jsf\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.MainContribution",
          "name": "org.nuxeo.ecm.platform.forms.layout.MainContribution",
          "requirements": [],
          "resolutionOrder": 369,
          "services": [],
          "startOrder": 325,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.forms.layout.MainContribution\">\n  <documentation>\n    Component that provides main contributions to the web layout\n    manager widget\n    types.\n\n    @version 1.0 @author Anahide Tchertchian (at@nuxeo.com)\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n    point=\"widgets\">\n\n    <widget name=\"escape\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Escape</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to false, the held value will not be escaped.\n          For instance if it contains HTML tags, they will be\n          rendered as part of\n          the rendered HTML page instead of being rendered as text content.\n          Defaults to true.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>escape</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Yes (default value)\" itemValue=\"true\" />\n        <option itemLabel=\"No\" itemValue=\"false\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"style\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style</label>\n      </labels>\n      <fields>\n        <field>style</field>\n      </fields>\n    </widget>\n\n    <widget name=\"styleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style class</label>\n      </labels>\n      <fields>\n        <field>styleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"subStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Sub style class</label>\n      </labels>\n      <fields>\n        <field>subStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"subItemStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Sub item style class</label>\n      </labels>\n      <fields>\n        <field>subItemStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"title\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Title</label>\n      </labels>\n      <fields>\n        <field>title</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"text_localize\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Localize</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to true, the held value will be translated.\n          This property cannot be an EL expression, it will only resolve literal\n          values 'true' or 'false'. Defaults to false. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>localize</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"accesskey\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Access key</label>\n      </labels>\n      <fields>\n        <field>accesskey</field>\n      </fields>\n    </widget>\n\n    <widget name=\"alt\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Alt</label>\n      </labels>\n      <fields>\n        <field>alt</field>\n      </fields>\n    </widget>\n\n    <widget name=\"dir\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Direction</label>\n      </labels>\n      <fields>\n        <field>dir</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"\" itemValue=\"\" />\n        <option itemLabel=\"Left to right\" itemValue=\"LTR\" />\n        <option itemLabel=\"Right to left\" itemValue=\"RTL\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"placeholder\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Placeholder</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String representing a short hint (a word or short\n          phrase)\n          intended to aid the user with data entry.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>placeholder</field>\n      </fields>\n    </widget>\n\n    <widget name=\"disabled\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Disabled</label>\n      </labels>\n      <fields>\n        <field>disabled</field>\n      </fields>\n    </widget>\n\n    <widget name=\"immediate\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Immediate</label>\n      </labels>\n      <fields>\n        <field>immediate</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"lang\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Lang</label>\n      </labels>\n      <fields>\n        <field>lang</field>\n      </fields>\n    </widget>\n\n    <widget name=\"maxlength\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Max length</label>\n      </labels>\n      <fields>\n        <field>maxlength</field>\n      </fields>\n    </widget>\n\n    <widget name=\"required\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Required</label>\n      </labels>\n      <fields>\n        <field>required</field>\n      </fields>\n    </widget>\n\n    <widget name=\"size\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Size</label>\n      </labels>\n      <fields>\n        <field>size</field>\n      </fields>\n      <controls mode=\"any\">\n        <control name=\"deprecatedVersion\">6.0</control>\n        <control name=\"deprecatedDescription\">Size must now be set in css, not with the size attribute</control>\n      </controls>\n    </widget>\n\n    <widget name=\"validator\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Validator</label>\n      </labels>\n      <fields>\n        <field>validator</field>\n      </fields>\n    </widget>\n\n    <widget name=\"valueChangeListener\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Value change listener</label>\n      </labels>\n      <fields>\n        <field>valueChangeListener</field>\n      </fields>\n    </widget>\n\n    <widget name=\"redisplay\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Redisplay</label>\n      </labels>\n      <fields>\n        <field>redisplay</field>\n      </fields>\n    </widget>\n\n    <widget name=\"textarea_cols\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Number of columns</label>\n      </labels>\n      <fields>\n        <field>cols</field>\n      </fields>\n    </widget>\n\n    <widget name=\"textarea_rows\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Number of rows</label>\n      </labels>\n      <fields>\n        <field>rows</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_pattern\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Pattern</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String pattern for the date and time, as described by\n          the java.text.SimpleDateFormat class, and as used in the standard\n          DateTimeConverter. Default value is \"MMM d, yyyy\". Sample value:\n          \"#{nxu:basicDateFormatter()}\" or \"#{nxu:basicDateAndTimeFormatter()}\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pattern</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_timeZone\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Time zone</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String timeZone ID. The server time zone is\n          used if not\n          set.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>timeZone</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_format\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Format</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String format for the date and time, as described by\n          the java.text.SimpleDateFormat class, and as used in the standard\n          DateTimeConverter. Default value is \"MMM d, yyyy\". Sample value:\n          \"#{nxu:basicDateFormatter()}\" or \"#{nxu:basicDateAndTimeFormatter()}\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>format</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_locale\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Locale</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String representing the locale to use for\n          the calendar.\n          Current locale is used if not set.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>locale</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"\" itemValue=\"\" />\n        <option itemLabel=\"Catalan\" itemValue=\"ca\" />\n        <option itemLabel=\"Chinese\" itemValue=\"cn\" />\n        <option itemLabel=\"Czech\" itemValue=\"cz\" />\n        <option itemLabel=\"Deutsch\" itemValue=\"de\" />\n        <option itemLabel=\"English\" itemValue=\"en\" />\n        <option itemLabel=\"Spanish\" itemValue=\"es\" />\n        <option itemLabel=\"French\" itemValue=\"fr\" />\n        <option itemLabel=\"Italiano\" itemValue=\"it\" />\n        <option itemLabel=\"Japanese\" itemValue=\"jp\" />\n        <option itemLabel=\"Nederlands\" itemValue=\"nl\" />\n        <option itemLabel=\"Polish\" itemValue=\"pl\" />\n        <option itemLabel=\"Portuguese\" itemValue=\"pt\" />\n        <option itemLabel=\"Romanian\" itemValue=\"ro\" />\n        <option itemLabel=\"Russian\" itemValue=\"ru\" />\n        <option itemLabel=\"svenska\" itemValue=\"sv\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"datetime_timeZone\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Time zone</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          String timeZone ID. The server time zone is used if\n          not set.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>timeZone</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_triggerImg\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Trigger image</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Image path to use for the trigger. Available since\n          5.4.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>triggerImg</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_triggerLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Trigger label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Label to display on the trigger image. Defaults to\n          \"...\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>triggerLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"datetime_triggerStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Trigger style class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Style class to set on the trigger button tag, defaults\n          to 'calendarTrigger'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>triggerStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"file_downloadLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Download label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Value binding that will be used as the download link\n          value, and will attempt to be translated.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>downloadLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"file_iconRendered\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Icon rendered</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean flag indicating whether or not the file icon\n          should be rendered. Defaults to true.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>iconRendered</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Yes (default value)\" itemValue=\"true\" />\n        <option itemLabel=\"No\" itemValue=\"false\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"htmltext_disableHtmlInit\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Disable HTML init</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to true, the default display will be\n          the text\n          display\n          (not html editor). Available since 5.3.1.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>disableHtmlInit</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"htmltext_width\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Width</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The textarea width. Defaults to \"640\".\n          Give the exact\n          size in pixels or percentage.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>width</field>\n      </fields>\n    </widget>\n\n    <widget name=\"htmltext_height\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Height</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The textarea height. Defaults to \"400\".\n          Give the exact\n          size in pixels or percentage.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>height</field>\n      </fields>\n    </widget>\n\n    <widget name=\"htmltext_editorSelector\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Editor selector</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The class to use to identify text areas to turn into\n          html editors. Defaults to \"mceEditor\". See the editor_selector option\n          in TinyMCE\n          (http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/editor_selector).\n        </label>\n      </helpLabels>\n      <fields>\n        <field>editorSelector</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"htmltext_configuration\" type=\"textarea\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">JSON configuration</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          JSON configuration map for TinyMCE initialization, that will be merged\n          with default configuration. Available since 8.1.\n          Example: {\"toolbar4\": \"paste\"}\n        </label>\n      </helpLabels>\n      <fields>\n        <field>configuration</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directoryName\" type=\"selectOneResource\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Vocabulary</label>\n      </labels>\n      <fields>\n        <field>directoryName</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"resourceName\">vocabularies</property>\n      </properties>\n      <properties widgetMode=\"any\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"directoryNameDemoPreview\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Vocabulary</label>\n      </labels>\n      <fields>\n        <field>directoryName</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"edit_demo_preview\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"directory_localize\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Localize</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Activate localization of vocabulary labels. Labels are\n          translated as usual picking values in messages*.properties files.\n          Database localization should also be activated if localized labels\n          are provided by the vocabulary itself.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>localize</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"directory_dbl10n\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Activate database localization</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Activate retrieval of localized labels in the\n          vocabulary database, when translations are held by the directory\n          itself, in fields with a label_[lang] pattern, and defaulting to\n          label_en. Available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>dbl10n</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"directory_displayIdAndLabel\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display id and label</label>\n      </labels>\n      <fields>\n        <field>displayIdAndLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_style\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style</label>\n      </labels>\n      <fields>\n        <field>style</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_cssStyle\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style</label>\n      </labels>\n      <fields>\n        <field>cssStyle</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_cssStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style class</label>\n      </labels>\n      <fields>\n        <field>cssStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_styleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style class</label>\n      </labels>\n      <fields>\n        <field>styleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_displayObsoleteEntries\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display obsolete entries</label>\n      </labels>\n      <fields>\n        <field>displayObsoleteEntries</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_notDisplayDefaultOption\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Do not display the default option</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          True if there should not be displayed a \"Please select\n          a value\" option\n        </label>\n      </helpLabels>\n      <fields>\n        <field>notDisplayDefaultOption</field>\n      </fields>\n    </widget>\n\n    <widget name=\"directory_ordering\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Sort criterion</label>\n      </labels>\n      <fields>\n        <field>ordering</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Label (default)\" itemValue=\"label\" />\n        <option itemLabel=\"Ordering\" itemValue=\"ordering\" />\n        <option itemLabel=\"Id\" itemValue=\"id\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"complex_subwidgets_display\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The display attribute controls the rendering of\n          subwidgets. Available since 5.4.2.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>display</field>\n      </fields>\n      <selectOptions>\n        <!-- block-like renderings available since 5.6 -->\n        <option itemLabel=\"Block (label on the left, default)\" itemValue=\"block_left\" />\n        <option itemLabel=\"Block (label on top)\" itemValue=\"block_top\" />\n        <option itemLabel=\"Table\" itemValue=\"table\" />\n        <option itemLabel=\"In line\" itemValue=\"inline\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"list_subwidgets_display\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The display attribute controls the rendering of\n          subwidgets. Available since 5.4.2.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>display</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Block (label on the left, default)\" itemValue=\"block_left\" />\n        <option itemLabel=\"Block (label on top)\" itemValue=\"block_top\" />\n        <option itemLabel=\"Table\" itemValue=\"table\" />\n        <option itemLabel=\"In line\" itemValue=\"inline\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"subwidgets_hideSubLabels\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide subwidgets labels</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the rendering of subwidgets\n          labels. Available since 5.4.2.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideSubLabels</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_diff\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Diff</label>\n      </labels>\n      <fields>\n        <field>diff</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_orderable\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Orderable</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to order the\n          items. Available since 5.5.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>orderable</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_hideDeleteButton\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide delete button</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to remove the\n          'delete' button for each list item. Available since 5.6.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideDeleteButton</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_hideAddButton\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide add button</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the possibility to remove the\n          'add' button to add an item to the list. Available since 5.6.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideAddButton</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_listTemplateItem\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">List template item</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute enables to control the template for\n          each item that needs to be added to the list. In most common cases,\n          this value is deduced from the field definition, using the expression:\n          #{nxd:propertyDefaultValue(widget.fieldDefinitions[0].propertyName)}.\n          This needs to be adapted for subwidgets (when handling lists of lists\n          for instance) or when using this widget on another object that a\n          DocumentModel property. For instance, for a subwidget, you can use:\n          #{nxd:propertyDefaultValue('mySchema:listOfLists/stringListItem')}.\n          Available since 5.6.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>listTemplateItem</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_removeEmpty\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Remove empty item(s)</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This boolean attribute allows to remove null items from the list on edit.\n          Items are only removed when there are changes to the list items.\n          Available since 7.3.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>removeEmpty</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_number\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Number of open item(s)</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This integer attribute allows to set the number of new items that should\n          be opened when displaying the list widget.\n          Available since 7.3.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>number</field>\n      </fields>\n    </widget>\n\n    <widget name=\"list_addLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">'Add' action label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This string attribute allows to configure the label used for\n          the 'add' action on the list widget. It is translated if the widget\n          is marked as translated.\n          Available since 7.3.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>addLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"container_subwidgets_display\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The display attribute controls the rendering of\n          subwidgets.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>display</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Block (label on the left, default)\" itemValue=\"block_left\" />\n        <option itemLabel=\"Block (label on top)\" itemValue=\"block_top\" />\n        <option itemLabel=\"Table\" itemValue=\"table\" />\n        <option itemLabel=\"In line\" itemValue=\"inline\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"container_subwidgets_hideSubLabels\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide subwidgets labels</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          This attribute controls the rendering of subwidgets\n          labels.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideSubLabels</field>\n      </fields>\n    </widget>\n\n    <widget name=\"widgetsDisplay\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Widgets Display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The display attribute controls the rendering of\n          widgets.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>widgetsDisplay</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Label on the left (default)\" itemValue=\"label_left\" />\n        <option itemLabel=\"Label on top\" itemValue=\"label_top\" />\n        <option itemLabel=\"No Label\" itemValue=\"no_label\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"select_layout\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Layout</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The select layout binding.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>layout</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Line direction (default)\" itemValue=\"\" />\n        <option itemLabel=\"Page direction\" itemValue=\"pageDirection\" />\n        <option itemLabel=\"Line direction\" itemValue=\"lineDirection\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"select_layout_page_default\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Layout</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The select layout binding.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>layout</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Page direction (default)\" itemValue=\"\" />\n        <option itemLabel=\"Page direction\" itemValue=\"pageDirection\" />\n        <option itemLabel=\"Line direction\" itemValue=\"lineDirection\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"select_selectOptions\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Select Options</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The select options binding.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>selectOptions</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">hidden</mode>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n        <mode value=\"view_reference\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"select_var\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Variable</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The variable name for select options expressions\n          resolution. Usually defaults to 'item'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>var</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select_itemLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Item label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Expression referencing the variable name to display\n          the option label.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>itemLabel</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select_itemValue\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Item label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Expression referencing the variable name to display\n          the option id.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>itemValue</field>\n      </fields>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"text\">\n      <configuration>\n        <title>Text</title>\n        <description>\n          <p>\n            The text widget displays an input text in create or edit mode, with\n            additional message tag for errors, and a regular text output in\n            any\n            other mode.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputText /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;h:outputText /&gt; tag in other modes.\n          </p>\n        </description>\n        <demo id=\"textWidget\" previewEnabled=\"true\" />\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n            <type>path</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>string</type>\n          </defaultTypes>\n        </fields>\n        <categories>\n          <category>document</category>\n        </categories>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"text_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">escape</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">text_localize</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"text_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">maxlength</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">size</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">alt</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TextWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"int\">\n      <configuration>\n        <title>Integer</title>\n        <description>\n          <p>\n            The int widget displays an input text in create or edit mode, with\n            additional message tag for errors, and a regular text output in\n            any\n            other mode. It uses a number converter.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputText /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;h:outputText /&gt; tag in other modes.\n          </p>\n        </description>\n        <demo id=\"intWidget\" previewEnabled=\"true\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>integer</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>integer</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"int_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"int_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">maxlength</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">size</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">alt</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.IntWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"double\">\n      <configuration>\n        <title>Floating point</title>\n        <sinceVersion>5.4.2</sinceVersion>\n        <description>\n          <p>\n            The floating point (aka \"double\") widget displays an input text in\n            create or edit mode, with additional message tag for errors, and a\n            regular text output in any other mode. It uses a JSF double\n            converter.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputText /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;h:outputText /&gt; tag in other modes.\n          </p>\n        </description>\n        <!--<demo id=\"doubleWidget\" /> -->\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>double</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>double</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"double_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"double_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">maxlength</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">size</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">alt</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DoubleWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"secret\">********<configuration>\n        <title>Secret</title>\n        <description>\n          <p>\n            The secret widget displays an input secret text in create or edit\n            mode, with additional message tag for errors, and nothing in any\n            other mode.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputSecret /&gt; tag in create or edit mode.\n          </p>\n        </description>\n        <demo id=\"secretWidget\" previewEnabled=\"true\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"secret_widget_type_properties_edit\">********<rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">maxlength</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">size</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">alt</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">redisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SecretWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"textarea\">\n      <configuration>\n        <title>Textarea</title>\n        <description>\n          <p>\n            The textarea widget displays a textarea in create or edit mode,\n            with\n            additional message tag for errors, and a regular text output in\n            any\n            other mode.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputTextarea /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;h:outputText /&gt; tag in other modes.\n          </p>\n        </description>\n        <demo id=\"textareaWidget\" previewEnabled=\"true\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"textarea_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">escape</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"textarea_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">textarea_cols</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">textarea_rows</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TextareaWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"datetime\">\n      <configuration>\n        <title>Datetime</title>\n        <description>\n          <p>\n            The datetime widget displays a javascript calendar in create or\n            edit\n            mode, with additional message tag for errors, and a regular text\n            output in any other mode. It uses a date time converter.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;nxu:inputDatetime /&gt; tag in create or edit mode, and\n            properties accepted on a &lt;h:outputText /&gt; tag in other\n            modes.\n            The converter will also be given these properties.\n          </p>\n        </description>\n        <demo id=\"datetimeWidget\" previewEnabled=\"true\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>date</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>date</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"datetime_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_pattern</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_timeZone</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"datetime_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_format</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_locale</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_timeZone</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerImg</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">datetime_triggerStyleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DateTimeWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"template\">\n      <configuration>\n        <title>Template</title>\n        <description>\n          <p>\n            The template widget displays a template content whatever the mode.\n          </p>\n          <p>\n            Widgets using this type must provide the path to this template ;\n            this template can check the mode to adapt the rendering.\n          </p>\n          <p>\n            Note that the same handler class can be used to define a new widget\n            type using a designated template, by registering it as is:\n          </p>\n          <p>\n            &lt;widgetType name=\"template\"&gt; &lt;handler-class&gt;\n            org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n            &lt;/handler-class&gt; &lt;property name=\"template\"&gt;\n            /widgets/my_custom_widget_template.xhtml &lt;/property&gt;\n            &lt;/widgetType&gt; </p>\n        </description>\n        <demo id=\"templateWidget\" previewEnabled=\"false\" />\n        <categories>\n          <category>dev</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>true</complex>\n          <supportedTypes>\n            <type>*</type>\n          </supportedTypes>\n        </fields>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"template_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>template</widget>\n                </row>\n              </rows>\n              <widget name=\"template\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">widget_templates</property>\n                </properties>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"file\">\n      <configuration>\n        <title>File</title>\n        <description>\n          <p>\n            The file widget displays a file uploader/editor in create or edit\n            mode, with additional message tag for errors, and a link to the file\n            in other modes.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;nxu:inputFile /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;nxu:outputFile /&gt; tag in other modes.\n          </p>\n        </description>\n        <demo id=\"fileWidget\" previewEnabled=\"true\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>blob</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>blob</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"file_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_downloadLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_iconRendered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"file_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_downloadLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_iconRendered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.FileWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"htmltext\">\n      <configuration>\n        <title>HTML text</title>\n        <description>\n          <p>\n            The htmltext widget displays an html text editor in create or edit\n            mode, with additional message tag for errors, and a regular text\n            output in other modes (without escaping the text).\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;nxu:editor /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;nxu:outputText /&gt; tag in other modes.\n          </p>\n        </description>\n        <demo id=\"htmltextWidget\" previewEnabled=\"true\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"htmltext_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"htmltext_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">htmltext_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">htmltext_height</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">htmltext_disableHtmlInit</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">htmltext_editorSelector</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">htmltext_configuration</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.HtmlTextWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectOneListbox\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <title>Select One Listbox</title>\n        <description></description>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectOneListbox_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectOneListboxWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListbox\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Select Many Listbox</title>\n        <description></description>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyListbox_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectManyListboxWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectOneMenu\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <title>Select One Menu</title>\n        <description></description>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"selectOneMenu_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectOneMenuWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyMenu\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Select Many Menu</title>\n        <description></description>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyMenu_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectManyMenuWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectOneRadio\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Select One Radio</title>\n        <description></description>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectOneRadio_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectOneRadioWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckbox\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Select Many Checkbox</title>\n        <description></description>\n        <categories>\n          <!-- don't export it yet -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <!-- TODO\n            <mode>view</mode>\n          -->\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckbox_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_var</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_itemValue</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.SelectManyCheckboxWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectOneDirectory\">\n      <configuration>\n        <title>Single vocabulary</title>\n        <description>\n          <p>\n            The selectOneDirectory widget displays a selection of vocabulary\n            entries in create or edit mode, with additional message tag for\n            errors, and the directory entry label in other modes.\n          </p>\n        </description>\n        <demo id=\"selectOneDirectoryWidget\" previewEnabled=\"true\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.id}</property>\n            <property name=\"ordering\">label</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"selectOneDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"view\">\n            <layout name=\"selectOneDirectory_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"selectOneDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayObsoleteEntries\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_ordering</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyle</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DirectorySelectOneWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectOneRadioDirectory\">\n      <configuration>\n        <title>Single vocabulary radio</title>\n        <description>\n          <p>\n            This widget displays radio buttons in edit mode for given category.\n          </p>\n        </description>\n        <demo id=\"selectOneRadioDirectoryWidget\" previewEnabled=\"true\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.id}</property>\n            <property name=\"ordering\">label</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"selectOneRadioDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"view\">\n            <layout name=\"selectOneRadioDirectory_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"selectOneRadioDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayObsoleteEntries\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_ordering</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyle</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DirectorySelectOneRadioWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyDirectory\">\n      <configuration>\n        <title>Multiple vocabulary</title>\n        <description>\n          <p>\n            The selectManyDirectory widget displays a multi selection of\n            vocabulary entries in create or edit mode, with additional message\n            tag for errors, and the directory entries labels in other modes.\n          </p>\n        </description>\n        <demo id=\"selectManyDirectoryWidget\" previewEnabled=\"true\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.id}</property>\n            <property name=\"ordering\">label</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"selectManyDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"view\">\n            <layout name=\"selectManyDirectory_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayObsoleteEntries\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_ordering</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyle</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DirectorySelectManyWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxDirectory\">\n      <configuration>\n        <title>Multiple vocabulary checkbox</title>\n        <description>\n          <p>\n            The selectManyCheckboxDirectory widget displays a multi selection\n            of\n            vocabulary entries in create or edit mode, with additional message\n            tag for errors, and the directory entries labels in other modes.\n          </p>\n        </description>\n        <demo id=\"selectManyCheckboxDirectoryWidget\" previewEnabled=\"true\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.id}</property>\n            <property name=\"ordering\">label</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"selectManyCheckboxDirectory_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"view\">\n            <layout name=\"selectManyCheckboxDirectory_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxDirectory_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayObsoleteEntries\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_ordering</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyle</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_cssStyleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.DirectorySelectManyCheckboxWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"list\">\n      <configuration>\n        <title>List</title>\n        <description>\n          <p>\n            The list widget displays an editable list of items in create or\n            edit mode, with additional message tag for errors, and the same list\n            of items in other modes. It is not usable within a list widget (see\n            sublist widget for this feature).\n          </p>\n          <p>Items are defined using sub wigdets configuration.</p>\n          <p>\n            This is actually a template widget type whose template uses a\n            &lt;nxu:inputList /&gt; tag in edit or create mode, and a table\n            iterating over items in other modes.\n          </p>\n          <p>\n            Since 5.6, it will apply to the current value (e.g. the layout or\n            parent widget value) if no field definition is given.\n          </p>\n        </description>\n        <demo id=\"listWidget\" previewEnabled=\"false\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n            <type>path</type>\n            <type>date</type>\n            <type>blob</type>\n            <type>integer</type>\n            <type>double</type>\n            <type>boolean</type>\n            <type>complex</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>string</type>\n            <type>path</type>\n            <type>date</type>\n            <type>integer</type>\n            <type>double</type>\n            <type>boolean</type>\n            <type>complex</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"list_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_subwidgets_display</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">subwidgets_hideSubLabels</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"list_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_diff</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_hideDeleteButton</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_hideAddButton</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_listTemplateItem</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_removeEmpty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_number</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">list_addLabel</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.ListWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/js_list_widget_template.xhtml</property>\n      <property name=\"compatTemplate\">/widgets/list_widget_template.xhtml</property>\n    </widgetType>\n\n    <widgetType name=\"complex\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <title>Complex</title>\n        <description>\n          <p>\n            The complex widget displays its sub widgets, and is controlling of\n            a map-like. Each of the map items rendering is done through sub\n            widgets configuration.\n          </p>\n          <p>\n            Since 5.6, it will apply to the current value (e.g. the layout or\n            parent widget value) if no field definition is given.\n          </p>\n        </description>\n        <demo id=\"complexWidget\" previewEnabled=\"false\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n        <fields>\n          <list>false</list>\n          <complex>true</complex>\n          <supportedTypes>\n            <type>complex</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>complex</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"complex_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">complex_subwidgets_display</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">subwidgets_hideSubLabels</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/complex_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"container\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>Container</title>\n        <description>\n          <p>\n            The container widget displays its subwidgets with display options\n            to control the rendering of global div container as well as each\n            container of sub items, using the widget label as header.\n          </p>\n          <p>\n            If the widget is marked as handling labels (marker available on all\n            widgets since 5.6), the header will be displayed. Otherwise it will\n            never be displayed.\n          </p>\n          <p>\n            On version 5.6 (only this version), this widget also accepts custom\n            properties to add forms around some of its subwidgets. If the\n            property with name \"nxw_addForm_#{widgetIndex}\" is present and\n            resolves to true, then a form will be added around the subwidgets at\n            index #{widgetIndex}. For instance, adding a property\n            \"nxw_addForm_0\" with value true, the first subwidget will be\n            surrounded with a form.\n          </p>\n          <p>\n            From version 5.7, subwidgets hold this information directly, by\n            declaring a control with key \"addForm\" and value \"true\".\n          </p>\n          <p>\n            It will apply to the current value (e.g. the layout or parent\n            widget value) if no field definition is given.\n          </p>\n        </description>\n        <categories>\n          <category>decoration</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n        <handlingLabels>true</handlingLabels>\n        <supportedControls>\n          <control>requireSurroundingForm</control>\n          <control>useAjaxForm</control>\n          <control>handlingLabels</control>\n        </supportedControls>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"container_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">container_subwidgets_display</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">container_subwidgets_hideSubLabels\n                  </widget>\n                </row>\n                <row>\n                  <widget>foldable</widget>\n                </row>\n                <row>\n                  <widget>foldedByDefault</widget>\n                </row>\n                <row>\n                  <widget>headerStyleClass</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n                <row>\n                  <widget>subLabelStyleClass</widget>\n                </row>\n                <row>\n                  <widget>subStyleClass</widget>\n                </row>\n                <row>\n                  <widget>showIfEmpty</widget>\n                </row>\n                <row>\n                  <widget>tip</widget>\n                </row>\n              </rows>\n              <widget name=\"foldable\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Foldable</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, the widget label will be\n                    displayed in a header of a box, containing the sub widgets\n                    rendering. This box is foldable in javascript. Ignored if\n                    the widget is not marked as handling labels as the header\n                    will not be displayed in this case. If label is empty, a\n                    default label will be shown. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldable</field>\n                </fields>\n              </widget>\n              <widget name=\"foldedByDefault\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Folded by default</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, and property \"foldable\" is\n                    also set to true,\n                    the box will be folded by default. Defaults\n                    to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>foldedByDefault</field>\n                </fields>\n              </widget>\n              <widget name=\"showIfEmpty\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Show if empty</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to true, the widget label will be\n                    displayed even if there are no subwidgets. Defaults to\n                    false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>showIfEmpty</field>\n                </fields>\n              </widget>\n              <widget name=\"tip\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Tip</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Label to display on top of the container\n                    widget content, that will be translated if the widget is\n                    translated. Available since 5.7.3.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>tip</field>\n                </fields>\n              </widget>\n              <widget name=\"headerStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Header style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the header, displaying this\n                    widget label.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>headerStyleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the global container div.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"subLabelStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Sub Label style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the sub widget label.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>subLabelStyleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"subStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Sub style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the container of each sub\n                    widget.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>subStyleClass</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/container_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"checkbox\">\n      <configuration>\n        <title>Checkbox</title>\n        <description>\n          <p>\n            The checkbox widget displays a checkbox in create, edit and any\n            other mode, with additional message tag for errors.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:selectBooleanCheckbox /&gt; tag in create, edit mode, and\n            other modes.\n          </p>\n        </description>\n        <demo id=\"checkboxWidget\" previewEnabled=\"true\" />\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>boolean</type>\n          </supportedTypes>\n          <defaultTypes>\n            <type>boolean</type>\n          </defaultTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"checkbox_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"checkbox_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">accesskey</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">dir</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">disabled</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">lang</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.CheckboxWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"hidden\">\n      <configuration>\n        <title>Hidden</title>\n        <description>\n          <p>\n            The hidden widget is for a hidden field in create, edit and any\n            other mode, with additional message tag for errors.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;h:inputHidden /&gt; tag in create, edit mode, and other modes.\n          </p>\n        </description>\n        <!-- demo does not present it (yet?) -->\n        <!--\n          <demo id=\"hiddenWidget\" previewEnabled=\"false\"/>\n        -->\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"hidden_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">title</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"hidden_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">validator</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">valueChangeListener</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.HiddenWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"layout\">\n      <configuration>\n        <sinceVersion>5.4.0</sinceVersion>\n        <title>Layout</title>\n        <description>\n          <p>The layout widget renders a layout.</p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;nxl:layout /&gt; tag in all modes.\n          </p>\n          <p>\n            Since 5.6, it will apply to the current value (e.g. the layout or\n            parent widget value) if no field definition is given.\n          </p>\n        </description>\n        <categories>\n          <category>dev</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"layout_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>name</widget>\n                </row>\n                <row>\n                  <widget>nameDemoPreview</widget>\n                </row>\n                <row>\n                  <widget>mode</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">widgetsDisplay</widget>\n                </row>\n                <row>\n                  <widget>template</widget>\n                </row>\n              </rows>\n              <widget name=\"name\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout name. Since 5.6, this attribute\n                    accepts a list of multiple layout names, separated by\n                    commas.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>name</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                  <property name=\"resourceName\">layouts</property>\n                </properties>\n              </widget>\n              <widget name=\"nameDemoPreview\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Layout(s)</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The layout name. Since 5.6, this attribute\n                    accepts a list of multiple layout names, separated by\n                    commas.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>name</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">view</mode>\n                </widgetModes>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"mode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Layout mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If not set, the mode is resolved from the\n                    usual widget mode. Otherwise it's taken instead when not\n                    empty. WARNING: Before 5.5, mode was not resolved from the\n                    widget mode, so this value was required.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>mode</field>\n                </fields>\n              </widget>\n              <widget name=\"template\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">layout_templates</property>\n                </properties>\n                <widgetModes>\n                  <mode value=\"any\">hidden</mode>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.LayoutWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"richtext_with_mimetype\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Richtext</title>\n        <description>\n          <p>\n            This widget displays an html text editor or a textarea in create or\n            edit mode, depending on the mimetype defined.\n          </p>\n          <p>\n            It accepts two fields bindings:\n            <ul>\n              <li>first field holds the text content</li>\n              <li>second field holds the text mimetype (text/plain,\n                text/html...)\n              </li>\n            </ul>\n          </p>\n        </description>\n        <categories>\n          <!-- do not export with documents -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>document</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"richtext_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>cssClass</widget>\n                </row>\n              </rows>\n              <widget name=\"cssClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <fields>\n                  <field>cssClass</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"richtext_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget>height</widget>\n                </row>\n                <row>\n                  <widget>width</widget>\n                </row>\n                <row>\n                  <widget>cols</widget>\n                </row>\n                <row>\n                  <widget>rows</widget>\n                </row>\n                <row>\n                  <widget>editorSelector</widget>\n                </row>\n              </rows>\n              <widget name=\"width\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Width</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The textarea width. Defaults to \"700\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>width</field>\n                </fields>\n              </widget>\n              <widget name=\"height\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Height</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The textarea height. Defaults to \"400\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>height</field>\n                </fields>\n              </widget>\n              <widget name=\"cols\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Number of columns</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The cols attribute sets the number of\n                    columns to display.\n                    Available since 5.3.1.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cols</field>\n                </fields>\n              </widget>\n              <widget name=\"rows\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Number of rows</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The rows attribute sets the number of rows\n                    to display.\n                    Available since 5.3.1.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>rows</field>\n                </fields>\n              </widget>\n              <widget name=\"editorSelector\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Editor selector</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The class to use to identify text areas to\n                    turn into html\n                    editors. Defaults to \"mceEditor\". See the\n                    editor_selector\n                    option in tiny_mce\n                    (http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/editor_selector).\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>editorSelector</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/richtext_with_mimetype_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"duration\">\n      <configuration>\n        <sinceVersion>5.3.2</sinceVersion>\n        <title>Duration</title>\n        <description>\n          This widget displays a i18n formatted duration of a field\n          holding a\n          value measured in seconds (can be Long, Double or String\n          valued). NB:\n          only view mode is supported right now.\n        </description>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n            <type>int</type>\n            <type>double</type>\n          </supportedTypes>\n        </fields>\n        <!-- no props -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/duration_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"setVariable\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Set variable</title>\n        <description>\n          <p>\n            This widget exposes a variable to the context for\n            rendering,\n            allowing its sub widgets to reference it.\n          </p>\n          <p>\n            This is mostly useful to simplify resolution of a variable in sub\n            contexts, and benefit from caching on the variable resolution.\n          </p>\n        </description>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"set_variable_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>var</widget>\n                </row>\n                <row>\n                  <widget>value</widget>\n                </row>\n                <row>\n                  <widget>cache</widget>\n                </row>\n                <row>\n                  <widget>resolveTwice</widget>\n                </row>\n              </rows>\n              <widget name=\"var\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Variable name</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The variable under which name the value will\n                    be exposed, making it available to sub widgets.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>var</field>\n                </fields>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"value\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Value</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The value to resolve for the variable name.\n                    The variable under which name the value will\n                    be exposed,\n                    making it available to sub widgets.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>value</field>\n                </fields>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"cache\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Cache</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean expressing if exposed value should\n                    be cached in the page.\n                    If set to true, the variable will be\n                    resolved only once per page rendering (or re-rendering in\n                    case of ajax requests). Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>cache</field>\n                </fields>\n              </widget>\n              <widget name=\"resolveTwice\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Resolve twice</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Boolean expressing if expression should be\n                    resolved twice: sometimes the expression uses a\n                    configuration element, and the first resolution of the\n                    expression will resolve to another expression, that may need\n                    to be itself evaluated again. Defaults to false.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>resolveTwice</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <categories>\n          <category>dev</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <acceptingSubWidgets>true</acceptingSubWidgets>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/set_variable_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"disabledPropertyRefs\">\n    <documentation>\n      Configuration of properties disabled by default for reference\n      in EL expressions.\n    </documentation>\n\n    <disabledPropertyRef name=\"converter\"\n      widgetTypeCategory=\"jsf\" />\n    <disabledPropertyRef name=\"validator\"\n      widgetTypeCategory=\"jsf\" />\n\n    <!-- avoid bad interactions with JBoss-el size EL resolver... -->\n    <disabledPropertyRef name=\"size\" widgetTypeCategory=\"jsf\" />\n\n    <!-- rich:calendar does not resolve some attributes as EL expressions -->\n    <disabledPropertyRef name=\"showApplyButton\" widgetType=\"datetime\"\n      widgetTypeCategory=\"jsf\" />\n    <disabledPropertyRef name=\"defaultTime\" widgetType=\"datetime\"\n      widgetTypeCategory=\"jsf\" />\n    <disabledPropertyRef name=\"pattern\" widgetType=\"datetime\"\n      widgetTypeCategory=\"jsf\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouts-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.properties/Contributions/org.nuxeo.ecm.platform.forms.layout.properties--configuration",
              "id": "org.nuxeo.ecm.platform.forms.layout.properties--configuration",
              "registrationOrder": 34,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <property name=\"nuxeo.jsf.listWidget.compatEnabled\">false</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Configuration property controlling enablement of layout tags\n      variables management, available mainly for backport on maintenance\n      branches, in case optimization broke some behaviors.\n\n      @since 8.2\n    \n",
              "documentationHtml": "<p>\nConfiguration property controlling enablement of layout tags\nvariables management, available mainly for backport on maintenance\nbranches, in case optimization broke some behaviors.\n</p><p>\n&#64;since 8.2\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.properties/Contributions/org.nuxeo.ecm.platform.forms.layout.properties--configuration1",
              "id": "org.nuxeo.ecm.platform.forms.layout.properties--configuration1",
              "registrationOrder": 35,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Configuration property controlling enablement of layout tags\n      variables management, available mainly for backport on maintenance\n      branches, in case optimization broke some behaviors.\n\n      @since 8.2\n    </documentation>\n    <property name=\"nuxeo.jsf.layout.removeAliasOptims\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.properties",
          "name": "org.nuxeo.ecm.platform.forms.layout.properties",
          "requirements": [],
          "resolutionOrder": 370,
          "services": [],
          "startOrder": 328,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.forms.layout.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <property name=\"nuxeo.jsf.listWidget.compatEnabled\">false</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Configuration property controlling enablement of layout tags\n      variables management, available mainly for backport on maintenance\n      branches, in case optimization broke some behaviors.\n\n      @since 8.2\n    </documentation>\n    <property name=\"nuxeo.jsf.layout.removeAliasOptims\">false</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouts-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.forms.layout.service.WebLayoutManagerImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The web layout manager provides extension points for pluggable widget types\n    and layouts.\n\n    Layouts are groups of widgets controlling the rendering of (for instance) a\n    document fields display on a page. The layouts and widgets can be displayed\n    in a given mode (create, edit, view, etc...).\n\n    @version 1.0\n    @author Anahide Tchertchian (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe web layout manager provides extension points for pluggable widget types\nand layouts.\n</p><p>\nLayouts are groups of widgets controlling the rendering of (for instance) a\ndocument fields display on a page. The layouts and widgets can be displayed\nin a given mode (create, edit, view, etc...).\n</p><p>\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
              "descriptors": [
                "org.nuxeo.ecm.platform.forms.layout.descriptors.WidgetTypeDescriptor"
              ],
              "documentation": "\n      A widget type defines how a widget will be displayed in a given mode.\n\n      For instance, the text widget type will display a regular text in view\n      mode, and a text input on create or edit modes, with additional message on\n      errors.\n\n      Widget types use facelets features to provide this behaviour. Extensions\n      are defined using a class that must follow the {@see\n      org.nuxeo.ecm.platform.forms.layout.facelets.WidgetTypeHandler} interface.\n\n      Additional properties can be added to the type registration so that the\n      same class can be reused with a different behaviour given the property\n      value.\n\n      Example of a widget type registration:\n\n      <code>\n    <widgetType name=\"text\">\n        <handler-class>\n            org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TextWidgetTypeHandler\n          </handler-class>\n        <property name=\"foo\">bar</property>\n    </widgetType>\n</code>\n",
              "documentationHtml": "<p>\nA widget type defines how a widget will be displayed in a given mode.\n</p><p>\nFor instance, the text widget type will display a regular text in view\nmode, and a text input on create or edit modes, with additional message on\nerrors.\n</p><p>\nWidget types use facelets features to provide this behaviour. Extensions\nare defined using a class that must follow the {&#64;see\norg.nuxeo.ecm.platform.forms.layout.facelets.WidgetTypeHandler} interface.\n</p><p>\nAdditional properties can be added to the type registration so that the\nsame class can be reused with a different behaviour given the property\nvalue.\n</p><p>\nExample of a widget type registration:\n</p><p>\n</p><pre><code>    &lt;widgetType name&#61;&#34;text&#34;&gt;\n        &lt;handler-class&gt;\n            org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TextWidgetTypeHandler\n          &lt;/handler-class&gt;\n        &lt;property name&#61;&#34;foo&#34;&gt;bar&lt;/property&gt;\n    &lt;/widgetType&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager/ExtensionPoints/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "id": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "label": "widgettypes (org.nuxeo.ecm.platform.forms.layout.WebLayoutManager)",
              "name": "widgettypes",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
              "descriptors": [
                "org.nuxeo.ecm.platform.forms.layout.descriptors.LayoutTypeDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager/ExtensionPoints/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouttypes",
              "id": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouttypes",
              "label": "layouttypes (org.nuxeo.ecm.platform.forms.layout.WebLayoutManager)",
              "name": "layouttypes",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
              "descriptors": [
                "org.nuxeo.ecm.platform.forms.layout.descriptors.LayoutDescriptor"
              ],
              "documentation": "\n      A layout is a group of widgets that defines the rendering of a document in\n      a given mode.\n\n      Default mode values are:\n\n      - view: the view mode;\n\n      - edit: the edit mode;\n\n      - create: the create mode;\n\n      - any: any mode; this is the default value in case no value is given for a\n      specific mode. When applying to lists of values, values given for this\n      mode will be merged with values given for the specific mode.\n\n      A specific mode is also accepted when specifying a widget mode: \"hidden\".\n      It is used to avoid rendering the widget at all.\n\n      Layout properties :\n\n      - name: the layout name; this is an identifier for this layout to the\n      layout service and it can be used in a document type definition.\n\n      - templates: a template can be provided to control the layout rendering.\n      Different layouts can be used given the mode. The test for the layout mode\n      can also be done in the template itself.\n\n      - properties: map of properties that will apply to the layout in a given\n      mode.\n\n      - rows/row: rows describe the organization of widgets within the layout.\n      Several widgets can be placed in the same row. When using the default\n      layout template, a table is used to display each row in a table row, and\n      widgets at the same row will be displayed on different columns in this\n      row.\n\n      - columns/column: aliases for rows/row, which is more intuitive when\n      defining layouts representing a table line.\n\n      - widgets: widgets with names used in the layout rows configuration. They\n      can hold specific properties given the widget type.\n\n      Widget generic properties:\n\n      - name: this is the widget identifier within this layout; it can be used\n      to reference this widget in the layout rows.\n\n      - type: the widget type defines how the widget will be displayed in a\n      given mode.\n\n      - labels: labels to use for the widget in a given mode.\n\n      - helpLabels: help labels to use for the widget in a given mode.\n\n      - widgetModes: mode to use for this widget given the layout/parent widget\n      (used to override the parent mode) ; can be useful, for instance, to state\n      that a field will only be displayed as \"read-only\" whatever the layout\n      mode.\n\n      - translated: true or false, defines if the widget labels and help labels\n      have to be translated (in case these labels should match jsf messages).\n\n      - fields: fields that will be taken into account when displaying/editing a\n      document field.\n\n      - properties: map of properties that will apply to the jsf component built\n      in a given mode by the widget type. For instance, in a text widget, all\n      properties defined in the view mode will be dealt as attributes on a\n      &lt;h:outputText /&gt; tag, and properties defined in the edit mode will\n      be dealt as attributes on a &lt;h:inputText /&gt; tag.\n\n      - subWidgets: list of sub widgets to use provided the widget type knows\n      how to handle them. each sub widget definition is like a widget\n      definition.\n\n      Example of layout using default widget types:\n\n      <code>\n    <layout name=\"heading\">\n        <templates>\n            <template mode=\"any\">\n              /layouts/layout_default_template.xhtml\n            </template>\n        </templates>\n        <properties mode=\"any\">\n            <property name=\"foo\">bar</property>\n        </properties>\n        <rows>\n            <row>\n                <widget>title</widget>\n            </row>\n            <row>\n                <widget>description</widget>\n            </row>\n        </rows>\n        <widget name=\"title\" type=\"text\">\n            <labels>\n                <label mode=\"any\">title</label>\n            </labels>\n            <translated>true</translated>\n            <fields>\n                <field>dc:title</field>\n            </fields>\n            <properties mode=\"edit\">\n                <property name=\"required\">true</property>\n            </properties>\n            <properties mode=\"create\">\n                <property name=\"required\">true</property>\n            </properties>\n        </widget>\n        <widget name=\"description\" type=\"textarea\">\n            <labels>\n                <label mode=\"any\">description</label>\n            </labels>\n            <translated>true</translated>\n            <fields>\n                <field>dc:description</field>\n            </fields>\n        </widget>\n    </layout>\n</code>\n",
              "documentationHtml": "<p>\nA layout is a group of widgets that defines the rendering of a document in\na given mode.\n</p><p>\nDefault mode values are:\n</p><p>\n- view: the view mode;\n</p><p>\n- edit: the edit mode;\n</p><p>\n- create: the create mode;\n</p><p>\n- any: any mode; this is the default value in case no value is given for a\nspecific mode. When applying to lists of values, values given for this\nmode will be merged with values given for the specific mode.\n</p><p>\nA specific mode is also accepted when specifying a widget mode: &#34;hidden&#34;.\nIt is used to avoid rendering the widget at all.\n</p><p>\nLayout properties :\n</p><p>\n- name: the layout name; this is an identifier for this layout to the\nlayout service and it can be used in a document type definition.\n</p><p>\n- templates: a template can be provided to control the layout rendering.\nDifferent layouts can be used given the mode. The test for the layout mode\ncan also be done in the template itself.\n</p><p>\n- properties: map of properties that will apply to the layout in a given\nmode.\n</p><p>\n- rows/row: rows describe the organization of widgets within the layout.\nSeveral widgets can be placed in the same row. When using the default\nlayout template, a table is used to display each row in a table row, and\nwidgets at the same row will be displayed on different columns in this\nrow.\n</p><p>\n- columns/column: aliases for rows/row, which is more intuitive when\ndefining layouts representing a table line.\n</p><p>\n- widgets: widgets with names used in the layout rows configuration. They\ncan hold specific properties given the widget type.\n</p><p>\nWidget generic properties:\n</p><p>\n- name: this is the widget identifier within this layout; it can be used\nto reference this widget in the layout rows.\n</p><p>\n- type: the widget type defines how the widget will be displayed in a\ngiven mode.\n</p><p>\n- labels: labels to use for the widget in a given mode.\n</p><p>\n- helpLabels: help labels to use for the widget in a given mode.\n</p><p>\n- widgetModes: mode to use for this widget given the layout/parent widget\n(used to override the parent mode) ; can be useful, for instance, to state\nthat a field will only be displayed as &#34;read-only&#34; whatever the layout\nmode.\n</p><p>\n- translated: true or false, defines if the widget labels and help labels\nhave to be translated (in case these labels should match jsf messages).\n</p><p>\n- fields: fields that will be taken into account when displaying/editing a\ndocument field.\n</p><p>\n- properties: map of properties that will apply to the jsf component built\nin a given mode by the widget type. For instance, in a text widget, all\nproperties defined in the view mode will be dealt as attributes on a\n&lt;h:outputText /&gt; tag, and properties defined in the edit mode will\nbe dealt as attributes on a &lt;h:inputText /&gt; tag.\n</p><p>\n- subWidgets: list of sub widgets to use provided the widget type knows\nhow to handle them. each sub widget definition is like a widget\ndefinition.\n</p><p>\nExample of layout using default widget types:\n</p><p>\n</p><pre><code>    &lt;layout name&#61;&#34;heading&#34;&gt;\n        &lt;templates&gt;\n            &lt;template mode&#61;&#34;any&#34;&gt;\n              /layouts/layout_default_template.xhtml\n            &lt;/template&gt;\n        &lt;/templates&gt;\n        &lt;properties mode&#61;&#34;any&#34;&gt;\n            &lt;property name&#61;&#34;foo&#34;&gt;bar&lt;/property&gt;\n        &lt;/properties&gt;\n        &lt;rows&gt;\n            &lt;row&gt;\n                &lt;widget&gt;title&lt;/widget&gt;\n            &lt;/row&gt;\n            &lt;row&gt;\n                &lt;widget&gt;description&lt;/widget&gt;\n            &lt;/row&gt;\n        &lt;/rows&gt;\n        &lt;widget name&#61;&#34;title&#34; type&#61;&#34;text&#34;&gt;\n            &lt;labels&gt;\n                &lt;label mode&#61;&#34;any&#34;&gt;title&lt;/label&gt;\n            &lt;/labels&gt;\n            &lt;translated&gt;true&lt;/translated&gt;\n            &lt;fields&gt;\n                &lt;field&gt;dc:title&lt;/field&gt;\n            &lt;/fields&gt;\n            &lt;properties mode&#61;&#34;edit&#34;&gt;\n                &lt;property name&#61;&#34;required&#34;&gt;true&lt;/property&gt;\n            &lt;/properties&gt;\n            &lt;properties mode&#61;&#34;create&#34;&gt;\n                &lt;property name&#61;&#34;required&#34;&gt;true&lt;/property&gt;\n            &lt;/properties&gt;\n        &lt;/widget&gt;\n        &lt;widget name&#61;&#34;description&#34; type&#61;&#34;textarea&#34;&gt;\n            &lt;labels&gt;\n                &lt;label mode&#61;&#34;any&#34;&gt;description&lt;/label&gt;\n            &lt;/labels&gt;\n            &lt;translated&gt;true&lt;/translated&gt;\n            &lt;fields&gt;\n                &lt;field&gt;dc:description&lt;/field&gt;\n            &lt;/fields&gt;\n        &lt;/widget&gt;\n    &lt;/layout&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager/ExtensionPoints/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "id": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "label": "layouts (org.nuxeo.ecm.platform.forms.layout.WebLayoutManager)",
              "name": "layouts",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
              "descriptors": [
                "org.nuxeo.ecm.platform.forms.layout.descriptors.WidgetDescriptor"
              ],
              "documentation": "\n      Since 5.1.7 and 5.2.0, a widget can be defined globally in the\n      application.\n\n      Layouts can reference global widgets in their row definition without\n      having to redefine them in their widgets definitions. The widget with\n      given name will be searched in this global registry only if it is not\n      found in the layout definition.\n    \n",
              "documentationHtml": "<p>\nSince 5.1.7 and 5.2.0, a widget can be defined globally in the\napplication.\n</p><p>\nLayouts can reference global widgets in their row definition without\nhaving to redefine them in their widgets definitions. The widget with\ngiven name will be searched in this global registry only if it is not\nfound in the layout definition.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager/ExtensionPoints/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "id": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "label": "widgets (org.nuxeo.ecm.platform.forms.layout.WebLayoutManager)",
              "name": "widgets",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
              "descriptors": [
                "org.nuxeo.ecm.platform.forms.layout.service.DisabledPropertyRefDescriptor"
              ],
              "documentation": "\n      Since 5.6, makes it possible to define what properties should\n      not be referenced using EL expressions.\n    \n",
              "documentationHtml": "<p>\nSince 5.6, makes it possible to define what properties should\nnot be referenced using EL expressions.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager/ExtensionPoints/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--disabledPropertyRefs",
              "id": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--disabledPropertyRefs",
              "label": "disabledPropertyRefs (org.nuxeo.ecm.platform.forms.layout.WebLayoutManager)",
              "name": "disabledPropertyRefs",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
          "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
          "requirements": [
            "org.nuxeo.ecm.platform.forms.layout.LayoutStore"
          ],
          "resolutionOrder": 372,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client/org.nuxeo.ecm.platform.forms.layout.WebLayoutManager/Services/org.nuxeo.ecm.platform.forms.layout.service.WebLayoutManager",
              "id": "org.nuxeo.ecm.platform.forms.layout.service.WebLayoutManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 849,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n  <documentation>\n    The web layout manager provides extension points for pluggable widget types\n    and layouts.\n\n    Layouts are groups of widgets controlling the rendering of (for instance) a\n    document fields display on a page. The layouts and widgets can be displayed\n    in a given mode (create, edit, view, etc...).\n\n    @version 1.0\n    @author Anahide Tchertchian (at@nuxeo.com)\n  </documentation>\n\n  <require>org.nuxeo.ecm.platform.forms.layout.LayoutStore</require>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.forms.layout.service.WebLayoutManagerImpl\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.forms.layout.service.WebLayoutManager\" />\n  </service>\n\n  <extension-point name=\"widgettypes\">\n    <documentation>\n      A widget type defines how a widget will be displayed in a given mode.\n\n      For instance, the text widget type will display a regular text in view\n      mode, and a text input on create or edit modes, with additional message on\n      errors.\n\n      Widget types use facelets features to provide this behaviour. Extensions\n      are defined using a class that must follow the {@see\n      org.nuxeo.ecm.platform.forms.layout.facelets.WidgetTypeHandler} interface.\n\n      Additional properties can be added to the type registration so that the\n      same class can be reused with a different behaviour given the property\n      value.\n\n      Example of a widget type registration:\n\n      <code>\n        <widgetType name=\"text\">\n          <handler-class>\n            org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TextWidgetTypeHandler\n          </handler-class>\n          <property name=\"foo\">bar</property>\n        </widgetType>\n      </code>\n\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.forms.layout.descriptors.WidgetTypeDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"layouttypes\">\n    <object\n      class=\"org.nuxeo.ecm.platform.forms.layout.descriptors.LayoutTypeDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"layouts\">\n    <documentation>\n      A layout is a group of widgets that defines the rendering of a document in\n      a given mode.\n\n      Default mode values are:\n\n      - view: the view mode;\n\n      - edit: the edit mode;\n\n      - create: the create mode;\n\n      - any: any mode; this is the default value in case no value is given for a\n      specific mode. When applying to lists of values, values given for this\n      mode will be merged with values given for the specific mode.\n\n      A specific mode is also accepted when specifying a widget mode: \"hidden\".\n      It is used to avoid rendering the widget at all.\n\n      Layout properties :\n\n      - name: the layout name; this is an identifier for this layout to the\n      layout service and it can be used in a document type definition.\n\n      - templates: a template can be provided to control the layout rendering.\n      Different layouts can be used given the mode. The test for the layout mode\n      can also be done in the template itself.\n\n      - properties: map of properties that will apply to the layout in a given\n      mode.\n\n      - rows/row: rows describe the organization of widgets within the layout.\n      Several widgets can be placed in the same row. When using the default\n      layout template, a table is used to display each row in a table row, and\n      widgets at the same row will be displayed on different columns in this\n      row.\n\n      - columns/column: aliases for rows/row, which is more intuitive when\n      defining layouts representing a table line.\n\n      - widgets: widgets with names used in the layout rows configuration. They\n      can hold specific properties given the widget type.\n\n      Widget generic properties:\n\n      - name: this is the widget identifier within this layout; it can be used\n      to reference this widget in the layout rows.\n\n      - type: the widget type defines how the widget will be displayed in a\n      given mode.\n\n      - labels: labels to use for the widget in a given mode.\n\n      - helpLabels: help labels to use for the widget in a given mode.\n\n      - widgetModes: mode to use for this widget given the layout/parent widget\n      (used to override the parent mode) ; can be useful, for instance, to state\n      that a field will only be displayed as \"read-only\" whatever the layout\n      mode.\n\n      - translated: true or false, defines if the widget labels and help labels\n      have to be translated (in case these labels should match jsf messages).\n\n      - fields: fields that will be taken into account when displaying/editing a\n      document field.\n\n      - properties: map of properties that will apply to the jsf component built\n      in a given mode by the widget type. For instance, in a text widget, all\n      properties defined in the view mode will be dealt as attributes on a\n      &lt;h:outputText /&gt; tag, and properties defined in the edit mode will\n      be dealt as attributes on a &lt;h:inputText /&gt; tag.\n\n      - subWidgets: list of sub widgets to use provided the widget type knows\n      how to handle them. each sub widget definition is like a widget\n      definition.\n\n      Example of layout using default widget types:\n\n      <code>\n        <layout name=\"heading\">\n          <templates>\n            <template mode=\"any\">\n              /layouts/layout_default_template.xhtml\n            </template>\n          </templates>\n          <properties mode=\"any\">\n            <property name=\"foo\">bar</property>\n          </properties>\n          <rows>\n            <row>\n              <widget>title</widget>\n            </row>\n            <row>\n              <widget>description</widget>\n            </row>\n          </rows>\n          <widget name=\"title\" type=\"text\">\n            <labels>\n              <label mode=\"any\">title</label>\n            </labels>\n            <translated>true</translated>\n            <fields>\n              <field>dc:title</field>\n            </fields>\n            <properties mode=\"edit\">\n              <property name=\"required\">true</property>\n            </properties>\n            <properties mode=\"create\">\n              <property name=\"required\">true</property>\n            </properties>\n          </widget>\n          <widget name=\"description\" type=\"textarea\">\n            <labels>\n              <label mode=\"any\">description</label>\n            </labels>\n            <translated>true</translated>\n            <fields>\n              <field>dc:description</field>\n            </fields>\n          </widget>\n        </layout>\n      </code>\n\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.forms.layout.descriptors.LayoutDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"widgets\">\n\n    <documentation>\n      Since 5.1.7 and 5.2.0, a widget can be defined globally in the\n      application.\n\n      Layouts can reference global widgets in their row definition without\n      having to redefine them in their widgets definitions. The widget with\n      given name will be searched in this global registry only if it is not\n      found in the layout definition.\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.platform.forms.layout.descriptors.WidgetDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"disabledPropertyRefs\">\n\n    <documentation>\n      Since 5.6, makes it possible to define what properties should\n      not be referenced using EL expressions.\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.platform.forms.layout.service.DisabledPropertyRefDescriptor\" />\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouts-framework.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-forms-layout-client-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.forms.layout/org.nuxeo.ecm.platform.forms.layout.client",
      "id": "org.nuxeo.ecm.platform.forms.layout.client",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240205-104815\r\nBundle-Name: Nuxeo ECM Layout Client Fragment\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.forms.layout.client;singleto\r\n n:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: stateless\r\nRequire-Bundle: org.nuxeo.ecm.platform.forms.layout.api,org.nuxeo.ecm.co\r\n re.api\r\nNuxeo-Component: OSGI-INF/layouts-framework.xml,OSGI-INF/layouts-dev-con\r\n trib.xml,OSGI-INF/layouts-contrib.xml,OSGI-INF/layouts-properties.xml\r\n\r\n",
      "maxResolutionOrder": 372,
      "minResolutionOrder": 368,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.forms.layout.api",
        "org.nuxeo.ecm.core.api"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-rest-api-server",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.restapi.io",
          "org.nuxeo.ecm.platform.restapi.server",
          "org.nuxeo.ecm.platform.restapi.server.login.tokenauth",
          "org.nuxeo.ecm.platform.restapi.server.search"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi",
        "id": "grp:org.nuxeo.ecm.platform.restapi",
        "name": "org.nuxeo.ecm.platform.restapi",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.restapi.server",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService--codecs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server/org.nuxeo.ecm.platform.restapi.docview.contrib/Contributions/org.nuxeo.ecm.platform.restapi.docview.contrib--codecs",
              "id": "org.nuxeo.ecm.platform.restapi.docview.contrib--codecs",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"codecs\" target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\">\n    <documentViewCodec class=\"org.nuxeo.ecm.restapi.server.jaxrs.RestDocumentViewCodec\" default=\"false\" enabled=\"true\" name=\"restdocid\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server/org.nuxeo.ecm.platform.restapi.docview.contrib",
          "name": "org.nuxeo.ecm.platform.restapi.docview.contrib",
          "requirements": [],
          "resolutionOrder": 720,
          "services": [],
          "startOrder": 439,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.restapi.docview.contrib\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\"\n    point=\"codecs\">\n    <documentViewCodec name=\"restdocid\" enabled=\"true\"\n      default=\"false\" class=\"org.nuxeo.ecm.restapi.server.jaxrs.RestDocumentViewCodec\" />\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/docviewurl-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--openUrl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server/org.nuxeo.ecm.restapi.server.auth.config/Contributions/org.nuxeo.ecm.restapi.server.auth.config--openUrl",
              "id": "org.nuxeo.ecm.restapi.server.auth.config--openUrl",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"openUrl\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <openUrl name=\"RestApiDoc\">\n      <grantPattern>/nuxeo/api/v[0-9]+/doc/.*</grantPattern>\n    </openUrl>\n    <openUrl name=\"RestApiDocJson\">\n        <grantPattern>/nuxeo/site/api/v[0-9]+/doc/.*</grantPattern>\n    </openUrl>\n    <openUrl name=\"RestApiDocSiteSkin\">\n        <grantPattern>/nuxeo/site/skin/api/.*</grantPattern>\n    </openUrl>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--specificChains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server/org.nuxeo.ecm.restapi.server.auth.config/Contributions/org.nuxeo.ecm.restapi.server.auth.config--specificChains",
              "id": "org.nuxeo.ecm.restapi.server.auth.config--specificChains",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"specificChains\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <specificAuthenticationChain name=\"RestAPI\">\n        <urlPatterns>\n            <url>(.*)/api/v.*</url>\n        </urlPatterns>\n\n        <replacementChain>\n            <plugin>AUTOMATION_BASIC_AUTH</plugin>\n            <plugin>TOKEN_AUTH</plugin>\n            <plugin>OAUTH2_AUTH</plugin>\n            <plugin>JWT_AUTH</plugin>\n        </replacementChain>\n    </specificAuthenticationChain>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server/org.nuxeo.ecm.restapi.server.auth.config",
          "name": "org.nuxeo.ecm.restapi.server.auth.config",
          "requirements": [
            "org.nuxeo.ecm.automation.server.auth.config"
          ],
          "resolutionOrder": 721,
          "services": [],
          "startOrder": 590,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.restapi.server.auth.config\">\n<!--\nSetup a Basic Auth plugin for /automation paths that will always send 401 on authentication failures\n-->\n\n  <require>org.nuxeo.ecm.automation.server.auth.config</require>\n\n  <extension point=\"openUrl\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <openUrl name=\"RestApiDoc\">\n      <grantPattern>/nuxeo/api/v[0-9]+/doc/.*</grantPattern>\n    </openUrl>\n    <openUrl name=\"RestApiDocJson\">\n        <grantPattern>/nuxeo/site/api/v[0-9]+/doc/.*</grantPattern>\n    </openUrl>\n    <openUrl name=\"RestApiDocSiteSkin\">\n        <grantPattern>/nuxeo/site/skin/api/.*</grantPattern>\n    </openUrl>\n  </extension>\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n      point=\"specificChains\">\n\n    <specificAuthenticationChain name=\"RestAPI\">\n        <urlPatterns>\n            <url>(.*)/api/v.*</url>\n        </urlPatterns>\n\n        <replacementChain>\n            <plugin>AUTOMATION_BASIC_AUTH</plugin>\n            <plugin>TOKEN_AUTH</plugin>\n            <plugin>OAUTH2_AUTH</plugin>\n            <plugin>JWT_AUTH</plugin>\n        </replacementChain>\n    </specificAuthenticationChain>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/auth-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server/org.nuxeo.ecm.restapi.server.search.config/Contributions/org.nuxeo.ecm.restapi.server.search.config--providers",
              "id": "org.nuxeo.ecm.restapi.server.search.config--providers",
              "registrationOrder": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n        <coreQueryPageProvider name=\"REST_API_SEARCH_ADAPTER\"/>\n    </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server/org.nuxeo.ecm.restapi.server.search.config",
          "name": "org.nuxeo.ecm.restapi.server.search.config",
          "requirements": [],
          "resolutionOrder": 722,
          "services": [],
          "startOrder": 592,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.restapi.server.search.config\">\n    <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n        <coreQueryPageProvider name=\"REST_API_SEARCH_ADAPTER\" />\n    </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/searchadapter-pp-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server/org.nuxeo.ecm.restapi.server.jsonEnrichers/Contributions/org.nuxeo.ecm.restapi.server.jsonEnrichers--marshallers",
              "id": "org.nuxeo.ecm.restapi.server.jsonEnrichers--marshallers",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.restapi.server.jaxrs.enrichers.AuditJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.server.jaxrs.enrichers.HasContentJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server/org.nuxeo.ecm.restapi.server.jsonEnrichers",
          "name": "org.nuxeo.ecm.restapi.server.jsonEnrichers",
          "requirements": [],
          "resolutionOrder": 723,
          "services": [],
          "startOrder": 591,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.restapi.server.jsonEnrichers\">\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.restapi.server.jaxrs.enrichers.AuditJsonEnricher\"\n      enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.server.jaxrs.enrichers.HasContentJsonEnricher\"\n      enable=\"true\" />\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/json-enrichers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.restapi.server.RestAPIServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    An internal service used to propagate endpoint action to all nodes in the cluster.\n  \n",
          "documentationHtml": "<p>\nAn internal service used to propagate endpoint action to all nodes in the cluster.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server/org.nuxeo.ecm.platform.restapi.service",
          "name": "org.nuxeo.ecm.platform.restapi.service",
          "requirements": [],
          "resolutionOrder": 724,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.restapi.service",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server/org.nuxeo.ecm.platform.restapi.service/Services/org.nuxeo.ecm.restapi.server.RestAPIService",
              "id": "org.nuxeo.ecm.restapi.server.RestAPIService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 870,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.restapi.service\" version=\"1.0\">\n\n  <documentation>\n    An internal service used to propagate endpoint action to all nodes in the cluster.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.restapi.server.RestAPIServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.restapi.server.RestAPIService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rest-api-service-contrib.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-rest-api-server-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server",
      "id": "org.nuxeo.ecm.platform.restapi.server",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: nuxeo-restapi-server\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.restapi.server;singleton:=tr\r\n ue\r\nBundle-Vendor: Nuxeo\r\nNuxeo-WebModule: org.nuxeo.ecm.restapi.server.jaxrs.APIModule;name=api;e\r\n xtends=automation;package=org/nuxeo/ecm/restapi/server/jaxrs;headless=t\r\n rue\r\nNuxeo-Component: OSGI-INF/docviewurl-service-contrib.xml,OSGI-INF/auth-c\r\n ontrib.xml,OSGI-INF/searchadapter-pp-contrib.xml,OSGI-INF/json-enricher\r\n s-contrib.xml,OSGI-INF/rest-api-service-contrib.xml\r\nNuxeo-AllowOverride: true\r\n\r\n",
      "maxResolutionOrder": 724,
      "minResolutionOrder": 720,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core",
          "org.nuxeo.ecm.core.api",
          "org.nuxeo.ecm.core.bulk",
          "org.nuxeo.ecm.core.cache",
          "org.nuxeo.ecm.core.event",
          "org.nuxeo.ecm.core.io",
          "org.nuxeo.ecm.core.mimetype",
          "org.nuxeo.ecm.core.mongodb",
          "org.nuxeo.ecm.core.persistence",
          "org.nuxeo.ecm.core.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.platform.el"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core",
        "id": "grp:org.nuxeo.ecm.core",
        "name": "org.nuxeo.ecm.core",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.api",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.api.adapter.DocumentAdapterService",
          "declaredStartOrder": null,
          "documentation": "\n    Service providing a dynamic adapter mechanism to adapt documents to random interfaces.\n    @author Bogdan Stefanescu (bs@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nService providing a dynamic adapter mechanism to adapt documents to random interfaces.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.DocumentAdapterService",
              "descriptors": [
                "org.nuxeo.ecm.core.api.adapter.DocumentAdapterDescriptor"
              ],
              "documentation": "\n\n      Extension Point for registering new document adapters\n      XML extensions may contain any number of 'adapter' elements of the form:\n      <adapter\n    class=\"org.nuxeo.ecm.sample.adapter.Versionable\" facet=\"Versionable\" factory=\"org.nuxeo.ecm.sample.adapter.VersionableFactory\"/>\n\n      This means any document having the facet 'facet' can be adapted to a 'class' object using the factory 'factory'\n      <p/>\n\n      The facet attribute is optional and serve to restrict the applicability of the adapter.\n      If no facet is specified the adapter will be applicable on any document.\n    \n",
              "documentationHtml": "<p>\nExtension Point for registering new document adapters\nXML extensions may contain any number of &#39;adapter&#39; elements of the form:\n\n</p><p>\nThis means any document having the facet &#39;facet&#39; can be adapted to a &#39;class&#39; object using the factory &#39;factory&#39;\n</p><p>\nThe facet attribute is optional and serve to restrict the applicability of the adapter.\nIf no facet is specified the adapter will be applicable on any document.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.DocumentAdapterService/ExtensionPoints/org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "id": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "label": "adapters (org.nuxeo.ecm.core.api.DocumentAdapterService)",
              "name": "adapters",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.DocumentAdapterService",
          "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
          "requirements": [],
          "resolutionOrder": 112,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.DocumentAdapterService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.DocumentAdapterService/Services/org.nuxeo.ecm.core.api.adapter.DocumentAdapterService",
              "id": "org.nuxeo.ecm.core.api.adapter.DocumentAdapterService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 794,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.api.DocumentAdapterService\" version=\"1.0.0\">\n  <documentation>\n    Service providing a dynamic adapter mechanism to adapt documents to random interfaces.\n    @author Bogdan Stefanescu (bs@nuxeo.com)\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.api.adapter.DocumentAdapterService\"/>\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.core.api.adapter.DocumentAdapterService\"/>\n  </service>\n\n  <extension-point name=\"adapters\">\n\n    <documentation>\n      Extension Point for registering new document adapters\n      XML extensions may contain any number of 'adapter' elements of the form:\n      <adapter facet=\"Versionable\"\n        class=\"org.nuxeo.ecm.sample.adapter.Versionable\"\n        factory=\"org.nuxeo.ecm.sample.adapter.VersionableFactory\"/>\n      This means any document having the facet 'facet' can be adapted to a 'class' object using the factory 'factory'\n      <p/>\n      The facet attribute is optional and serve to restrict the applicability of the adapter.\n      If no facet is specified the adapter will be applicable on any document.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.api.adapter.DocumentAdapterDescriptor\"/>\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/DocumentAdapterService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.api.repository.RepositoryManagerImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Manages repositories.\n  \n",
          "documentationHtml": "<p>\nManages repositories.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.repository.RepositoryManager",
              "descriptors": [
                "org.nuxeo.ecm.core.api.repository.Repository"
              ],
              "documentation": "\n      Obsolete repositories definition.\n      Use org.nuxeo.ecm.core.storage.sql.RepositoryService instead.\n    \n",
              "documentationHtml": "<p>\nObsolete repositories definition.\nUse org.nuxeo.ecm.core.storage.sql.RepositoryService instead.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.repository.RepositoryManager/ExtensionPoints/org.nuxeo.ecm.core.api.repository.RepositoryManager--repositories",
              "id": "org.nuxeo.ecm.core.api.repository.RepositoryManager--repositories",
              "label": "repositories (org.nuxeo.ecm.core.api.repository.RepositoryManager)",
              "name": "repositories",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.repository.RepositoryManager",
          "name": "org.nuxeo.ecm.core.api.repository.RepositoryManager",
          "requirements": [],
          "resolutionOrder": 113,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.repository.RepositoryManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.repository.RepositoryManager/Services/org.nuxeo.ecm.core.api.repository.RepositoryManager",
              "id": "org.nuxeo.ecm.core.api.repository.RepositoryManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 799,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.api.repository.RepositoryManager\" version=\"1.0.0\">\n  <documentation>\n    Manages repositories.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.api.repository.RepositoryManagerImpl\"/>\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.core.api.repository.RepositoryManager\"/>\n  </service>\n\n  <extension-point name=\"repositories\">\n    <documentation>\n      Obsolete repositories definition.\n      Use org.nuxeo.ecm.core.storage.sql.RepositoryService instead.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.api.repository.Repository\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/RepositoryManager.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.api.validation.DocumentValidationServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Service providing a way to validates document according to constraints described in schemas.\n  \n",
          "documentationHtml": "<p>\nService providing a way to validates document according to constraints described in schemas.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.DocumentValidationService",
              "descriptors": [
                "org.nuxeo.ecm.core.api.validation.DocumentValidationDescriptor"
              ],
              "documentation": "\n\n      Extension Point to enable/disable validation in any context.\n      <validation\n    activated=\"true\" context=\"CoreSession.saveDocument\"/>\n",
              "documentationHtml": "<p>\nExtension Point to enable/disable validation in any context.\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.DocumentValidationService/ExtensionPoints/org.nuxeo.ecm.core.api.DocumentValidationService--activations",
              "id": "org.nuxeo.ecm.core.api.DocumentValidationService--activations",
              "label": "activations (org.nuxeo.ecm.core.api.DocumentValidationService)",
              "name": "activations",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.DocumentValidationService",
          "name": "org.nuxeo.ecm.core.api.DocumentValidationService",
          "requirements": [],
          "resolutionOrder": 114,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.DocumentValidationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.DocumentValidationService/Services/org.nuxeo.ecm.core.api.validation.DocumentValidationService",
              "id": "org.nuxeo.ecm.core.api.validation.DocumentValidationService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 795,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.api.DocumentValidationService\" version=\"1.0.0\">\n  <documentation>\n    Service providing a way to validates document according to constraints described in schemas.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.api.validation.DocumentValidationServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.api.validation.DocumentValidationService\" />\n  </service>\n\n  <extension-point name=\"activations\">\n\n    <documentation>\n      Extension Point to enable/disable validation in any context.\n      <validation context=\"CoreSession.saveDocument\" activated=\"true\" />\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.api.validation.DocumentValidationDescriptor\" />\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/DocumentValidationService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentValidationService--activations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.DocumentValidationService.activations/Contributions/org.nuxeo.ecm.core.api.DocumentValidationService.activations--activations",
              "id": "org.nuxeo.ecm.core.api.DocumentValidationService.activations--activations",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentValidationService",
                "name": "org.nuxeo.ecm.core.api.DocumentValidationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"activations\" target=\"org.nuxeo.ecm.core.api.DocumentValidationService\">\n    <validation activated=\"true\" context=\"createDocument\"/>\n    <validation activated=\"true\" context=\"saveDocument\"/>\n    <validation activated=\"true\" context=\"importDocument\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.DocumentValidationService.activations",
          "name": "org.nuxeo.ecm.core.api.DocumentValidationService.activations",
          "requirements": [
            "org.nuxeo.ecm.core.api.DocumentValidationService"
          ],
          "resolutionOrder": 115,
          "services": [],
          "startOrder": 114,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.api.DocumentValidationService.activations\">\n\n  <require>org.nuxeo.ecm.core.api.DocumentValidationService</require>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentValidationService\" point=\"activations\">\n    <validation context=\"createDocument\" activated=\"true\" />\n    <validation context=\"saveDocument\" activated=\"true\" />\n    <validation context=\"importDocument\" activated=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/DocumentValidationService-activation.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.blob.BlobManagerComponent",
          "declaredStartOrder": null,
          "documentation": "\n    Blob Manager, delegating logic to the appropriate Blob Provider.\n  \n",
          "documentationHtml": "<p>\nBlob Manager, delegating logic to the appropriate Blob Provider.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.blob.BlobManager",
              "descriptors": [
                "org.nuxeo.ecm.core.blob.BlobProviderDescriptor"
              ],
              "documentation": "\n      Extension points to register the blob providers.\n    \n",
              "documentationHtml": "<p>\nExtension points to register the blob providers.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.blob.BlobManager/ExtensionPoints/org.nuxeo.ecm.core.blob.BlobManager--configuration",
              "id": "org.nuxeo.ecm.core.blob.BlobManager--configuration",
              "label": "configuration (org.nuxeo.ecm.core.blob.BlobManager)",
              "name": "configuration",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Delay before a blob which has had its digest computed asynchronously is deleted.\n      @since 2021.9\n    \n",
              "documentationHtml": "<p>\nDelay before a blob which has had its digest computed asynchronously is deleted.\n&#64;since 2021.9\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.blob.BlobManager/Contributions/org.nuxeo.ecm.core.blob.BlobManager--configuration",
              "id": "org.nuxeo.ecm.core.blob.BlobManager--configuration",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Delay before a blob which has had its digest computed asynchronously is deleted.\n      @since 2021.9\n    </documentation>\n    <property name=\"nuxeo.blobmanager.delete.delay\">1h</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.blob.BlobManager",
          "name": "org.nuxeo.ecm.core.blob.BlobManager",
          "requirements": [],
          "resolutionOrder": 116,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.blob.BlobManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.blob.BlobManager/Services/org.nuxeo.ecm.core.blob.BlobManager",
              "id": "org.nuxeo.ecm.core.blob.BlobManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 802,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.blob.BlobManager\" version=\"1.0.0\">\n\n  <documentation>\n    Blob Manager, delegating logic to the appropriate Blob Provider.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.blob.BlobManagerComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.blob.BlobManager\" />\n  </service>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      Extension points to register the blob providers.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.blob.BlobProviderDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Delay before a blob which has had its digest computed asynchronously is deleted.\n      @since 2021.9\n    </documentation>\n    <property name=\"nuxeo.blobmanager.delete.delay\">1h</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/blobmanager-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
          "declaredStartOrder": null,
          "documentation": "\n    The BlobHolderAdapter provides the BlobHolderAdapterService wich give the needed BlobHolder.\n    A BlobHolder is an adapter that provides methods to get binaries and related metadatas.\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe BlobHolderAdapter provides the BlobHolderAdapterService wich give the needed BlobHolder.\nA BlobHolder is an adapter that provides methods to get binaries and related metadatas.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.api.blobholder.BlobHolderFactoryDescriptor"
              ],
              "documentation": "\n      @author Thierry Delprat (td@nuxeo.com)\n\n      This extension point let you contribute custom factories for BlobHolder\n      according to DocumentType\n    \n",
              "documentationHtml": "<p>\nThis extension point let you contribute custom factories for BlobHolder\naccording to DocumentType\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent/ExtensionPoints/org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent--BlobHolderFactory",
              "id": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent--BlobHolderFactory",
              "label": "BlobHolderFactory (org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent)",
              "name": "BlobHolderFactory",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.api.externalblob.ExternalBlobAdapterDescriptor"
              ],
              "documentation": "\n      @author Anahide Tchertchian (at@nuxeo.com)\n\n      Contribute external blob adapters. Contributed classes have to follow the\n      ExternalBlobAdapter interface.\n\n      Example of contribution using the default file system adapter:\n\n      <code>\n    <adapter\n        class=\"org.nuxeo.ecm.core.api.externalblob.FileSystemExternalBlobAdapter\" prefix=\"fs\">\n        <property name=\"container\">/tmp/</property>\n    </adapter>\n</code>\n",
              "documentationHtml": "<p>\nContribute external blob adapters. Contributed classes have to follow the\nExternalBlobAdapter interface.\n</p><p>\nExample of contribution using the default file system adapter:\n</p><p>\n</p><pre><code>    &lt;adapter\n        class&#61;&#34;org.nuxeo.ecm.core.api.externalblob.FileSystemExternalBlobAdapter&#34; prefix&#61;&#34;fs&#34;&gt;\n        &lt;property name&#61;&#34;container&#34;&gt;/tmp/&lt;/property&gt;\n    &lt;/adapter&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent/ExtensionPoints/org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent--ExternalBlobAdapter",
              "id": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent--ExternalBlobAdapter",
              "label": "ExternalBlobAdapter (org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent)",
              "name": "ExternalBlobAdapter",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
          "name": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
          "requirements": [],
          "resolutionOrder": 117,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent/Services/org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterService",
              "id": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 796,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent\">\n\n  <implementation\n    class=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent\" />\n  <documentation>\n    The BlobHolderAdapter provides the BlobHolderAdapterService wich give the needed BlobHolder.\n    A BlobHolder is an adapter that provides methods to get binaries and related metadatas.\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterService\" />\n  </service>\n\n  <extension-point name=\"BlobHolderFactory\">\n    <documentation>\n      @author Thierry Delprat (td@nuxeo.com)\n\n      This extension point let you contribute custom factories for BlobHolder\n      according to DocumentType\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderFactoryDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"ExternalBlobAdapter\">\n    <documentation>\n      @author Anahide Tchertchian (at@nuxeo.com)\n\n      Contribute external blob adapters. Contributed classes have to follow the\n      ExternalBlobAdapter interface.\n\n      Example of contribution using the default file system adapter:\n\n      <code>\n        <adapter prefix=\"fs\"\n          class=\"org.nuxeo.ecm.core.api.externalblob.FileSystemExternalBlobAdapter\">\n          <property name=\"container\">/tmp/</property>\n        </adapter>\n      </code>\n\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.core.api.externalblob.ExternalBlobAdapterDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/blob-holder-service-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "Adapters BlobHolders\n",
          "documentationHtml": "<p>\nAdapters BlobHolders</p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.blohodlers.adapters/Contributions/org.nuxeo.ecm.core.api.blohodlers.adapters--adapters",
              "id": "org.nuxeo.ecm.core.api.blohodlers.adapters--adapters",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.core.api.blobholder.BlobHolder\" factory=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.blohodlers.adapters",
          "name": "org.nuxeo.ecm.core.api.blohodlers.adapters",
          "requirements": [],
          "resolutionOrder": 118,
          "services": [],
          "startOrder": 115,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.api.blohodlers.adapters\">\n  <documentation>Adapters BlobHolders</documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.core.api.blobholder.BlobHolder\"\n      factory=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/blob-holder-adapters-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.api.pathsegment.PathSegmentComponent",
          "declaredStartOrder": null,
          "documentation": "\n    Component defining the implementation to use to compute the path\n    segment for a new DocumentModel.\n  \n",
          "documentationHtml": "<p>\nComponent defining the implementation to use to compute the path\nsegment for a new DocumentModel.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.pathsegment.PathSegmentService",
              "descriptors": [
                "org.nuxeo.ecm.core.api.pathsegment.PathSegmentServiceDescriptor"
              ],
              "documentation": "\n      Extension point defining the implementation for the computation of\n      the path segment for new a DocumentModel. Example:\n\n      <code>\n    <service class=\"some-class\"/>\n</code>\n\n\n      The provided class must implement org.nuxeo.ecm.core.api.pathsegment.PathSegmentService\n\n      The default implementation is org.nuxeo.ecm.core.api.pathsegment.PathSegmentServiceDefault\n      You can contribute org.nuxeo.ecm.core.api.pathsegment.PathSegmentServiceCompat\n      to get pre-Nuxeo 5.4 behavior.\n    \n",
              "documentationHtml": "<p>\nExtension point defining the implementation for the computation of\nthe path segment for new a DocumentModel. Example:\n</p><p>\n</p><pre><code>    &lt;service class&#61;&#34;some-class&#34;/&gt;\n</code></pre><p>\nThe provided class must implement org.nuxeo.ecm.core.api.pathsegment.PathSegmentService\n</p><p>\nThe default implementation is org.nuxeo.ecm.core.api.pathsegment.PathSegmentServiceDefault\nYou can contribute org.nuxeo.ecm.core.api.pathsegment.PathSegmentServiceCompat\nto get pre-Nuxeo 5.4 behavior.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.pathsegment.PathSegmentService/ExtensionPoints/org.nuxeo.ecm.core.api.pathsegment.PathSegmentService--pathSegmentService",
              "id": "org.nuxeo.ecm.core.api.pathsegment.PathSegmentService--pathSegmentService",
              "label": "pathSegmentService (org.nuxeo.ecm.core.api.pathsegment.PathSegmentService)",
              "name": "pathSegmentService",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.pathsegment.PathSegmentService",
          "name": "org.nuxeo.ecm.core.api.pathsegment.PathSegmentService",
          "requirements": [],
          "resolutionOrder": 119,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.pathsegment.PathSegmentService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.pathsegment.PathSegmentService/Services/org.nuxeo.ecm.core.api.pathsegment.PathSegmentService",
              "id": "org.nuxeo.ecm.core.api.pathsegment.PathSegmentService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 797,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.api.pathsegment.PathSegmentService\">\n\n  <implementation\n    class=\"org.nuxeo.ecm.core.api.pathsegment.PathSegmentComponent\" />\n  <documentation>\n    Component defining the implementation to use to compute the path\n    segment for a new DocumentModel.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.api.pathsegment.PathSegmentService\" />\n  </service>\n\n  <extension-point name=\"pathSegmentService\">\n    <documentation>\n      Extension point defining the implementation for the computation of\n      the path segment for new a DocumentModel. Example:\n\n      <code>\n        <service class=\"some-class\" />\n      </code>\n\n      The provided class must implement org.nuxeo.ecm.core.api.pathsegment.PathSegmentService\n\n      The default implementation is org.nuxeo.ecm.core.api.pathsegment.PathSegmentServiceDefault\n      You can contribute org.nuxeo.ecm.core.api.pathsegment.PathSegmentServiceCompat\n      to get pre-Nuxeo 5.4 behavior.\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.core.api.pathsegment.PathSegmentServiceDescriptor\" />\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pathsegment-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.api.localconfiguration.LocalConfigurationServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The LocalConfiguration service manages LocalConfiguration classes.\n    It provides a method to retrieve LocalConfiguration from a current document\n    and a given facet.\n\n    @author Thomas Roger (troger@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe LocalConfiguration service manages LocalConfiguration classes.\nIt provides a method to retrieve LocalConfiguration from a current document\nand a given facet.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.core.LocalConfigurationService",
          "name": "org.nuxeo.core.LocalConfigurationService",
          "requirements": [],
          "resolutionOrder": 120,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.core.LocalConfigurationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.core.LocalConfigurationService/Services/org.nuxeo.ecm.core.api.localconfiguration.LocalConfigurationService",
              "id": "org.nuxeo.ecm.core.api.localconfiguration.LocalConfigurationService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 783,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.core.LocalConfigurationService\">\n\n  <documentation>\n    The LocalConfiguration service manages LocalConfiguration classes.\n    It provides a method to retrieve LocalConfiguration from a current document\n    and a given facet.\n\n    @author Thomas Roger (troger@nuxeo.com)\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.core.api.localconfiguration.LocalConfigurationServiceImpl\"/>\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.core.api.localconfiguration.LocalConfigurationService\"/>\n  </service>\n</component>\n",
          "xmlFileName": "/OSGI-INF/local-configuration-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.api.propertiesmapping.impl.PropertiesMappingComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingDescriptor"
              ],
              "documentation": "\n      This extension point can be used to register Mappings.\n      Mapping is in the form : target DocumentModel property path : source DocumentModel property path\n      <code>\n    <mapping name=\"mappingName\">\n        <property path=\"somePropOnTargetDoc\">somePropOnSourceDoc</property>\n    </mapping>\n</code>\n",
              "documentationHtml": "<p>\nThis extension point can be used to register Mappings.\nMapping is in the form : target DocumentModel property path : source DocumentModel property path\n</p><p></p><pre><code>    &lt;mapping name&#61;&#34;mappingName&#34;&gt;\n        &lt;property path&#61;&#34;somePropOnTargetDoc&#34;&gt;somePropOnSourceDoc&lt;/property&gt;\n    &lt;/mapping&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingComponent/ExtensionPoints/org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingComponent--mapping",
              "id": "org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingComponent--mapping",
              "label": "mapping (org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingComponent)",
              "name": "mapping",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingComponent",
          "name": "org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingComponent",
          "requirements": [],
          "resolutionOrder": 121,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingComponent/Services/org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingService",
              "id": "org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 798,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingComponent\">\n\n  <implementation class=\"org.nuxeo.ecm.core.api.propertiesmapping.impl.PropertiesMappingComponent\" version=\"1.0.0\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingService\" />\n  </service>\n\n  <documentation>\n  </documentation>\n\n  <extension-point name=\"mapping\">\n    <documentation>\n      This extension point can be used to register Mappings.\n      Mapping is in the form : target DocumentModel property path : source DocumentModel property path\n      <code>\n        <mapping name=\"mappingName\">\n          <property path=\"somePropOnTargetDoc\">somePropOnSourceDoc</property>\n        </mapping>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.api.propertiesmapping.PropertiesMappingDescriptor\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/propertiesmapping-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Adapters contribution for thumbnail\n  \n",
          "documentationHtml": "<p>\nAdapters contribution for thumbnail\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.thumbnail.adapter/Contributions/org.nuxeo.ecm.core.api.thumbnail.adapter--adapters",
              "id": "org.nuxeo.ecm.core.api.thumbnail.adapter--adapters",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailAdapter\" factory=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.thumbnail.adapter",
          "name": "org.nuxeo.ecm.core.api.thumbnail.adapter",
          "requirements": [],
          "resolutionOrder": 122,
          "services": [],
          "startOrder": 117,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.api.thumbnail.adapter\">\n  <documentation>\n    Adapters contribution for thumbnail\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter\n      class=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailAdapter\"\n      factory=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/thumbnail-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailServiceImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
              "descriptors": [
                "org.nuxeo.ecm.core.api.thumbnail.ThumbnailFactoryDescriptor"
              ],
              "documentation": "\n      @author Vladimir Pasquier (vpasquier@nuxeo.com)\n      This extension\n      provides thumbnail factories according to the type, facet and\n      default one.\n      <code>\n    <thumbnailFactory facet=\"Folderish\"\n        factoryClass=\"org.nuxeo.ecm.platform.thumbnail.factories.ThumbnailFolderishFactory\" name=\"thumbnailFolderishFactory\"/>\n    <thumbnailFactory\n        factoryClass=\"org.nuxeo.ecm.platform.thumbnail.factories.ThumbnailDocumentFactory\" name=\"thumbnailDocumentFactory\"/>\n</code>\n",
              "documentationHtml": "<p>\nThis extension\nprovides thumbnail factories according to the type, facet and\ndefault one.\n</p><p></p><pre><code>    &lt;thumbnailFactory facet&#61;&#34;Folderish&#34;\n        factoryClass&#61;&#34;org.nuxeo.ecm.platform.thumbnail.factories.ThumbnailFolderishFactory&#34; name&#61;&#34;thumbnailFolderishFactory&#34;/&gt;\n    &lt;thumbnailFactory\n        factoryClass&#61;&#34;org.nuxeo.ecm.platform.thumbnail.factories.ThumbnailDocumentFactory&#34; name&#61;&#34;thumbnailDocumentFactory&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.thumbnail.ThumbnailService/ExtensionPoints/org.nuxeo.ecm.core.api.thumbnail.ThumbnailService--thumbnailFactory",
              "id": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService--thumbnailFactory",
              "label": "thumbnailFactory (org.nuxeo.ecm.core.api.thumbnail.ThumbnailService)",
              "name": "thumbnailFactory",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
          "name": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
          "requirements": [],
          "resolutionOrder": 123,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.thumbnail.ThumbnailService/Services/org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
              "id": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 800,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailService\">\n\n  <implementation\n    class=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailServiceImpl\" />\n  <documentation>\n  </documentation>\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailService\" />\n  </service>\n\n  <extension-point name=\"thumbnailFactory\">\n    <documentation>\n      @author Vladimir Pasquier (vpasquier@nuxeo.com)\n      This extension\n      provides thumbnail factories according to the type, facet and\n      default one.\n      <code>\n        <thumbnailFactory name=\"thumbnailFolderishFactory\"\n          facet=\"Folderish\"\n          factoryClass=\"org.nuxeo.ecm.platform.thumbnail.factories.ThumbnailFolderishFactory\" />\n        <thumbnailFactory name=\"thumbnailDocumentFactory\"\n          factoryClass=\"org.nuxeo.ecm.platform.thumbnail.factories.ThumbnailDocumentFactory\" />\n      </code>\n\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailFactoryDescriptor\" />\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/thumbnail-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that defines the max length of the document name,\n      which is mainly used to build the document path.\n    \n",
              "documentationHtml": "<p>\nProperty that defines the max length of the document name,\nwhich is mainly used to build the document path.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.properties/Contributions/org.nuxeo.ecm.core.api.properties--configuration",
              "id": "org.nuxeo.ecm.core.api.properties--configuration",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that defines the max length of the document name,\n      which is mainly used to build the document path.\n    </documentation>\n    <property name=\"nuxeo.path.segment.maxsize\">24</property>\n\n    <documentation>\n      Property that defines if a transient username should be unique no matter what base username is provided,\n      or if a transient username should be always the same for a given base username.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.transient.username.unique\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.api.properties",
          "name": "org.nuxeo.ecm.core.api.properties",
          "requirements": [],
          "resolutionOrder": 124,
          "services": [],
          "startOrder": 116,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.api.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that defines the max length of the document name,\n      which is mainly used to build the document path.\n    </documentation>\n    <property name=\"nuxeo.path.segment.maxsize\">24</property>\n\n    <documentation>\n      Property that defines if a transient username should be unique no matter what base username is provided,\n      or if a transient username should be always the same for a given base username.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.transient.username.unique\">false</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-api-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n            Enable Legacy behavior (Nuxeo 6.x) on ACL order of execution. On Nuxeo 6.x and below, the ACL execution order\n            used to be Inherited -&gt; Local -&gt; LocalGroup (custom), on &gt;7.x it's Inherited -&gt; LocalGroup (custom) -&gt; Local.\n            This flag enables Legacy ACL mode on newer Nuxeo versions 7.x and above.\n        \n",
              "documentationHtml": "<p>\nEnable Legacy behavior (Nuxeo 6.x) on ACL order of execution. On Nuxeo 6.x and below, the ACL execution order\nused to be Inherited -&gt; Local -&gt; LocalGroup (custom), on &gt;7.x it&#39;s Inherited -&gt; LocalGroup (custom) -&gt; Local.\nThis flag enables Legacy ACL mode on newer Nuxeo versions 7.x and above.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.security.acl.properties/Contributions/org.nuxeo.ecm.core.security.acl.properties--configuration",
              "id": "org.nuxeo.ecm.core.security.acl.properties--configuration",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n        <documentation>\n            Enable Legacy behavior (Nuxeo 6.x) on ACL order of execution. On Nuxeo 6.x and below, the ACL execution order\n            used to be Inherited -&gt; Local -&gt; LocalGroup (custom), on &gt;7.x it's Inherited -&gt; LocalGroup (custom) -&gt; Local.\n            This flag enables Legacy ACL mode on newer Nuxeo versions 7.x and above.\n        </documentation>\n        <property name=\"nuxeo.security.acl.legacyBehavior\">false</property>\n    </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api/org.nuxeo.ecm.core.security.acl.properties",
          "name": "org.nuxeo.ecm.core.security.acl.properties",
          "requirements": [],
          "resolutionOrder": 125,
          "services": [],
          "startOrder": 157,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.security.acl.properties\">\n    <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n        <documentation>\n            Enable Legacy behavior (Nuxeo 6.x) on ACL order of execution. On Nuxeo 6.x and below, the ACL execution order\n            used to be Inherited -> Local -> LocalGroup (custom), on >7.x it's Inherited -> LocalGroup (custom) -> Local.\n            This flag enables Legacy ACL mode on newer Nuxeo versions 7.x and above.\n        </documentation>\n        <property name=\"nuxeo.security.acl.legacyBehavior\">false</property>\n    </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/legacy-acp-behavior.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.api",
      "id": "org.nuxeo.ecm.core.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 5.4.2.qualifier\r\nExport-Package: org.nuxeo.ecm.core;api=split;mandatory:=api,org.nuxeo.ec\r\n m.core.api;api=split;mandatory:=api,org.nuxeo.ecm.core.api.adapter,org.\r\n nuxeo.ecm.core.api.blobholder,org.nuxeo.ecm.core.api.event,org.nuxeo.ec\r\n m.core.api.event.impl,org.nuxeo.ecm.core.api.externalblob,org.nuxeo.ecm\r\n .core.api.facet,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.core.api.impl\r\n .blob,org.nuxeo.ecm.core.api.impl.converter,org.nuxeo.ecm.core.api.loca\r\n l,org.nuxeo.ecm.core.api.model,org.nuxeo.ecm.core.api.model.impl,org.nu\r\n xeo.ecm.core.api.model.impl.osm,org.nuxeo.ecm.core.api.model.impl.osm.u\r\n til,org.nuxeo.ecm.core.api.model.impl.primitives,org.nuxeo.ecm.core.api\r\n .operation,org.nuxeo.ecm.core.api.pathsegment,org.nuxeo.ecm.core.api.re\r\n pository,org.nuxeo.ecm.core.api.repository.cache,org.nuxeo.ecm.core.api\r\n .security,org.nuxeo.ecm.core.api.security.impl,org.nuxeo.ecm.core.api.t\r\n ree,org.nuxeo.ecm.core.url,org.nuxeo.ecm.core.url.nxdoc,org.nuxeo.ecm.c\r\n ore.url.nxobj,org.nuxeo.ecm.core.utils\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.ecm.core.api\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nNuxeo-Component: OSGI-INF/DocumentAdapterService.xml, OSGI-INF/Repositor\r\n yManager.xml, OSGI-INF/DocumentValidationService.xml, OSGI-INF/Document\r\n ValidationService-activation.xml, OSGI-INF/blobmanager-service.xml, OSG\r\n I-INF/blob-holder-service-framework.xml, OSGI-INF/blob-holder-adapters-\r\n contrib.xml, OSGI-INF/pathsegment-service.xml, OSGI-INF/local-configura\r\n tion-service.xml, OSGI-INF/propertiesmapping-service.xml, OSGI-INF/thum\r\n bnail-adapter-contrib.xml, OSGI-INF/thumbnail-service.xml, OSGI-INF/cor\r\n e-api-properties.xml, OSGI-INF/legacy-acp-behavior.xml\r\nImport-Package: javax.security.auth,javax.security.auth.callback,javax.s\r\n ecurity.auth.login,javax.security.auth.spi,org.apache.commons.logging,o\r\n rg.nuxeo.common,org.nuxeo.common.collections,org.nuxeo.common.utils,org\r\n .nuxeo.common.xmap.annotation,org.nuxeo.ecm.core.schema,org.nuxeo.ecm.c\r\n ore.schema.types,org.nuxeo.ecm.core.schema.types.primitives,org.nuxeo.r\r\n untime,org.nuxeo.runtime.api,org.nuxeo.runtime.api.login,org.nuxeo.runt\r\n ime.model,org.nuxeo.runtime.services.streaming\r\nBundle-SymbolicName: org.nuxeo.ecm.core.api;singleton:=true\r\nEclipse-RegisterBuddy: org.nuxeo.runtime\r\nEclipse-ExtensibleAPI: true\r\n\r\n",
      "maxResolutionOrder": 125,
      "minResolutionOrder": 112,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-template-rendering-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.template.manager",
          "org.nuxeo.template.manager.api",
          "org.nuxeo.template.manager.jaxrs",
          "org.nuxeo.template.manager.jxls",
          "org.nuxeo.template.manager.xdocreport"
        ],
        "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template",
        "id": "grp:org.nuxeo.template",
        "name": "org.nuxeo.template",
        "parentIds": [
          "grp:org.nuxeo.template.rendering"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "\n# Nuxeo Template Rendering\n\n## About Nuxeo Template Rendering\n The Nuxeo Template Rendering is a set of plugins that provides a way to associate a Nuxeo Document with a Template. The Templates are used to render the associated document. Depending on the Template type, a different Template Processor will be used and the resulting rendering can be :\n\n   * an HTML document\n   * an XML document\n   * an OpenOffice document\n   * an MS Office document\n\n\nEach template processor has his own logic for rendering a Document from a Template :\n\n   * raw processing (FreeMarker or XSLT)\n   * merge fields replacement (MS Office / OpenOffice)\n\nThis project is an on-going project, supported by Nuxeo.\n\n## Sub-modules organization\nThe project is splitted in several sub modules :\n\n**nuxeo-template-rendering-api**\n\nAPI module containing all interfaces.\n\n**nuxeo-template-rendering-core**\n\nComponent, extension points and service implementation. This modules only contains template processors for FreeMarker and XSLT.\n\n**nuxeo-template-rendering-jsf**\n\nContribute UI level extensions: Layouts, Widgets, Views, Url bindings ...\n\n**nuxeo-template-rendering-xdocreport**\n\nContribute the OpenOffice / DocX processor based on XDocReport. This is by far the most powerfull processor.\nSee: http://code.google.com/p/xdocreport/\n\n**nuxeo-template-rendering-jxls**\n\nContribute a template processor for XLS files based on JXLS project. See: http://jxls.sourceforge.net/\n\n**nuxeo-template-rendering-jod**\n\nContribute JOD Report based template processor for ODT files. This renderer is historical and replaced by xdocreport that is more powerful.\n\n**nuxeo-template-rendering-jaxrs**\n\nContribute a JAXRS simple API as well as a new WebTemplate doc type that is based on a Note rather than a file.\n\n**nuxeo-template-rendering-sandbox**\n\nMisc code and extensions that are currently experimental.\n\n**nuxeo-template-rendering-package**\n\nBuilder for marketplace package.\n\n## Building\n\n### How to build Nuxeo Template Rendering\nBuild the Nuxeo Template Rendering add-on with Maven:\n\n```mvn clean install```\n\n## Deploying\nNuxeo Template Rendering is available as a package add-on [from the Nuxeo Marketplace] (https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-template-rendering)\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Template Rendering is available in our Documentation Center: http://doc.nuxeo.com/x/9YSo\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Template Rendering component: https://jira.nuxeo.com/browse/NXP/component/11405\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "e9e176463318c286d8f00955de4c43a2",
            "encoding": "UTF-8",
            "length": 3344,
            "mimeType": "text/plain",
            "name": "ReadMe.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.template.manager.api",
      "components": [],
      "fileName": "nuxeo-template-rendering-api-2023.7.9.jar",
      "groupId": "org.nuxeo.template.rendering",
      "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.api",
      "id": "org.nuxeo.template.manager.api",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM Template Rendering API\r\nBundle-SymbolicName: org.nuxeo.template.manager.api;singleton:=true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [
        "nuxeo-template-rendering"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "\n# Nuxeo Template Rendering\n\n## About Nuxeo Template Rendering\n The Nuxeo Template Rendering is a set of plugins that provides a way to associate a Nuxeo Document with a Template. The Templates are used to render the associated document. Depending on the Template type, a different Template Processor will be used and the resulting rendering can be :\n\n   * an HTML document\n   * an XML document\n   * an OpenOffice document\n   * an MS Office document\n\n\nEach template processor has his own logic for rendering a Document from a Template :\n\n   * raw processing (FreeMarker or XSLT)\n   * merge fields replacement (MS Office / OpenOffice)\n\nThis project is an on-going project, supported by Nuxeo.\n\n## Sub-modules organization\nThe project is splitted in several sub modules :\n\n**nuxeo-template-rendering-api**\n\nAPI module containing all interfaces.\n\n**nuxeo-template-rendering-core**\n\nComponent, extension points and service implementation. This modules only contains template processors for FreeMarker and XSLT.\n\n**nuxeo-template-rendering-jsf**\n\nContribute UI level extensions: Layouts, Widgets, Views, Url bindings ...\n\n**nuxeo-template-rendering-xdocreport**\n\nContribute the OpenOffice / DocX processor based on XDocReport. This is by far the most powerfull processor.\nSee: http://code.google.com/p/xdocreport/\n\n**nuxeo-template-rendering-jxls**\n\nContribute a template processor for XLS files based on JXLS project. See: http://jxls.sourceforge.net/\n\n**nuxeo-template-rendering-jod**\n\nContribute JOD Report based template processor for ODT files. This renderer is historical and replaced by xdocreport that is more powerful.\n\n**nuxeo-template-rendering-jaxrs**\n\nContribute a JAXRS simple API as well as a new WebTemplate doc type that is based on a Note rather than a file.\n\n**nuxeo-template-rendering-sandbox**\n\nMisc code and extensions that are currently experimental.\n\n**nuxeo-template-rendering-package**\n\nBuilder for marketplace package.\n\n## Building\n\n### How to build Nuxeo Template Rendering\nBuild the Nuxeo Template Rendering add-on with Maven:\n\n```mvn clean install```\n\n## Deploying\nNuxeo Template Rendering is available as a package add-on [from the Nuxeo Marketplace] (https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-template-rendering)\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Template Rendering is available in our Documentation Center: http://doc.nuxeo.com/x/9YSo\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Template Rendering component: https://jira.nuxeo.com/browse/NXP/component/11405\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "e9e176463318c286d8f00955de4c43a2",
        "encoding": "UTF-8",
        "length": 3344,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "readme": {
        "blobProviderId": "default",
        "content": "This modules contains API for nuxexo-template-rendering module.\n\nThe main interfaces are :\n\n## TemplateProcessorService\n\nThis is the service interface that is used to manipulate TemplateProcessors and associated documents.\n\n## TemplateProcessor\n\nInterface to be implemented by TemplateProcessor providers.\n\n## TemplateBasedDocument\n\nAdapter interface on a DocumentModel that is bound to one or more templates.\n\n## TemplateSourceDocument\n\nAdapter interface for the DocumentModel that can provide a template.\n",
        "digest": "ded5b065dfbde0790ac0d9a354f8df1e",
        "encoding": "UTF-8",
        "length": 507,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-retention",
      "artifactVersion": "2023.3.6",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "nuxeo-retention-web",
          "org.nuxeo.retention.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.retention",
        "id": "grp:org.nuxeo.retention",
        "name": "org.nuxeo.retention",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=nuxeo%2Fnuxeo-retention%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2023/)\n\n# Nuxeo Retention\n\nThe Nuxeo Retention addon adds the capability to create and attach retention rules to documents in order to perform advanced record management\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-retention-management/).\n\n## Context\nNuxeo Retention is an addon that can be plugged to Nuxeo. \n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo-lts) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Retention pipeline\n- **nuxeo-retention**: Backend contribution for Nuxeo Platform\n- **nuxeo-retention-package**: Builder for [nuxeo-retention](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-retention) marketplace package. This package will install all the necessary mechanisms to integrate Retention capabilities into Nuxeo\n- **nuxeo-retention-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n### Frontend Contribution\n\n`nuxeo-retention-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `v14`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Retention UI, it is assumed that there is a Nuxeo server running with Nuxeo Retention package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Retention integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/) for each maintenance branch and for each opened PR. \n\nThe following features are available:\n- Each PR merge to _lts-2021_/_lts-2023_ branch will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Retention manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).",
            "digest": "34dbcd043cd41c527a2929521f1fa815",
            "encoding": "UTF-8",
            "length": 6308,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.retention.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.types/Contributions/org.nuxeo.retention.types--schema",
              "id": "org.nuxeo.retention.types--schema",
              "registrationOrder": 45,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"retention_rule\" prefix=\"retention_rule\" src=\"schemas/retention_rule.xsd\"/>\n    <schema name=\"retention_definition\" prefix=\"retention_def\" src=\"schemas/retention_definition.xsd\"/>\n    <schema name=\"record\" prefix=\"record\" src=\"schemas/record.xsd\"/>\n    <schema name=\"retention_search\" prefix=\"retention_search\" src=\"schemas/retention_search.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.types/Contributions/org.nuxeo.retention.types--doctype",
              "id": "org.nuxeo.retention.types--doctype",
              "registrationOrder": 43,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <doctype extends=\"SavedSearch\" name=\"RetentionSearch\">\n      <facet name=\"ContentViewDisplay\"/>\n      <schema name=\"retention_search\"/>\n    </doctype>\n\n    <facet name=\"RetentionRule\" perDocumentQuery=\"false\">\n      <schema name=\"retention_rule\"/>\n      <schema name=\"retention_definition\"/>\n    </facet>\n\n    <facet name=\"Record\">\n      <schema name=\"record\"/>\n    </facet>\n\n    <doctype extends=\"Document\" name=\"RetentionRule\">\n      <schema name=\"uid\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <facet name=\"NXTag\"/>\n      <facet name=\"RetentionRule\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"common\"/>\n    </doctype>\n\n    <doctype extends=\"OrderedFolder\" name=\"RetentionRules\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <facet name=\"HiddenInNavigation\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <subtypes>\n        <type>RetentionRule</type>\n      </subtypes>\n    </doctype>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.types/Contributions/org.nuxeo.retention.types--types",
              "id": "org.nuxeo.retention.types--types",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n    <type id=\"RetentionRules\">\n      <label>Retention Rules</label>\n      <icon>/icons/ordered_folder.png</icon>\n      <bigIcon>/icons/ordered_folder_100.png</bigIcon>\n    </type>\n    <type id=\"RetentionRule\">\n      <label>Retention Rules</label>\n      <icon>/icons/retention_rule.png</icon>\n      <bigIcon>/icons/retention_rule.png</bigIcon>\n    </type>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.types",
          "name": "org.nuxeo.retention.types",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 725,
          "services": [],
          "startOrder": 717,
          "version": "2023.3.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.types\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"retention_rule\" src=\"schemas/retention_rule.xsd\"\n      prefix=\"retention_rule\" />\n    <schema name=\"retention_definition\" src=\"schemas/retention_definition.xsd\"\n      prefix=\"retention_def\" />\n    <schema name=\"record\" src=\"schemas/record.xsd\" prefix=\"record\" />\n    <schema name=\"retention_search\" src=\"schemas/retention_search.xsd\"\n      prefix=\"retention_search\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <doctype name=\"RetentionSearch\" extends=\"SavedSearch\">\n      <facet name=\"ContentViewDisplay\" />\n      <schema name=\"retention_search\" />\n    </doctype>\n\n    <facet name=\"RetentionRule\" perDocumentQuery=\"false\">\n      <schema name=\"retention_rule\" />\n      <schema name=\"retention_definition\" />\n    </facet>\n\n    <facet name=\"Record\">\n      <schema name=\"record\" />\n    </facet>\n\n    <doctype name=\"RetentionRule\" extends=\"Document\">\n      <schema name=\"uid\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"NotCollectionMember\" />\n      <facet name=\"NXTag\" />\n      <facet name=\"RetentionRule\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"common\" />\n    </doctype>\n\n    <doctype name=\"RetentionRules\" extends=\"OrderedFolder\">\n      <facet name=\"SuperSpace\"/>\n      <facet name=\"HiddenInCreation\" />\n      <facet name=\"HiddenInNavigation\" />\n      <facet name=\"NotCollectionMember\" />\n      <subtypes>\n        <type>RetentionRule</type>\n      </subtypes>\n    </doctype>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n    <type id=\"RetentionRules\">\n      <label>Retention Rules</label>\n      <icon>/icons/ordered_folder.png</icon>\n      <bigIcon>/icons/ordered_folder_100.png</bigIcon>\n    </type>\n    <type id=\"RetentionRule\">\n      <label>Retention Rules</label>\n      <icon>/icons/retention_rule.png</icon>\n      <bigIcon>/icons/retention_rule.png</bigIcon>\n    </type>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-core-types.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService--factoryBinding",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.contentTemplate/Contributions/org.nuxeo.retention.contentTemplate--factoryBinding",
              "id": "org.nuxeo.retention.contentTemplate--factoryBinding",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "name": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"factoryBinding\" target=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\">\n\n    <factoryBinding append=\"true\" factoryName=\"SimpleTemplateRootFactory\" name=\"RetentionRulesFactory\" targetType=\"Root\">\n      <template>\n        <templateItem id=\"RetentionRules\" title=\"RetentionRules\" typeName=\"RetentionRules\">\n          <acl>\n            <ace granted=\"true\" permission=\"Everything\" principal=\"Administrator\"/>\n            <ace granted=\"true\" permission=\"Everything\" principal=\"administrators\"/>\n            <ace granted=\"true\" permission=\"Everything\" principal=\"RecordManager\"/>\n            <ace granted=\"false\" permission=\"Everything\" principal=\"Everyone\"/>\n          </acl>\n        </templateItem>\n      </template>\n    </factoryBinding>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.contentTemplate",
          "name": "org.nuxeo.retention.contentTemplate",
          "requirements": [
            "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib"
          ],
          "resolutionOrder": 726,
          "services": [],
          "startOrder": 711,
          "version": "2023.3.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.contentTemplate\">\n\n  <require>\n    org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib\n  </require>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\"\n    point=\"factoryBinding\">\n\n    <factoryBinding name=\"RetentionRulesFactory\" factoryName=\"SimpleTemplateRootFactory\"\n      targetType=\"Root\" append=\"true\">\n      <template>\n        <templateItem typeName=\"RetentionRules\" id=\"RetentionRules\" title=\"RetentionRules\" >\n          <acl>\n            <ace principal=\"Administrator\" permission=\"Everything\"\n              granted=\"true\" />\n            <ace principal=\"administrators\" permission=\"Everything\"\n              granted=\"true\" />\n            <ace principal=\"RecordManager\" permission=\"Everything\"\n              granted=\"true\" />\n            <ace principal=\"Everyone\" permission=\"Everything\" granted=\"false\" />\n          </acl>\n        </templateItem>\n      </template>\n    </factoryBinding>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-content-template.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.operations/Contributions/org.nuxeo.retention.operations--operations",
              "id": "org.nuxeo.retention.operations--operations",
              "registrationOrder": 32,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.retention.operations.HoldDocument\"/>\n    <operation class=\"org.nuxeo.retention.operations.RetainDocument\"/>\n    <operation class=\"org.nuxeo.retention.operations.UnholdDocument\"/>\n\n    <operation class=\"org.nuxeo.retention.operations.AttachRetentionRule\"/>\n    <operation class=\"org.nuxeo.retention.operations.UnattachRetentionRule\"/>\n\n    <operation class=\"org.nuxeo.retention.operations.FireRetentionEvent\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.operations",
          "name": "org.nuxeo.retention.operations",
          "requirements": [],
          "resolutionOrder": 727,
          "services": [],
          "startOrder": 713,
          "version": "2023.3.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.operations\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.retention.operations.HoldDocument\" />\n    <operation class=\"org.nuxeo.retention.operations.RetainDocument\" />\n    <operation class=\"org.nuxeo.retention.operations.UnholdDocument\" />\n\n    <operation class=\"org.nuxeo.retention.operations.AttachRetentionRule\" />\n    <operation class=\"org.nuxeo.retention.operations.UnattachRetentionRule\" />\n\n    <operation class=\"org.nuxeo.retention.operations.FireRetentionEvent\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-operations.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.vocabularies/Contributions/org.nuxeo.retention.vocabularies--directories",
              "id": "org.nuxeo.retention.vocabularies--directories",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n    <directory extends=\"template-vocabulary\" name=\"RetentionEnd\">\n      <dataFile>directories/retention_end.csv</dataFile>\n    </directory>\n    <directory extends=\"template-vocabulary\" name=\"RetentionEvent\">\n      <dataFile>directories/retention_event.csv</dataFile>\n    </directory>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.vocabularies",
          "name": "org.nuxeo.retention.vocabularies",
          "requirements": [
            "org.nuxeo.ecm.directories"
          ],
          "resolutionOrder": 728,
          "services": [],
          "startOrder": 718,
          "version": "2023.3.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.vocabularies\" version=\"1.0\">\n  \n  <require>org.nuxeo.ecm.directories</require>\n  \n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n    <directory extends=\"template-vocabulary\" name=\"RetentionEnd\">\n      <dataFile>directories/retention_end.csv</dataFile>\n    </directory>\n    <directory extends=\"template-vocabulary\" name=\"RetentionEvent\">\n      <dataFile>directories/retention_event.csv</dataFile>\n    </directory>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-vocabularies.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.retention.service.RetentionManagerImpl",
          "declaredStartOrder": 98,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.RetentionService",
          "name": "org.nuxeo.retention.RetentionService",
          "requirements": [
            "org.nuxeo.ecm.platform.usermanager.UserManagerImpl",
            "org.nuxeo.retention.vocabularies",
            "org.nuxeo.ecm.platform.usermanager.UserService"
          ],
          "resolutionOrder": 729,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.retention.RetentionService",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.RetentionService/Services/org.nuxeo.retention.service.RetentionManager",
              "id": "org.nuxeo.retention.service.RetentionManager",
              "overriden": false,
              "version": "2023.3.6"
            }
          ],
          "startOrder": 770,
          "version": "2023.3.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.RetentionService\">\n  <require>org.nuxeo.ecm.platform.usermanager.UserService</require>\n  <require>org.nuxeo.ecm.platform.usermanager.UserManagerImpl</require>\n  <require>org.nuxeo.retention.vocabularies</require>\n\n  <implementation\n    class=\"org.nuxeo.retention.service.RetentionManagerImpl\" />\n  <service>\n    <provide\n      interface=\"org.nuxeo.retention.service.RetentionManager\" />\n  </service>\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-service-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.adapters/Contributions/org.nuxeo.retention.adapters--adapters",
              "id": "org.nuxeo.retention.adapters--adapters",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.retention.adapters.Record\" factory=\"org.nuxeo.retention.adapters.RetentionAdapterFactory\"/>\n    <adapter class=\"org.nuxeo.retention.adapters.RetentionRule\" factory=\"org.nuxeo.retention.adapters.RetentionAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.adapters",
          "name": "org.nuxeo.retention.adapters",
          "requirements": [],
          "resolutionOrder": 730,
          "services": [],
          "startOrder": 709,
          "version": "2023.3.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.adapters\">\n\n  <extension\n    target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.retention.adapters.Record\"\n      factory=\"org.nuxeo.retention.adapters.RetentionAdapterFactory\" />\n    <adapter class=\"org.nuxeo.retention.adapters.RetentionRule\"\n      factory=\"org.nuxeo.retention.adapters.RetentionAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-adapters.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.listeners/Contributions/org.nuxeo.retention.listeners--listener",
              "id": "org.nuxeo.retention.listeners--listener",
              "registrationOrder": 44,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.retention.listeners.RetentionDocumentEventListener\" name=\"retentionDocumentEventListener\" postCommit=\"true\">\n    </listener>\n    <listener async=\"true\" class=\"org.nuxeo.retention.listeners.RetentionBusinessEventListener\" name=\"retentionBusinessEventListener\" postCommit=\"true\">\n    </listener>\n    <listener async=\"true\" class=\"org.nuxeo.retention.listeners.RetentionExpiredListener\" name=\"retentionExpiredListener\" postCommit=\"true\">\n      <event>retentionExpired</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.listeners",
          "name": "org.nuxeo.retention.listeners",
          "requirements": [
            "org.nuxeo.retention.RetentionService"
          ],
          "resolutionOrder": 731,
          "services": [],
          "startOrder": 712,
          "version": "2023.3.6",
          "xmlFileContent": "<component name=\"org.nuxeo.retention.listeners\">\n\n  <require>org.nuxeo.retention.RetentionService</require>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"retentionDocumentEventListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.retention.listeners.RetentionDocumentEventListener\">\n    </listener>\n    <listener name=\"retentionBusinessEventListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.retention.listeners.RetentionBusinessEventListener\">\n    </listener>\n    <listener name=\"retentionExpiredListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.retention.listeners.RetentionExpiredListener\">\n      <event>retentionExpired</event>\n    </listener>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-listeners.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.pageprovider.contrib/Contributions/org.nuxeo.retention.pageprovider.contrib--providers",
              "id": "org.nuxeo.retention.pageprovider.contrib--providers",
              "registrationOrder": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"manual_retention_rule_suggestion\">\n      <whereClause>\n        <predicate operator=\"=\" parameter=\"retention_rule:docTypes\">\n          <field name=\"docType\"/>\n        </predicate>\n        <fixedPart escapeParameters=\"true\" quoteParameters=\"false\"> dc:title ILIKE '?%' AND ecm:mixinType =\n          'RetentionRule' AND retention_rule:enabled = 1 AND\n          ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <sort ascending=\"true\" column=\"ecm:pos\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"active_retention_rule\">\n      <pattern escapeParameters=\"true\" quoteParameters=\"false\"> SELECT\n        * FROM Document WHERE ecm:mixinType = 'RetentionRule' AND\n        retention_rule:enabled = 1 AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"ecm:pos\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\" name=\"retention_search\">\n      <searchDocumentType>RetentionSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          file:content/name IS NOT NULL\n          AND ecm:isVersion = 0\n          AND ecm:mixinType != 'HiddenInNavigation'\n        </fixedPart>\n        <predicate operator=\"FULLTEXT\" parameter=\"ecm:fulltext\">\n          <field name=\"ecm_fulltext\" schema=\"retention_search\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"dc:creator\">\n          <field name=\"dc_creator\" schema=\"retention_search\"/>\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"doc_type_agg\" parameter=\"ecm:primaryType\" type=\"terms\">\n          <field name=\"doc_type_agg\" schema=\"retention_search\"/>\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"rules_agg\" parameter=\"record:ruleIds\" type=\"terms\">\n          <field name=\"rules_agg\" schema=\"retention_search\"/>\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"record_retain_agg\" parameter=\"record:retainUntil\" type=\"date_range\">\n          <field name=\"record_retain_agg\" schema=\"retention_search\"/>\n          <properties>\n            <property name=\"format\">\"dd-MM-yyyy\"</property>\n          </properties>\n          <dateRanges>\n            <dateRange fromDate=\"now-24H\" key=\"last24h\" toDate=\"now\"/>\n            <dateRange fromDate=\"now-7d\" key=\"lastWeek\" toDate=\"now-24H\"/>\n            <dateRange fromDate=\"now-1M\" key=\"lastMonth\" toDate=\"now-7d\"/>\n            <dateRange fromDate=\"now-1y\" key=\"lastYear\" toDate=\"now-1M\"/>\n            <dateRange key=\"priorToLastYear\" toDate=\"now-1y\"/>\n          </dateRanges>\n        </aggregate>\n        <aggregate id=\"ecm_retain_agg\" parameter=\"ecm:retainUntil\" type=\"date_range\">\n          <field name=\"ecm_retain_agg\" schema=\"retention_search\"/>\n          <properties>\n            <property name=\"format\">\"dd-MM-yyyy\"</property>\n          </properties>\n          <dateRanges>\n            <dateRange fromDate=\"now\" key=\"next24Hours\" toDate=\"now+24H\"/>\n            <dateRange fromDate=\"now+24H\" key=\"beforeAWeek\" toDate=\"now+7d\"/>\n            <dateRange fromDate=\"now+7d\" key=\"beforeAMonth\" toDate=\"now+1M\"/>\n            <dateRange fromDate=\"now+1M\" key=\"beforeAYear\" toDate=\"now+1y\"/>\n            <dateRange fromDate=\"now+1y\" key=\"afterAYear\" toDate=\"now+1000y\"/>\n            <dateRange fromDate=\"now+1000y\" key=\"indeterminate\"/>\n          </dateRanges>\n        </aggregate>\n      </aggregates>\n      <sort ascending=\"true\" column=\"ecm:retainUntil\"/>\n      <quickFilters>\n        <quickFilter name=\"withoutRule\">\n          <clause>record:ruleIds/* IS NULL</clause>\n          <clause>ecm:retainUntil IS NULL</clause>\n        </quickFilter>\n        <quickFilter name=\"withRule\">\n          <clause>record:ruleIds/* IS NOT NULL</clause>\n          <clause>ecm:retainUntil IS NOT NULL</clause>\n        </quickFilter>\n        <quickFilter name=\"hasLegalHold\">\n          <clause>ecm:hasLegalHold = 1</clause>\n        </quickFilter>\n        <quickFilter name=\"hasNotLegalHold\">\n          <clause>ecm:hasLegalHold = 0</clause>\n        </quickFilter>\n        <quickFilter name=\"exceptTrashed\">\n          <clause>ecm:isTrashed = 0</clause>\n        </quickFilter>\n      </quickFilters>\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.pageprovider.contrib",
          "name": "org.nuxeo.retention.pageprovider.contrib",
          "requirements": [],
          "resolutionOrder": 732,
          "services": [],
          "startOrder": 714,
          "version": "2023.3.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.pageprovider.contrib\">\n  <extension\n    target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider\n      name=\"manual_retention_rule_suggestion\">\n      <whereClause>\n        <predicate parameter=\"retention_rule:docTypes\" operator=\"=\">\n          <field name=\"docType\" />\n        </predicate>\n        <fixedPart quoteParameters=\"false\" escapeParameters=\"true\"> dc:title ILIKE '?%' AND ecm:mixinType =\n          'RetentionRule' AND retention_rule:enabled = 1 AND\n          ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <sort column=\"ecm:pos\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider\n      name=\"active_retention_rule\">\n      <pattern quoteParameters=\"false\" escapeParameters=\"true\"> SELECT\n        * FROM Document WHERE ecm:mixinType = 'RetentionRule' AND\n        retention_rule:enabled = 1 AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"ecm:pos\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <genericPageProvider name=\"retention_search\"\n      class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\">\n      <searchDocumentType>RetentionSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          file:content/name IS NOT NULL\n          AND ecm:isVersion = 0\n          AND ecm:mixinType != 'HiddenInNavigation'\n        </fixedPart>\n        <predicate parameter=\"ecm:fulltext\" operator=\"FULLTEXT\">\n          <field schema=\"retention_search\" name=\"ecm_fulltext\" />\n        </predicate>\n        <predicate parameter=\"dc:creator\" operator=\"IN\">\n          <field schema=\"retention_search\" name=\"dc_creator\" />\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"doc_type_agg\" type=\"terms\" parameter=\"ecm:primaryType\">\n          <field schema=\"retention_search\" name=\"doc_type_agg\" />\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"rules_agg\" type=\"terms\" parameter=\"record:ruleIds\">\n          <field schema=\"retention_search\" name=\"rules_agg\" />\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"record_retain_agg\" type=\"date_range\" parameter=\"record:retainUntil\">\n          <field schema=\"retention_search\" name=\"record_retain_agg\" />\n          <properties>\n            <property name=\"format\">\"dd-MM-yyyy\"</property>\n          </properties>\n          <dateRanges>\n            <dateRange key=\"last24h\" fromDate=\"now-24H\" toDate=\"now\"/>\n            <dateRange key=\"lastWeek\" fromDate=\"now-7d\" toDate=\"now-24H\"/>\n            <dateRange key=\"lastMonth\" fromDate=\"now-1M\" toDate=\"now-7d\"/>\n            <dateRange key=\"lastYear\" fromDate=\"now-1y\" toDate=\"now-1M\"/>\n            <dateRange key=\"priorToLastYear\" toDate=\"now-1y\"/>\n          </dateRanges>\n        </aggregate>\n        <aggregate id=\"ecm_retain_agg\" type=\"date_range\" parameter=\"ecm:retainUntil\">\n          <field schema=\"retention_search\" name=\"ecm_retain_agg\" />\n          <properties>\n            <property name=\"format\">\"dd-MM-yyyy\"</property>\n          </properties>\n          <dateRanges>\n            <dateRange key=\"next24Hours\" fromDate=\"now\" toDate=\"now+24H\"/>\n            <dateRange key=\"beforeAWeek\" fromDate=\"now+24H\" toDate=\"now+7d\"/>\n            <dateRange key=\"beforeAMonth\" fromDate=\"now+7d\" toDate=\"now+1M\"/>\n            <dateRange key=\"beforeAYear\" fromDate=\"now+1M\" toDate=\"now+1y\"/>\n            <dateRange key=\"afterAYear\" fromDate=\"now+1y\" toDate=\"now+1000y\"/>\n            <dateRange key=\"indeterminate\" fromDate=\"now+1000y\"/>\n          </dateRanges>\n        </aggregate>\n      </aggregates>\n      <sort column=\"ecm:retainUntil\" ascending=\"true\" />\n      <quickFilters>\n        <quickFilter name=\"withoutRule\">\n          <clause>record:ruleIds/* IS NULL</clause>\n          <clause>ecm:retainUntil IS NULL</clause>\n        </quickFilter>\n        <quickFilter name=\"withRule\">\n          <clause>record:ruleIds/* IS NOT NULL</clause>\n          <clause>ecm:retainUntil IS NOT NULL</clause>\n        </quickFilter>\n        <quickFilter name=\"hasLegalHold\">\n          <clause>ecm:hasLegalHold = 1</clause>\n        </quickFilter>\n        <quickFilter name=\"hasNotLegalHold\">\n          <clause>ecm:hasLegalHold = 0</clause>\n        </quickFilter>\n        <quickFilter name=\"exceptTrashed\">\n          <clause>ecm:isTrashed = 0</clause>\n        </quickFilter>\n      </quickFilters>\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-pageproviders.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.schedulers/Contributions/org.nuxeo.retention.schedulers--schedule",
              "id": "org.nuxeo.retention.schedulers--schedule",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "name": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\">\n    <schedule id=\"findRetentionExpired\">\n      <eventId>findRetentionExpired</eventId>\n      <!-- every hour -->\n      <cronExpression>0 0 * * * ?</cronExpression>\n    </schedule>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.schedulers",
          "name": "org.nuxeo.retention.schedulers",
          "requirements": [],
          "resolutionOrder": 733,
          "services": [],
          "startOrder": 715,
          "version": "2023.3.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.schedulers\">\n    \n  <extension target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\" point=\"schedule\">\n    <schedule id=\"findRetentionExpired\">\n      <eventId>findRetentionExpired</eventId>\n      <!-- every hour -->\n      <cronExpression>0 0 * * * ?</cronExpression>\n    </schedule>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-schedulers.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissions",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.security/Contributions/org.nuxeo.retention.security--permissions",
              "id": "org.nuxeo.retention.security--permissions",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"permissions\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <permission name=\"ManageRecord\">\n      <include>ReadWrite</include>\n      <include>MakeRecord</include>\n      <include>SetRetention</include>\n      <include>UnsetRetention</include>\n    </permission>\n\n    <permission name=\"ManageLegalHold\">\n      <include>ReadWrite</include>\n      <include>MakeRecord</include>\n      <include>ManageLegalHold</include>\n    </permission>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.security/Contributions/org.nuxeo.retention.security--permissionsVisibility",
              "id": "org.nuxeo.retention.security--permissionsVisibility",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"permissionsVisibility\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <visibility>\n      <item order=\"70\" show=\"true\">ManageRecord</item>\n      <item order=\"71\" show=\"true\">ManageLegalHold</item>\n    </visibility>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.security",
          "name": "org.nuxeo.retention.security",
          "requirements": [
            "org.nuxeo.ecm.core.security.defaultPermissions"
          ],
          "resolutionOrder": 734,
          "services": [],
          "startOrder": 716,
          "version": "2023.3.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.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=\"ManageRecord\">\n      <include>ReadWrite</include>\n      <include>MakeRecord</include>\n      <include>SetRetention</include>\n      <include>UnsetRetention</include>\n    </permission>\n\n    <permission name=\"ManageLegalHold\">\n      <include>ReadWrite</include>\n      <include>MakeRecord</include>\n      <include>ManageLegalHold</include>\n    </permission>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissionsVisibility\">\n\n    <visibility>\n      <item show=\"true\" order=\"70\">ManageRecord</item>\n      <item show=\"true\" order=\"71\">ManageLegalHold</item>\n    </visibility>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-security.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.actions/Contributions/org.nuxeo.retention.actions--actions",
              "id": "org.nuxeo.retention.actions--actions",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"20\" bucketSize=\"100\" inputStream=\"retention/holdDocumentsAction\" name=\"holdDocumentsAction\"/>\n    <action batchSize=\"20\" bucketSize=\"100\" inputStream=\"retention/unholdDocumentsAction\" name=\"unholdDocumentsAction\"/>\n    <action batchSize=\"20\" bucketSize=\"100\" inputStream=\"retention/attachRetentionRule\" name=\"attachRetentionRule\"/>\n    <action batchSize=\"20\" bucketSize=\"100\" inputStream=\"retention/evalInputEventBasedRule\" name=\"evalInputEventBasedRule\"/>\n    <action batchSize=\"20\" bucketSize=\"100\" inputStream=\"retention/processRetentionEvent\" name=\"processRetentionEvent\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.actions/Contributions/org.nuxeo.retention.actions--streamProcessor",
              "id": "org.nuxeo.retention.actions--streamProcessor",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.retention.actions.HoldDocumentsAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"holdDocumentsAction\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.retention.actions.UnholdDocumentsAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"unholdDocumentsAction\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.retention.actions.AttachRetentionRuleAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"attachRetentionRule\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.retention.actions.EvalInputEventBasedRuleAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"evalInputEventBasedRule\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.retention.actions.ProcessRetentionEventAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"processRetentionEvent\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.actions",
          "name": "org.nuxeo.retention.actions",
          "requirements": [],
          "resolutionOrder": 735,
          "services": [],
          "startOrder": 708,
          "version": "2023.3.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.retention.actions\">\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"holdDocumentsAction\" inputStream=\"retention/holdDocumentsAction\" bucketSize=\"100\" batchSize=\"20\" />\n    <action name=\"unholdDocumentsAction\" inputStream=\"retention/unholdDocumentsAction\" bucketSize=\"100\" batchSize=\"20\" />\n    <action name=\"attachRetentionRule\" inputStream=\"retention/attachRetentionRule\" bucketSize=\"100\" batchSize=\"20\" />\n    <action name=\"evalInputEventBasedRule\" inputStream=\"retention/evalInputEventBasedRule\" bucketSize=\"100\" batchSize=\"20\" />\n    <action name=\"processRetentionEvent\" inputStream=\"retention/processRetentionEvent\" bucketSize=\"100\" batchSize=\"20\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"holdDocumentsAction\" class=\"org.nuxeo.retention.actions.HoldDocumentsAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.holdDocumentsAction.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.holdDocumentsAction.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"unholdDocumentsAction\" class=\"org.nuxeo.retention.actions.UnholdDocumentsAction\"\n        defaultConcurrency=\"${nuxeo.bulk.action.unholdDocumentsAction.defaultConcurrency:=2}\"\n        defaultPartitions=\"${nuxeo.bulk.action.unholdDocumentsAction.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"attachRetentionRule\" class=\"org.nuxeo.retention.actions.AttachRetentionRuleAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.attachRetentionRule.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.attachRetentionRule.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"evalInputEventBasedRule\" class=\"org.nuxeo.retention.actions.EvalInputEventBasedRuleAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.evalInputEventBasedRule.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.evalInputEventBasedRule.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"processRetentionEvent\" class=\"org.nuxeo.retention.actions.ProcessRetentionEventAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.processRetentionEvent.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.processRetentionEvent.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-actions.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.audit/Contributions/org.nuxeo.retention.audit--event",
              "id": "org.nuxeo.retention.audit--event",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.3.6",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <event name=\"retentionRuleAttached\"/>\n    <event name=\"afterSetRetention\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retainUntil}\" key=\"retainUntil\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"afterExtendRetention\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retainUntil}\" key=\"retainUntil\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"afterUnsetRetention\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.audit",
          "name": "org.nuxeo.retention.audit",
          "requirements": [],
          "resolutionOrder": 736,
          "services": [],
          "startOrder": 710,
          "version": "2023.3.6",
          "xmlFileContent": "<component name=\"org.nuxeo.retention.audit\" version=\"1.0\">\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"event\">\n    <event name=\"retentionRuleAttached\" />\n    <event name=\"afterSetRetention\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retainUntil}\" key=\"retainUntil\" />\n      </extendedInfos>\n    </event>\n    <event name=\"afterExtendRetention\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retainUntil}\" key=\"retainUntil\" />\n      </extendedInfos>\n    </event>\n    <event name=\"afterUnsetRetention\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/retention-audit.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-retention-2023.3.6.jar",
      "groupId": "org.nuxeo.retention",
      "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core",
      "id": "org.nuxeo.retention.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-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: nuxeo-retention-service\r\nBundle-SymbolicName: org.nuxeo.retention.core;singleton=true\r\nNuxeo-Component: OSGI-INF/retention-service-framework.xml,OSGI-INF/reten\r\n tion-core-types.xml,OSGI-INF/retention-content-template.xml,OSGI-INF/re\r\n tention-operations.xml,OSGI-INF/retention-vocabularies.xml,OSGI-INF/ret\r\n ention-adapters.xml,OSGI-INF/retention-listeners.xml,OSGI-INF/retention\r\n -pageproviders.xml,OSGI-INF/retention-schedulers.xml,OSGI-INF/retention\r\n -security.xml,OSGI-INF/retention-actions.xml,OSGI-INF/retention-audit.x\r\n ml\r\n\r\n",
      "maxResolutionOrder": 736,
      "minResolutionOrder": 725,
      "packages": [
        "nuxeo-retention"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=nuxeo%2Fnuxeo-retention%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2023/)\n\n# Nuxeo Retention\n\nThe Nuxeo Retention addon adds the capability to create and attach retention rules to documents in order to perform advanced record management\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-retention-management/).\n\n## Context\nNuxeo Retention is an addon that can be plugged to Nuxeo. \n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo-lts) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Retention pipeline\n- **nuxeo-retention**: Backend contribution for Nuxeo Platform\n- **nuxeo-retention-package**: Builder for [nuxeo-retention](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-retention) marketplace package. This package will install all the necessary mechanisms to integrate Retention capabilities into Nuxeo\n- **nuxeo-retention-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n### Frontend Contribution\n\n`nuxeo-retention-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `v14`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Retention UI, it is assumed that there is a Nuxeo server running with Nuxeo Retention package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Retention integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/) for each maintenance branch and for each opened PR. \n\nThe following features are available:\n- Each PR merge to _lts-2021_/_lts-2023_ branch will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Retention manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).",
        "digest": "34dbcd043cd41c527a2929521f1fa815",
        "encoding": "UTF-8",
        "length": 6308,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.3.6"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-webapp-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.webapp.base",
          "org.nuxeo.ecm.webapp.core",
          "org.nuxeo.ecm.webapp.ui"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp",
        "id": "grp:org.nuxeo.ecm.webapp",
        "name": "org.nuxeo.ecm.webapp",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.webapp.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.theme.nuxeo.webapp/Contributions/org.nuxeo.theme.nuxeo.webapp--resources",
              "id": "org.nuxeo.theme.nuxeo.webapp--resources",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n\n    <!-- JSF resources -->\n    <resource name=\"jsf.js\" target=\"bodystart\" type=\"jsfjs\">\n      <uri>javax.faces:jsf.js</uri>\n    </resource>\n    <resource name=\"fixjsfviewstate.js\" target=\"bodystart\" type=\"jsfjs\">\n      <uri>org.nuxeo.jsf:fixviewstate.min.js</uri>\n      <require>jsf.js</require>\n    </resource>\n    <resource name=\"fixmultipartajax.js\" target=\"bodystart\" type=\"jsfjs\">\n      <uri>org.nuxeo.jsf:fixmultipartajax.min.js</uri>\n      <require>jsf.js</require>\n    </resource>\n    <resource name=\"richfaces-jquery.js\" target=\"bodystart\" type=\"jsfjs\">\n      <uri>org.richfaces:jquery.js</uri>\n    </resource>\n    <resource name=\"jquery-migrate.js\">\n      <uri>/scripts/jquery-migrate-1.4.1.js</uri>\n    </resource>\n    <resource name=\"richfaces.js\" target=\"bodystart\" type=\"jsfjs\">\n      <uri>org.richfaces:richfaces.js</uri>\n      <require>jsf.js</require>\n    </resource>\n    <resource name=\"richfaces-queue.js\" target=\"bodystart\" type=\"jsfjs\">\n      <uri>org.richfaces:richfaces-queue.js</uri>\n      <require>richfaces.js</require>\n    </resource>\n    <resource name=\"richfaces-base-component.js\" target=\"bodystart\" type=\"jsfjs\">\n      <uri>org.richfaces:richfaces-base-component.js</uri>\n      <require>richfaces.js</require>\n    </resource>\n    <resource name=\"richfaces-fileupload.ecss\" target=\"bodystart\" type=\"jsfcss\">\n      <uri>org.richfaces:fileupload.ecss</uri>\n      <require>richfaces.js</require>\n    </resource>\n    <resource name=\"richfaces-fileupload.js\" target=\"bodystart\" type=\"jsfjs\">\n      <uri>org.richfaces:fileupload.js</uri>\n      <require>richfaces-fileupload.ecss</require>\n      <require>richfaces.js</require>\n    </resource>\n    <resource name=\"widget-utils.js\" type=\"jsfjs\">\n      <uri>org.nuxeo:widget-utils.min.js</uri>\n      <require>richfaces-queue.js</require>\n    </resource>\n    <resource name=\"select2.js\" type=\"jsfjs\">\n      <uri>org.nuxeo.select2:select2.min.js</uri>\n      <require>widget-utils.js</require>\n    </resource>\n\n    <!-- Seam 1.0.1.GA -->\n    <resource name=\"seam-remote.js\">\n      <uri>/scripts/seam-remote.js</uri>\n    </resource>\n\n    <resource name=\"static-styles.css\">\n      <uri>/css/static-styles.css</uri>\n    </resource>\n    <resource name=\"screen.css\">\n      <uri>/css/screen.css</uri>\n    </resource>\n    <resource name=\"foldable-box.js\">\n      <uri>/scripts/foldable-box.js</uri>\n    </resource>\n    <resource name=\"utils.js\">\n      <uri>/scripts/utils.js</uri>\n    </resource>\n    <resource name=\"tableSelections.js\">\n      <uri>/scripts/tableSelections.js</uri>\n    </resource>\n    <resource name=\"contextmenu.js\">\n      <uri>/scripts/contextmenu.js</uri>\n    </resource>\n    <resource name=\"DragAndDrop.js\">\n      <uri>/scripts/DragAndDrop.js</uri>\n    </resource>\n    <resource name=\"hideableAdminMessage.js\">\n      <uri>/scripts/hideableAdminMessage.js</uri>\n    </resource>\n    <!-- jquery cookie plugin -->\n    <resource name=\"jquery.tools.cookie.js\">\n      <uri>/scripts/jquery/cookie.js</uri>\n    </resource>\n    <!-- Fancybox -->\n    <resource name=\"jquery.fancybox.js\">\n      <uri>/scripts/jquery/jquery.fancybox.js</uri>\n    </resource>\n    <resource name=\"jquery.fancybox.style.css\">\n      <uri>/css/jquery.fancybox.css</uri>\n    </resource>\n    <resource name=\"fancybox-popup-utils.js\">\n      <uri>/scripts/fancybox-popup-utils.js</uri>\n    </resource>\n    <!-- Hotkeys (e.g. used to focus the search box using '/') -->\n    <resource name=\"jquery.hotkeys.js\">\n      <uri>/scripts/jquery/jquery.hotkeys.js</uri>\n    </resource>\n    <!-- Helpers for focus on first input of a form -->\n    <resource name=\"jquery.tools.focusfirst.js\">\n      <uri>/scripts/jquery/jquery.tools.focusfirst.js</uri>\n    </resource>\n    <!-- Workaround for jQuery and Sarissa library conflict on IE -->\n    <resource name=\"sarissa-ie-workaround.js\">\n      <uri>/scripts/sarissa-ie-workaround.js</uri>\n    </resource>\n    <!-- Mustache -->\n    <resource name=\"mustache.js\">\n      <uri>/scripts/mustache/mustache.js</uri>\n    </resource>\n    <!-- Simple Access Key helper -->\n    <resource name=\"accessKey.js\">\n      <uri>/scripts/accessKey.js</uri>\n    </resource>\n    <!-- Moment.js -->\n    <resource name=\"moment.js\">\n      <uri>/scripts/moment.min-1.5.0nx.js</uri>\n    </resource>\n    <!-- jquery-ui resources: order plugins according to their dependencies. -->\n    <resource name=\"jquery.ui.core.js\">\n      <uri>/scripts/jquery/jquery.ui.core.js</uri>\n    </resource>\n    <resource name=\"jquery.ui.widget.js\">\n      <uri>/scripts/jquery/jquery.ui.widget.js</uri>\n    </resource>\n    <resource name=\"jquery.ui.mouse.js\">\n      <uri>/scripts/jquery/jquery.ui.mouse.js</uri>\n    </resource>\n    <resource name=\"jquery.ui.sortable.js\">\n      <uri>/scripts/jquery/jquery.ui.sortable.js</uri>\n      <require>jquery.ui.core.js</require>\n      <require>jquery.ui.widget.js</require>\n      <require>jquery.ui.mouse.js</require>\n    </resource>\n    <!-- Double click shield -->\n    <resource name=\"jquery.nuxeo.doubleclickshield.js\">\n      <uri>/scripts/jquery.nuxeo.doubleclickshield.js</uri>\n    </resource>\n    <!-- jQuery Ambiance -->\n    <resource name=\"jquery.ambiance.js\">\n      <uri>/scripts/jquery/jquery.ambiance.js</uri>\n    </resource>\n    <resource name=\"jquery.ambiance.css\">\n      <uri>/css/jquery.ambiance.css</uri>\n    </resource>\n    <resource name=\"jquery.nuxeo.dropdown.js\">\n      <uri>/scripts/jquery/jquery.nuxeo.dropdown.js</uri>\n    </resource>\n    <resource name=\"jquery.tipsy.js\">\n      <uri>/scripts/jquery/jquery.tipsy.js</uri>\n      <require>tipsy.css</require>\n    </resource>\n    <resource name=\"tipsy.css\">\n      <uri>/css/tipsy.css</uri>\n    </resource>\n    <resource name=\"jquery.nuxeo.tipsy.js\">\n      <uri>/scripts/jquery.nuxeo.tipsy.js</uri>\n      <require>jquery.tipsy.js</require>\n    </resource>\n    <resource name=\"jquery.nuxeo.tipsy.init.js\">\n      <uri>/scripts/jquery.nuxeo.tipsy.init.js</uri>\n      <require>jquery.nuxeo.tipsy.js</require>\n    </resource>\n    <resource name=\"jquery.magnific-popup.js\">\n      <uri>/scripts/jquery/jquery.magnific-popup.js</uri>\n    </resource>\n    <resource name=\"magnific-popup.css\">\n      <uri>/css/magnific-popup.css</uri>\n    </resource>\n    <resource name=\"nuxeo-lightbox.js\">\n      <uri>/scripts/nuxeo-lightbox.js</uri>\n    </resource>\n    <resource name=\"jquery.nuxeo.cv-lightbox.js\">\n      <uri>/scripts/jquery.nuxeo.cv-lightbox.js</uri>\n      <require>jquery.magnific-popup.js</require>\n      <require>nuxeo-lightbox.js</require>\n    </resource>\n    <resource name=\"nuxeo-documents-import.js\">\n      <uri>/scripts/nuxeo-documents-import.js</uri>\n    </resource>\n    <resource name=\"nuxeo.js\">\n      <uri>/bower_components/nuxeo/lib/jquery/nuxeo.js</uri>\n    </resource>\n    <resource name=\"confirm-alerts.xhtml\" type=\"xhtml\">\n      <uri>/incl/confirm-alerts.xhtml</uri>\n    </resource>\n    <resource name=\"DragAndDrop.js\" type=\"js\">\n      <uri>/scripts/DragAndDrop.js</uri>\n    </resource>\n    <resource name=\"tableSelections.js\" type=\"js\">\n      <uri>/scripts/tableSelections.js</uri>\n    </resource>\n    <resource name=\"customSeamRemotingWaiter.js\" type=\"js\">\n      <uri>/scripts/customSeamRemotingWaiter.js</uri>\n    </resource>\n    <resource name=\"default-contextmenu-actions.js\" type=\"js\">\n      <uri>/scripts/default-contextmenu-actions.js</uri>\n    </resource>\n    <resource name=\"safeEdit.xhtml\" type=\"xhtml\">\n      <uri>/incl/safeEdit.xhtml</uri>\n    </resource>\n    <resource name=\"tinymce.xhtml\" type=\"xhtml\">\n      <uri>/incl/tinymce.xhtml</uri>\n      <require>richfaces-jquery.js</require>\n      <require>safeEdit.xhtml</require>\n    </resource>\n    <resource name=\"konami.xhtml\" type=\"xhtml\">\n      <uri>/incl/konami.xhtml</uri>\n      <require>richfaces-jquery.js</require>\n    </resource>\n    <resource name=\"doubleClick_shield.xhtml\" type=\"xhtml\">\n      <uri>/incl/doubleClick_shield.xhtml</uri>\n      <require>richfaces-jquery.js</require>\n    </resource>\n    <resource name=\"layout_dev_init.xhtml\" type=\"xhtml\">\n      <uri>/widgets/dev/layout_dev_init.xhtml</uri>\n      <require>richfaces-jquery.js</require>\n    </resource>\n    <resource name=\"seam_remoting.xhtml\" type=\"xhtml\">\n      <uri>/incl/seam_remoting.xhtml</uri>\n      <require>seam-remote.js</require>\n    </resource>\n    <resource name=\"nuxeo_javascript_context.xhtml\" type=\"xhtmlfirst\">\n      <uri>/incl/nuxeo_javascript_context.xhtml</uri>\n    </resource>\n    <resource name=\"automation.js\">\n      <uri>/scripts/automation.js</uri>\n    </resource>\n\n    <resource name=\"jquery-standalone.js\">\n      <uri>/scripts/jquery.js</uri>\n    </resource>\n    <resource name=\"mobile-banner.js\">\n      <uri>/scripts/mobile-banner.js</uri>\n    </resource>\n    <!-- end of \"static\" resources declaration -->\n\n    <!-- Sass styles -->\n    <resource name=\"normalize.scss\" type=\"css\">\n      <path>themes/sass/normalize.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"breadcrumb.scss\" type=\"css\">\n      <path>themes/sass/breadcrumb.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"buttons_and_actions.scss\" type=\"css\">\n      <path>themes/sass/buttons_and_actions.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"basics.scss\" type=\"css\">\n      <path>themes/sass/basics.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"body.scss\" type=\"css\">\n      <path>themes/sass/body.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"drag_and_drop.scss\" type=\"css\">\n      <path>themes/sass/drag_and_drop.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"foldable_boxes.scss\" type=\"css\">\n      <path>themes/sass/foldable_boxes.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"forms.scss\" type=\"css\">\n      <path>themes/sass/forms.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"grids_and_widgets.scss\" type=\"css\">\n      <path>themes/sass/grids_and_widgets.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"messages_and_tooltips.scss\" type=\"css\">\n      <path>themes/sass/messages_and_tooltips.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"navigation.scss\" type=\"css\">\n      <path>themes/sass/navigation.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"popups.scss\" type=\"css\">\n      <path>themes/sass/popups.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"richfaces_components.scss\" type=\"css\">\n      <path>themes/sass/richfaces_components.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"tables.scss\" type=\"css\">\n      <path>themes/sass/tables.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"tabs_content.scss\" type=\"css\">\n      <path>themes/sass/tabs_content.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"helpers.scss\" type=\"css\">\n      <path>themes/sass/helpers.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"polymer.scss\" type=\"css\">\n      <path>themes/sass/polymer.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"header.scss\" type=\"css\">\n      <path>themes/sass/header.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"footer.scss\" type=\"css\">\n      <path>themes/sass/footer.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"nuxeo_dm_specific.scss\" type=\"css\">\n      <path>themes/sass/nuxeo_dm_specific.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"print_generic.scss\" type=\"css\">\n      <path>themes/sass/print_generic.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <!-- end of resources declaration -->\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--bundles",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.theme.nuxeo.webapp/Contributions/org.nuxeo.theme.nuxeo.webapp--bundles",
              "id": "org.nuxeo.theme.nuxeo.webapp--bundles",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bundles\" target=\"org.nuxeo.ecm.platform.WebResources\">\n\n    <!-- main bundle with all basic includes -->\n    <bundle name=\"nuxeo_includes\">\n      <resources>\n        <resource>jsf.js</resource>\n        <resource>fixjsfviewstate.js</resource>\n        <resource>richfaces-jquery.js</resource>\n        <resource>jquery-migrate.js</resource>\n        <resource>richfaces.js</resource>\n        <resource>richfaces-queue.js</resource>\n        <resource>richfaces-base-component.js</resource>\n        <resource>richfaces-fileupload.js</resource>\n        <resource>widget-utils.js</resource>\n        <resource>select2.js</resource>\n        <resource>seam-remote.js</resource>\n        <resource>foldable-box.js</resource>\n        <!-- include JS used for D&D and tableSelection -->\n        <resource>utils.js</resource>\n        <!-- include JS for contextual menu -->\n        <resource>jquery.fancybox.js</resource>\n        <resource>jquery.fancybox.style.css</resource>\n        <resource>jquery.tools.cookie.js</resource>\n        <resource>fancybox-popup-utils.js</resource>\n        <resource>contextmenu.js</resource>\n        <resource>jquery.tools.focusfirst.js</resource>\n        <resource>jquery.hotkeys.js</resource>\n        <resource>jquery.ui.sortable.js</resource>\n        <resource>sarissa-ie-workaround.js</resource>\n        <resource>static-styles.css</resource>\n        <resource>hideableAdminMessage.js</resource>\n        <resource>accessKey.js</resource>\n        <resource>jquery.nuxeo.doubleclickshield.js</resource>\n        <resource>jquery.ambiance.js</resource>\n        <resource>jquery.ambiance.css</resource>\n        <resource>jquery.nuxeo.dropdown.js</resource>\n        <resource>jquery.nuxeo.tipsy.init.js</resource>\n        <resource>jquery.magnific-popup.js</resource>\n        <resource>magnific-popup.css</resource>\n        <resource>nuxeo-lightbox.js</resource>\n        <resource>jquery.nuxeo.cv-lightbox.js</resource>\n        <resource>nuxeo-documents-import.js</resource>\n        <resource>fixmultipartajax.js</resource>\n        <resource>confirm-alerts.xhtml</resource>\n        <resource>DragAndDrop.js</resource>\n        <resource>tableSelections.js</resource>\n        <resource>customSeamRemotingWaiter.js</resource>\n        <resource>default-contextmenu-actions.js</resource>\n        <resource>safeEdit.xhtml</resource>\n        <resource>tinymce.xhtml</resource>\n        <resource>konami.xhtml</resource>\n        <resource>doubleClick_shield.xhtml</resource>\n        <resource>layout_dev_init.xhtml</resource>\n        <resource>seam_remoting.xhtml</resource>\n        <resource>automation.js</resource>\n        <resource>nuxeo_javascript_context.xhtml</resource>\n        <resource>nuxeo.js</resource>\n        <resource>mobile-banner.js</resource>\n      </resources>\n    </bundle>\n\n    <!-- Sass styles  -->\n    <bundle name=\"nuxeo_sassCss\">\n      <resources>\n        <resource>normalize.scss</resource>\n        <resource>basics.scss</resource>\n        <resource>buttons_and_actions.scss</resource>\n        <resource>body.scss</resource>\n        <resource>grids_and_widgets.scss</resource>\n        <resource>navigation.scss</resource>\n        <resource>forms.scss</resource>\n        <resource>messages_and_tooltips.scss</resource>\n        <resource>foldable_boxes.scss</resource>\n        <resource>tabs_content.scss</resource>\n        <resource>helpers.scss</resource>\n        <resource>tables.scss</resource>\n        <resource>richfaces_components.scss</resource>\n        <resource>popups.scss</resource>\n        <resource>breadcrumb.scss</resource>\n        <resource>drag_and_drop.scss</resource>\n        <resource>header.scss</resource>\n        <resource>footer.scss</resource>\n        <resource>polymer.scss</resource>\n      </resources>\n    </bundle>\n\n    <bundle name=\"nuxeo_base\">\n      <resources>\n        <resource>screen.css</resource>\n      </resources>\n    </bundle>\n\n    <bundle name=\"nuxeo_dm\">\n      <resources>\n        <resource>nuxeo_dm_specific.scss</resource>\n      </resources>\n    </bundle>\n\n    <!-- isolated jquery dep independent of JSF -->\n    <bundle name=\"jquery\">\n      <resources>\n        <resource>jquery-standalone.js</resource>\n      </resources>\n    </bundle>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.theme.styling.service--pages",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.theme.nuxeo.webapp/Contributions/org.nuxeo.theme.nuxeo.webapp--pages",
              "id": "org.nuxeo.theme.nuxeo.webapp--pages",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.theme.styling.service",
                "name": "org.nuxeo.theme.styling.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"pages\" target=\"org.nuxeo.theme.styling.service\">\n\n    <page charset=\"utf-8\" name=\"galaxy/print\">\n      <defaultFlavor>default</defaultFlavor>\n      <flavors>\n        <flavor>default</flavor>\n        <flavor>rainbow</flavor>\n      </flavors>\n      <resources>\n        <bundle>nuxeo_includes</bundle>\n        <bundle>nuxeo_base</bundle>\n        <bundle>nuxeo_sassCss</bundle>\n        <resource>print_generic.scss</resource>\n      </resources>\n    </page>\n\n    <page charset=\"utf-8\" name=\"galaxy/popup\">\n      <defaultFlavor>default</defaultFlavor>\n      <flavors>\n        <flavor>default</flavor>\n        <flavor>rainbow</flavor>\n      </flavors>\n      <resources>\n        <bundle>nuxeo_includes</bundle>\n        <bundle>nuxeo_base</bundle>\n        <bundle>nuxeo_sassCss</bundle>\n        <bundle>nuxeo_dm</bundle>\n      </resources>\n    </page>\n\n    <page charset=\"utf-8\" name=\"galaxy/default\">\n      <defaultFlavor>default</defaultFlavor>\n      <flavors>\n        <flavor>default</flavor>\n        <flavor>rainbow</flavor>\n      </flavors>\n      <resources>\n        <bundle>nuxeo_includes</bundle>\n        <bundle>nuxeo_base</bundle>\n        <bundle>nuxeo_sassCss</bundle>\n        <bundle>nuxeo_dm</bundle>\n      </resources>\n    </page>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.theme.styling.service--flavors",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.theme.nuxeo.webapp/Contributions/org.nuxeo.theme.nuxeo.webapp--flavors",
              "id": "org.nuxeo.theme.nuxeo.webapp--flavors",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.theme.styling.service",
                "name": "org.nuxeo.theme.styling.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"flavors\" target=\"org.nuxeo.theme.styling.service\">\n\n    <flavor name=\"default\">\n      <label>label.theme.flavor.nuxeo.default</label>\n      <logo>\n        <path>/img/nuxeo_logo.png</path>\n        <previewPath>/img/nuxeo_preview_logo_black.png</previewPath>\n        <width>113</width>\n        <height>20</height>\n        <title>Nuxeo</title>\n      </logo>\n      <links>\n        <icon name=\"icon\">/icons/favicon.png</icon>\n        <icon name=\"shortcut icon\">/icons/favicon.ico</icon>\n      </links>\n      <presetsList>\n        <presets category=\"border\" src=\"themes/palettes/default-borders.properties\"/>\n        <presets category=\"background\" src=\"themes/palettes/default-backgrounds.properties\"/>\n        <presets category=\"font\" src=\"themes/palettes/default-fonts.properties\"/>\n        <presets category=\"color\" src=\"themes/palettes/default-colors.properties\"/>\n      </presetsList>\n      <palettePreview>\n        <colors>\n          <color>#17384e</color>\n          <color>#00adff</color>\n          <color>#00adff</color>\n          <color>#00adff</color>\n          <color>#fff</color>\n          <color>#00adff</color>\n          <color>#404040</color>\n          <color>#cfecff</color>\n          <color>#e6f1ff</color>\n        </colors>\n      </palettePreview>\n      <sass>\n        <import src=\"themes/palettes/common_variables.scss\"/>\n        <import src=\"themes/palettes/default_variables.scss\"/>\n      </sass>\n    </flavor>\n\n    <flavor name=\"rainbow\">\n      <label>label.theme.flavor.nuxeo.rainbow</label>\n      <logo>\n        <path>/img/nuxeo_logo.png</path>\n        <previewPath>/img/nuxeo_preview_logo_black.png</previewPath>\n        <width>113</width>\n        <height>20</height>\n        <title>Nuxeo</title>\n      </logo>\n      <links>\n        <icon name=\"icon\">/icons/favicon.png</icon>\n        <icon name=\"shortcut icon\">/icons/favicon.ico</icon>\n      </links>\n      <presetsList append=\"true\">\n        <presets category=\"border\" src=\"themes/palettes/rainbow-borders.properties\"/>\n        <presets category=\"background\" src=\"themes/palettes/rainbow-backgrounds.properties\"/>\n        <presets category=\"font\" src=\"themes/palettes/rainbow-fonts.properties\"/>\n        <presets category=\"color\" src=\"themes/palettes/rainbow-colors.properties\"/>\n      </presetsList>\n      <palettePreview>\n        <colors>\n          <color>#595ca1</color>\n          <color>#bdd4ef</color>\n          <color>#4095ff</color>\n          <color>#da4f70</color>\n          <color>#41b6ab</color>\n          <color>#b34f94</color>\n          <color>#332e2e</color>\n          <color>#cfffd1</color>\n          <color>#feffe6</color>\n        </colors>\n      </palettePreview>\n      <sass>\n        <import src=\"themes/palettes/common_variables.scss\"/>\n        <import src=\"themes/palettes/alternative_variables.scss\"/>\n      </sass>\n    </flavor>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.theme.styling.service--negotiations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.theme.nuxeo.webapp/Contributions/org.nuxeo.theme.nuxeo.webapp--negotiations",
              "id": "org.nuxeo.theme.nuxeo.webapp--negotiations",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.theme.styling.service",
                "name": "org.nuxeo.theme.styling.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"negotiations\" target=\"org.nuxeo.theme.styling.service\">\n\n    <negotiation target=\"jsfDefaultPage\">\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPage\" order=\"100\">\n        <property name=\"jsfDefaultPage\">galaxy/default</property>\n      </negotiator>\n    </negotiation>\n\n    <negotiation target=\"jsfPage\">\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestParameter\" order=\"10\">\n        <property name=\"param\">page</property>\n      </negotiator>\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestAttribute\" order=\"10\">\n        <property name=\"param\">page</property>\n      </negotiator>\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPage\" order=\"100\">\n        <property name=\"jsfPage\">galaxy/default</property>\n      </negotiator>\n    </negotiation>\n\n    <negotiation target=\"jsfFlavor\">\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestParameter\" order=\"10\">\n        <property name=\"param\">flavor</property>\n      </negotiator>\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestAttribute\" order=\"20\">\n        <property name=\"param\">flavor</property>\n      </negotiator>\n      <negotiator class=\"org.nuxeo.ecm.localconf.LocalThemeFlavor\" order=\"30\">\n        <property name=\"negotiatedPageVariable\">jsfPage</property>\n      </negotiator>\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPageFlavor\" order=\"100\">\n        <property name=\"negotiatedPageVariable\">jsfPage</property>\n      </negotiator>\n    </negotiation>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.theme.nuxeo.webapp",
          "name": "org.nuxeo.theme.nuxeo.webapp",
          "requirements": [],
          "resolutionOrder": 655,
          "services": [],
          "startOrder": 751,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.theme.nuxeo.webapp\">\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\n\n    <!-- JSF resources -->\n    <resource name=\"jsf.js\" type=\"jsfjs\" target=\"bodystart\">\n      <uri>javax.faces:jsf.js</uri>\n    </resource>\n    <resource name=\"fixjsfviewstate.js\" type=\"jsfjs\" target=\"bodystart\">\n      <uri>org.nuxeo.jsf:fixviewstate.min.js</uri>\n      <require>jsf.js</require>\n    </resource>\n    <resource name=\"fixmultipartajax.js\" type=\"jsfjs\" target=\"bodystart\">\n      <uri>org.nuxeo.jsf:fixmultipartajax.min.js</uri>\n      <require>jsf.js</require>\n    </resource>\n    <resource name=\"richfaces-jquery.js\" type=\"jsfjs\" target=\"bodystart\">\n      <uri>org.richfaces:jquery.js</uri>\n    </resource>\n    <resource name=\"jquery-migrate.js\">\n      <uri>/scripts/jquery-migrate-1.4.1.js</uri>\n    </resource>\n    <resource name=\"richfaces.js\" type=\"jsfjs\" target=\"bodystart\">\n      <uri>org.richfaces:richfaces.js</uri>\n      <require>jsf.js</require>\n    </resource>\n    <resource name=\"richfaces-queue.js\" type=\"jsfjs\" target=\"bodystart\">\n      <uri>org.richfaces:richfaces-queue.js</uri>\n      <require>richfaces.js</require>\n    </resource>\n    <resource name=\"richfaces-base-component.js\" type=\"jsfjs\" target=\"bodystart\">\n      <uri>org.richfaces:richfaces-base-component.js</uri>\n      <require>richfaces.js</require>\n    </resource>\n    <resource name=\"richfaces-fileupload.ecss\" type=\"jsfcss\" target=\"bodystart\">\n      <uri>org.richfaces:fileupload.ecss</uri>\n      <require>richfaces.js</require>\n    </resource>\n    <resource name=\"richfaces-fileupload.js\" type=\"jsfjs\" target=\"bodystart\">\n      <uri>org.richfaces:fileupload.js</uri>\n      <require>richfaces-fileupload.ecss</require>\n      <require>richfaces.js</require>\n    </resource>\n    <resource name=\"widget-utils.js\" type=\"jsfjs\">\n      <uri>org.nuxeo:widget-utils.min.js</uri>\n      <require>richfaces-queue.js</require>\n    </resource>\n    <resource name=\"select2.js\" type=\"jsfjs\">\n      <uri>org.nuxeo.select2:select2.min.js</uri>\n      <require>widget-utils.js</require>\n    </resource>\n\n    <!-- Seam 1.0.1.GA -->\n    <resource name=\"seam-remote.js\">\n      <uri>/scripts/seam-remote.js</uri>\n    </resource>\n\n    <resource name=\"static-styles.css\">\n      <uri>/css/static-styles.css</uri>\n    </resource>\n    <resource name=\"screen.css\">\n      <uri>/css/screen.css</uri>\n    </resource>\n    <resource name=\"foldable-box.js\">\n      <uri>/scripts/foldable-box.js</uri>\n    </resource>\n    <resource name=\"utils.js\">\n      <uri>/scripts/utils.js</uri>\n    </resource>\n    <resource name=\"tableSelections.js\">\n      <uri>/scripts/tableSelections.js</uri>\n    </resource>\n    <resource name=\"contextmenu.js\">\n      <uri>/scripts/contextmenu.js</uri>\n    </resource>\n    <resource name=\"DragAndDrop.js\">\n      <uri>/scripts/DragAndDrop.js</uri>\n    </resource>\n    <resource name=\"hideableAdminMessage.js\">\n      <uri>/scripts/hideableAdminMessage.js</uri>\n    </resource>\n    <!-- jquery cookie plugin -->\n    <resource name=\"jquery.tools.cookie.js\">\n      <uri>/scripts/jquery/cookie.js</uri>\n    </resource>\n    <!-- Fancybox -->\n    <resource name=\"jquery.fancybox.js\">\n      <uri>/scripts/jquery/jquery.fancybox.js</uri>\n    </resource>\n    <resource name=\"jquery.fancybox.style.css\">\n      <uri>/css/jquery.fancybox.css</uri>\n    </resource>\n    <resource name=\"fancybox-popup-utils.js\">\n      <uri>/scripts/fancybox-popup-utils.js</uri>\n    </resource>\n    <!-- Hotkeys (e.g. used to focus the search box using '/') -->\n    <resource name=\"jquery.hotkeys.js\">\n      <uri>/scripts/jquery/jquery.hotkeys.js</uri>\n    </resource>\n    <!-- Helpers for focus on first input of a form -->\n    <resource name=\"jquery.tools.focusfirst.js\">\n      <uri>/scripts/jquery/jquery.tools.focusfirst.js</uri>\n    </resource>\n    <!-- Workaround for jQuery and Sarissa library conflict on IE -->\n    <resource name=\"sarissa-ie-workaround.js\">\n      <uri>/scripts/sarissa-ie-workaround.js</uri>\n    </resource>\n    <!-- Mustache -->\n    <resource name=\"mustache.js\">\n      <uri>/scripts/mustache/mustache.js</uri>\n    </resource>\n    <!-- Simple Access Key helper -->\n    <resource name=\"accessKey.js\">\n      <uri>/scripts/accessKey.js</uri>\n    </resource>\n    <!-- Moment.js -->\n    <resource name=\"moment.js\">\n      <uri>/scripts/moment.min-1.5.0nx.js</uri>\n    </resource>\n    <!-- jquery-ui resources: order plugins according to their dependencies. -->\n    <resource name=\"jquery.ui.core.js\">\n      <uri>/scripts/jquery/jquery.ui.core.js</uri>\n    </resource>\n    <resource name=\"jquery.ui.widget.js\">\n      <uri>/scripts/jquery/jquery.ui.widget.js</uri>\n    </resource>\n    <resource name=\"jquery.ui.mouse.js\">\n      <uri>/scripts/jquery/jquery.ui.mouse.js</uri>\n    </resource>\n    <resource name=\"jquery.ui.sortable.js\">\n      <uri>/scripts/jquery/jquery.ui.sortable.js</uri>\n      <require>jquery.ui.core.js</require>\n      <require>jquery.ui.widget.js</require>\n      <require>jquery.ui.mouse.js</require>\n    </resource>\n    <!-- Double click shield -->\n    <resource name=\"jquery.nuxeo.doubleclickshield.js\">\n      <uri>/scripts/jquery.nuxeo.doubleclickshield.js</uri>\n    </resource>\n    <!-- jQuery Ambiance -->\n    <resource name=\"jquery.ambiance.js\">\n      <uri>/scripts/jquery/jquery.ambiance.js</uri>\n    </resource>\n    <resource name=\"jquery.ambiance.css\">\n      <uri>/css/jquery.ambiance.css</uri>\n    </resource>\n    <resource name=\"jquery.nuxeo.dropdown.js\">\n      <uri>/scripts/jquery/jquery.nuxeo.dropdown.js</uri>\n    </resource>\n    <resource name=\"jquery.tipsy.js\">\n      <uri>/scripts/jquery/jquery.tipsy.js</uri>\n      <require>tipsy.css</require>\n    </resource>\n    <resource name=\"tipsy.css\">\n      <uri>/css/tipsy.css</uri>\n    </resource>\n    <resource name=\"jquery.nuxeo.tipsy.js\">\n      <uri>/scripts/jquery.nuxeo.tipsy.js</uri>\n      <require>jquery.tipsy.js</require>\n    </resource>\n    <resource name=\"jquery.nuxeo.tipsy.init.js\">\n      <uri>/scripts/jquery.nuxeo.tipsy.init.js</uri>\n      <require>jquery.nuxeo.tipsy.js</require>\n    </resource>\n    <resource name=\"jquery.magnific-popup.js\">\n      <uri>/scripts/jquery/jquery.magnific-popup.js</uri>\n    </resource>\n    <resource name=\"magnific-popup.css\">\n      <uri>/css/magnific-popup.css</uri>\n    </resource>\n    <resource name=\"nuxeo-lightbox.js\">\n      <uri>/scripts/nuxeo-lightbox.js</uri>\n    </resource>\n    <resource name=\"jquery.nuxeo.cv-lightbox.js\">\n      <uri>/scripts/jquery.nuxeo.cv-lightbox.js</uri>\n      <require>jquery.magnific-popup.js</require>\n      <require>nuxeo-lightbox.js</require>\n    </resource>\n    <resource name=\"nuxeo-documents-import.js\">\n      <uri>/scripts/nuxeo-documents-import.js</uri>\n    </resource>\n    <resource name=\"nuxeo.js\">\n      <uri>/bower_components/nuxeo/lib/jquery/nuxeo.js</uri>\n    </resource>\n    <resource name=\"confirm-alerts.xhtml\" type=\"xhtml\">\n      <uri>/incl/confirm-alerts.xhtml</uri>\n    </resource>\n    <resource name=\"DragAndDrop.js\" type=\"js\">\n      <uri>/scripts/DragAndDrop.js</uri>\n    </resource>\n    <resource name=\"tableSelections.js\" type=\"js\">\n      <uri>/scripts/tableSelections.js</uri>\n    </resource>\n    <resource name=\"customSeamRemotingWaiter.js\" type=\"js\">\n      <uri>/scripts/customSeamRemotingWaiter.js</uri>\n    </resource>\n    <resource name=\"default-contextmenu-actions.js\" type=\"js\">\n      <uri>/scripts/default-contextmenu-actions.js</uri>\n    </resource>\n    <resource name=\"safeEdit.xhtml\" type=\"xhtml\">\n      <uri>/incl/safeEdit.xhtml</uri>\n    </resource>\n    <resource name=\"tinymce.xhtml\" type=\"xhtml\">\n      <uri>/incl/tinymce.xhtml</uri>\n      <require>richfaces-jquery.js</require>\n      <require>safeEdit.xhtml</require>\n    </resource>\n    <resource name=\"konami.xhtml\" type=\"xhtml\">\n      <uri>/incl/konami.xhtml</uri>\n      <require>richfaces-jquery.js</require>\n    </resource>\n    <resource name=\"doubleClick_shield.xhtml\" type=\"xhtml\">\n      <uri>/incl/doubleClick_shield.xhtml</uri>\n      <require>richfaces-jquery.js</require>\n    </resource>\n    <resource name=\"layout_dev_init.xhtml\" type=\"xhtml\">\n      <uri>/widgets/dev/layout_dev_init.xhtml</uri>\n      <require>richfaces-jquery.js</require>\n    </resource>\n    <resource name=\"seam_remoting.xhtml\" type=\"xhtml\">\n      <uri>/incl/seam_remoting.xhtml</uri>\n      <require>seam-remote.js</require>\n    </resource>\n    <resource name=\"nuxeo_javascript_context.xhtml\" type=\"xhtmlfirst\">\n      <uri>/incl/nuxeo_javascript_context.xhtml</uri>\n    </resource>\n    <resource name=\"automation.js\">\n      <uri>/scripts/automation.js</uri>\n    </resource>\n\n    <resource name=\"jquery-standalone.js\">\n      <uri>/scripts/jquery.js</uri>\n    </resource>\n    <resource name=\"mobile-banner.js\">\n      <uri>/scripts/mobile-banner.js</uri>\n    </resource>\n    <!-- end of \"static\" resources declaration -->\n\n    <!-- Sass styles -->\n    <resource name=\"normalize.scss\" type=\"css\">\n      <path>themes/sass/normalize.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"breadcrumb.scss\" type=\"css\">\n      <path>themes/sass/breadcrumb.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"buttons_and_actions.scss\" type=\"css\">\n      <path>themes/sass/buttons_and_actions.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"basics.scss\" type=\"css\">\n      <path>themes/sass/basics.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"body.scss\" type=\"css\">\n      <path>themes/sass/body.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"drag_and_drop.scss\" type=\"css\">\n      <path>themes/sass/drag_and_drop.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"foldable_boxes.scss\" type=\"css\">\n      <path>themes/sass/foldable_boxes.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"forms.scss\" type=\"css\">\n      <path>themes/sass/forms.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"grids_and_widgets.scss\" type=\"css\">\n      <path>themes/sass/grids_and_widgets.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"messages_and_tooltips.scss\" type=\"css\">\n      <path>themes/sass/messages_and_tooltips.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"navigation.scss\" type=\"css\">\n      <path>themes/sass/navigation.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"popups.scss\" type=\"css\">\n      <path>themes/sass/popups.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"richfaces_components.scss\" type=\"css\">\n      <path>themes/sass/richfaces_components.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"tables.scss\" type=\"css\">\n      <path>themes/sass/tables.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"tabs_content.scss\" type=\"css\">\n      <path>themes/sass/tabs_content.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"helpers.scss\" type=\"css\">\n      <path>themes/sass/helpers.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"polymer.scss\" type=\"css\">\n      <path>themes/sass/polymer.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"header.scss\" type=\"css\">\n      <path>themes/sass/header.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"footer.scss\" type=\"css\">\n      <path>themes/sass/footer.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"nuxeo_dm_specific.scss\" type=\"css\">\n      <path>themes/sass/nuxeo_dm_specific.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <resource name=\"print_generic.scss\" type=\"css\">\n      <path>themes/sass/print_generic.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n    <!-- end of resources declaration -->\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"bundles\">\n\n    <!-- main bundle with all basic includes -->\n    <bundle name=\"nuxeo_includes\">\n      <resources>\n        <resource>jsf.js</resource>\n        <resource>fixjsfviewstate.js</resource>\n        <resource>richfaces-jquery.js</resource>\n        <resource>jquery-migrate.js</resource>\n        <resource>richfaces.js</resource>\n        <resource>richfaces-queue.js</resource>\n        <resource>richfaces-base-component.js</resource>\n        <resource>richfaces-fileupload.js</resource>\n        <resource>widget-utils.js</resource>\n        <resource>select2.js</resource>\n        <resource>seam-remote.js</resource>\n        <resource>foldable-box.js</resource>\n        <!-- include JS used for D&D and tableSelection -->\n        <resource>utils.js</resource>\n        <!-- include JS for contextual menu -->\n        <resource>jquery.fancybox.js</resource>\n        <resource>jquery.fancybox.style.css</resource>\n        <resource>jquery.tools.cookie.js</resource>\n        <resource>fancybox-popup-utils.js</resource>\n        <resource>contextmenu.js</resource>\n        <resource>jquery.tools.focusfirst.js</resource>\n        <resource>jquery.hotkeys.js</resource>\n        <resource>jquery.ui.sortable.js</resource>\n        <resource>sarissa-ie-workaround.js</resource>\n        <resource>static-styles.css</resource>\n        <resource>hideableAdminMessage.js</resource>\n        <resource>accessKey.js</resource>\n        <resource>jquery.nuxeo.doubleclickshield.js</resource>\n        <resource>jquery.ambiance.js</resource>\n        <resource>jquery.ambiance.css</resource>\n        <resource>jquery.nuxeo.dropdown.js</resource>\n        <resource>jquery.nuxeo.tipsy.init.js</resource>\n        <resource>jquery.magnific-popup.js</resource>\n        <resource>magnific-popup.css</resource>\n        <resource>nuxeo-lightbox.js</resource>\n        <resource>jquery.nuxeo.cv-lightbox.js</resource>\n        <resource>nuxeo-documents-import.js</resource>\n        <resource>fixmultipartajax.js</resource>\n        <resource>confirm-alerts.xhtml</resource>\n        <resource>DragAndDrop.js</resource>\n        <resource>tableSelections.js</resource>\n        <resource>customSeamRemotingWaiter.js</resource>\n        <resource>default-contextmenu-actions.js</resource>\n        <resource>safeEdit.xhtml</resource>\n        <resource>tinymce.xhtml</resource>\n        <resource>konami.xhtml</resource>\n        <resource>doubleClick_shield.xhtml</resource>\n        <resource>layout_dev_init.xhtml</resource>\n        <resource>seam_remoting.xhtml</resource>\n        <resource>automation.js</resource>\n        <resource>nuxeo_javascript_context.xhtml</resource>\n        <resource>nuxeo.js</resource>\n        <resource>mobile-banner.js</resource>\n      </resources>\n    </bundle>\n\n    <!-- Sass styles  -->\n    <bundle name=\"nuxeo_sassCss\">\n      <resources>\n        <resource>normalize.scss</resource>\n        <resource>basics.scss</resource>\n        <resource>buttons_and_actions.scss</resource>\n        <resource>body.scss</resource>\n        <resource>grids_and_widgets.scss</resource>\n        <resource>navigation.scss</resource>\n        <resource>forms.scss</resource>\n        <resource>messages_and_tooltips.scss</resource>\n        <resource>foldable_boxes.scss</resource>\n        <resource>tabs_content.scss</resource>\n        <resource>helpers.scss</resource>\n        <resource>tables.scss</resource>\n        <resource>richfaces_components.scss</resource>\n        <resource>popups.scss</resource>\n        <resource>breadcrumb.scss</resource>\n        <resource>drag_and_drop.scss</resource>\n        <resource>header.scss</resource>\n        <resource>footer.scss</resource>\n        <resource>polymer.scss</resource>\n      </resources>\n    </bundle>\n\n    <bundle name=\"nuxeo_base\">\n      <resources>\n        <resource>screen.css</resource>\n      </resources>\n    </bundle>\n\n    <bundle name=\"nuxeo_dm\">\n      <resources>\n        <resource>nuxeo_dm_specific.scss</resource>\n      </resources>\n    </bundle>\n\n    <!-- isolated jquery dep independent of JSF -->\n    <bundle name=\"jquery\">\n      <resources>\n        <resource>jquery-standalone.js</resource>\n      </resources>\n    </bundle>\n\n  </extension>\n\n  <!-- Register mapping between theme pages and resources -->\n  <extension target=\"org.nuxeo.theme.styling.service\" point=\"pages\">\n\n    <page name=\"galaxy/print\" charset=\"utf-8\">\n      <defaultFlavor>default</defaultFlavor>\n      <flavors>\n        <flavor>default</flavor>\n        <flavor>rainbow</flavor>\n      </flavors>\n      <resources>\n        <bundle>nuxeo_includes</bundle>\n        <bundle>nuxeo_base</bundle>\n        <bundle>nuxeo_sassCss</bundle>\n        <resource>print_generic.scss</resource>\n      </resources>\n    </page>\n\n    <page name=\"galaxy/popup\" charset=\"utf-8\">\n      <defaultFlavor>default</defaultFlavor>\n      <flavors>\n        <flavor>default</flavor>\n        <flavor>rainbow</flavor>\n      </flavors>\n      <resources>\n        <bundle>nuxeo_includes</bundle>\n        <bundle>nuxeo_base</bundle>\n        <bundle>nuxeo_sassCss</bundle>\n        <bundle>nuxeo_dm</bundle>\n      </resources>\n    </page>\n\n    <page name=\"galaxy/default\" charset=\"utf-8\">\n      <defaultFlavor>default</defaultFlavor>\n      <flavors>\n        <flavor>default</flavor>\n        <flavor>rainbow</flavor>\n      </flavors>\n      <resources>\n        <bundle>nuxeo_includes</bundle>\n        <bundle>nuxeo_base</bundle>\n        <bundle>nuxeo_sassCss</bundle>\n        <bundle>nuxeo_dm</bundle>\n      </resources>\n    </page>\n\n  </extension>\n\n  <!-- Register flavors (collections of presets) -->\n  <extension target=\"org.nuxeo.theme.styling.service\" point=\"flavors\">\n\n    <flavor name=\"default\">\n      <label>label.theme.flavor.nuxeo.default</label>\n      <logo>\n        <path>/img/nuxeo_logo.png</path>\n        <previewPath>/img/nuxeo_preview_logo_black.png</previewPath>\n        <width>113</width>\n        <height>20</height>\n        <title>Nuxeo</title>\n      </logo>\n      <links>\n        <icon name=\"icon\">/icons/favicon.png</icon>\n        <icon name=\"shortcut icon\">/icons/favicon.ico</icon>\n      </links>\n      <presetsList>\n        <presets category=\"border\" src=\"themes/palettes/default-borders.properties\" />\n        <presets category=\"background\"\n          src=\"themes/palettes/default-backgrounds.properties\" />\n        <presets category=\"font\" src=\"themes/palettes/default-fonts.properties\" />\n        <presets category=\"color\" src=\"themes/palettes/default-colors.properties\" />\n      </presetsList>\n      <palettePreview>\n        <colors>\n          <color>#17384e</color>\n          <color>#00adff</color>\n          <color>#00adff</color>\n          <color>#00adff</color>\n          <color>#fff</color>\n          <color>#00adff</color>\n          <color>#404040</color>\n          <color>#cfecff</color>\n          <color>#e6f1ff</color>\n        </colors>\n      </palettePreview>\n      <sass>\n        <import src=\"themes/palettes/common_variables.scss\" />\n        <import src=\"themes/palettes/default_variables.scss\" />\n      </sass>\n    </flavor>\n\n    <flavor name=\"rainbow\">\n      <label>label.theme.flavor.nuxeo.rainbow</label>\n      <logo>\n        <path>/img/nuxeo_logo.png</path>\n        <previewPath>/img/nuxeo_preview_logo_black.png</previewPath>\n        <width>113</width>\n        <height>20</height>\n        <title>Nuxeo</title>\n      </logo>\n      <links>\n        <icon name=\"icon\">/icons/favicon.png</icon>\n        <icon name=\"shortcut icon\">/icons/favicon.ico</icon>\n      </links>\n      <presetsList append=\"true\">\n        <presets category=\"border\" src=\"themes/palettes/rainbow-borders.properties\" />\n        <presets category=\"background\"\n          src=\"themes/palettes/rainbow-backgrounds.properties\" />\n        <presets category=\"font\" src=\"themes/palettes/rainbow-fonts.properties\" />\n        <presets category=\"color\" src=\"themes/palettes/rainbow-colors.properties\" />\n      </presetsList>\n      <palettePreview>\n        <colors>\n          <color>#595ca1</color>\n          <color>#bdd4ef</color>\n          <color>#4095ff</color>\n          <color>#da4f70</color>\n          <color>#41b6ab</color>\n          <color>#b34f94</color>\n          <color>#332e2e</color>\n          <color>#cfffd1</color>\n          <color>#feffe6</color>\n        </colors>\n      </palettePreview>\n      <sass>\n        <import src=\"themes/palettes/common_variables.scss\" />\n        <import src=\"themes/palettes/alternative_variables.scss\" />\n      </sass>\n    </flavor>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.theme.styling.service\" point=\"negotiations\">\n\n    <negotiation target=\"jsfDefaultPage\">\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPage\"\n        order=\"100\">\n        <property name=\"jsfDefaultPage\">galaxy/default</property>\n      </negotiator>\n    </negotiation>\n\n    <negotiation target=\"jsfPage\">\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestParameter\"\n        order=\"10\">\n        <property name=\"param\">page</property>\n      </negotiator>\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestAttribute\"\n        order=\"10\">\n        <property name=\"param\">page</property>\n      </negotiator>\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPage\"\n        order=\"100\">\n        <property name=\"jsfPage\">galaxy/default</property>\n      </negotiator>\n    </negotiation>\n\n    <negotiation target=\"jsfFlavor\">\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestParameter\"\n        order=\"10\">\n        <property name=\"param\">flavor</property>\n      </negotiator>\n      <negotiator class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.RequestAttribute\"\n        order=\"20\">\n        <property name=\"param\">flavor</property>\n      </negotiator>\n      <negotiator class=\"org.nuxeo.ecm.localconf.LocalThemeFlavor\"\n        order=\"30\">\n        <property name=\"negotiatedPageVariable\">jsfPage</property>\n      </negotiator>\n      <negotiator\n        class=\"org.nuxeo.ecm.web.resources.jsf.negotiators.DefaultPageFlavor\"\n        order=\"100\">\n        <property name=\"negotiatedPageVariable\">jsfPage</property>\n      </negotiator>\n    </negotiation>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/theme-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.actions/Contributions/org.nuxeo.ecm.platform.actions--actions",
              "id": "org.nuxeo.ecm.platform.actions--actions",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <!-- server actions -->\n\n    <action id=\"documents\" label=\"label.main.tab.documents\" link=\"view_documents\" order=\"40\" type=\"main_tab\">\n      <category>MAIN_TABS</category>\n      <properties>\n        <property name=\"requireDocument\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"non_anonymous_logout\" label=\"command.logout\" link=\"logout\" order=\"100\" type=\"bare_link\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>not_anonymous</filter-id>\n    </action>\n\n    <action id=\"login\" label=\"command.login\" link=\"logout\" order=\"100\" type=\"bare_link\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>anonymous</filter-id>\n    </action>\n\n    <action icon=\"/icons/action_add.gif\" id=\"newDomain\" label=\"command.create.domain\" link=\"#{documentActions.createDocument('Domain')}\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <filter id=\"newDomain\">\n        <rule grant=\"true\">\n          <permission>AddChildren</permission>\n          <type>Root</type>\n        </rule>\n      </filter>\n    </action>\n\n    <!-- domain and roots actions -->\n\n    <action icon=\"/icons/action_add.gif\" id=\"newWorkspace\" label=\"command.create.workspace\" link=\"#{documentActions.createDocument('Workspace')}\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <filter id=\"newWorkspace\">\n        <rule grant=\"true\">\n          <permission>AddChildren</permission>\n          <type>WorkspaceRoot</type>\n        </rule>\n      </filter>\n    </action>\n\n    <action enabled=\"false\" icon=\"/icons/action_add.gif\" id=\"newWorkspaceWithWizard\" label=\"command.create.workspace.wizard\" link=\"create_workspace_wizard\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <filter id=\"newWorkspaceWizard\">\n        <rule grant=\"true\">\n          <permission>AddChildren</permission>\n          <type>WorkspaceRoot</type>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/action_add.gif\" id=\"newSection\" label=\"command.create.section\" link=\"#{documentActions.createDocument('Section')}\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <filter id=\"newSection\">\n        <rule grant=\"true\">\n          <permission>AddChildren</permission>\n          <type>SectionRoot</type>\n        </rule>\n      </filter>\n    </action>\n\n    <!-- generic actions -->\n\n    <action icon=\"/icons/action_add.gif\" id=\"newDocument\" label=\"action.new.document\" type=\"fancybox\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <properties>\n        <property name=\"include\">/select_document_type.xhtml</property>\n      </properties>\n      <filter-id>create</filter-id>\n    </action>\n\n    <!-- disabled by default, see NXP-15369 -->\n    <action enabled=\"false\" icon=\"/icons/action_add_file.gif\" id=\"newFile\" label=\"action.new.file\" type=\"fancybox\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <properties>\n        <property name=\"include\">/create_file.xhtml</property>\n      </properties>\n      <filter-id>importFile</filter-id>\n    </action>\n\n    <!--\n      tabs are handled by a specific template so links should be paths to\n      template to include in the tab content\n    -->\n    <action accessKey=\"m\" icon=\"/icons/file.gif\" id=\"TAB_MANAGE\" label=\"action.view.manage\" order=\"240\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>manage</filter-id>\n      <filter id=\"TAB_MANAGE_has_subtabs\">\n        <rule grant=\"false\">\n          <condition>\n            #{webActions.getActionsList('TAB_MANAGE_sub_tab').isEmpty()}\n          </condition>\n        </rule>\n      </filter>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n        <property name=\"link\">/incl/tabs/document_manage.xhtml</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/file.gif\" id=\"TAB_PERMISSIONS\" label=\"action.view.permissions\" link=\"/permissions/document_permissions.xhtml\" order=\"50\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>isNotVersion</filter-id>\n      <properties>\n        <!-- NXP-18320: disable ajax support on Polymer tabs -->\n        <property name=\"ajaxSupport\">false</property>\n      </properties>\n    </action>\n\n    <action accessKey=\"v\" icon=\"/icons/file.gif\" id=\"TAB_VIEW\" label=\"action.view.summary\" link=\"/incl/tabs/document_view.xhtml\" order=\"0\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>view</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action accessKey=\"c\" icon=\"/icons/file.gif\" id=\"TAB_CONTENT\" label=\"action.view.content\" link=\"/incl/tabs/document_content.xhtml\" order=\"10\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <!--\n        NXP-12715: use same tab on workspaces and sections\n      -->\n      <!--\n        <filter-id>outSection</filter-id>\n      -->\n      <filter-id>view_content</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <!--\n      NXP-12715: use same tab on workspaces and sections => disable this action\n      by default\n    -->\n    <action enabled=\"false\" icon=\"/icons/file.gif\" id=\"TAB_SECTION_CONTENT\" label=\"action.view.content\" link=\"/incl/tabs/section_content.xhtml\" order=\"10\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>view_content</filter-id>\n      <filter-id>inSection</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/file.gif\" id=\"TAB_TRASH_CONTENT\" label=\"action.view.trash.content\" link=\"/incl/tabs/document_trash_content.xhtml\" order=\"200\">\n      <category>TAB_MANAGE_sub_tab</category>\n      <filter id=\"viewTrash\">\n        <rule grant=\"true\">\n          <permission>Manage everything</permission>\n          <facet>Folderish</facet>\n          <condition>#{deleteActions.trashManagementEnabled}</condition>\n        </rule>\n      </filter>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action accesskey=\"p\" icon=\"/icons/printer.gif\" id=\"print\" label=\"label.print\" link=\"#{restHelper.doPrint(themeActions.defaultTheme)}\" order=\"100\">\n      <category>DOCUMENT_UPPER_ACTION_BLANK_TARGET</category>\n    </action>\n\n    <action accessKey=\"e\" icon=\"/icons/file.gif\" id=\"TAB_EDIT\" label=\"action.view.modification\" link=\"/incl/tabs/document_edit.xhtml\" order=\"20\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>edit</filter-id>\n      <filter-id>mutable_document</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action accessKey=\"e\" icon=\"/icons/file.gif\" id=\"TAB_WORKSPACE_EDIT\" label=\"action.view.modification\" link=\"/incl/tabs/document_edit.xhtml\" order=\"22\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>workspace_edit</filter-id>\n      <filter-id>mutable_document</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action accessKey=\"f\" id=\"TAB_FILES_EDIT\" label=\"action.view.files\" link=\"/incl/tabs/document_files_edit.xhtml\" order=\"43\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>edit</filter-id>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>hasAttachedFiles</filter-id>\n      <filter-id>denyFilesTab</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action enabled=\"false\" icon=\"/icons/file.gif\" id=\"TAB_RIGHTS\" label=\"action.view.rights\" link=\"/incl/tabs/document_rights.xhtml\" order=\"50\">\n      <category>TAB_MANAGE_sub_tab</category>\n      <filter-id>rights</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <!-- Manage the sub tabs -->\n\n    <!-- Actions on WorkLists -->\n\n    <action icon=\"/icons/action_paste_all.gif\" id=\"WORKLIST_PASTE\" label=\"command.clipboard.pasteAll\" link=\"#{clipboardActions.pasteWorkingList}\">\n      <category>DEFAULT_LIST</category>\n      <category>CLIPBOARD_LIST</category>\n      <filter-id>canPasteCurrentWorkList</filter-id>\n    </action>\n\n    <action icon=\"/icons/action_move_all.gif\" id=\"WORKLIST_MOVE\" label=\"command.clipboard.moveAll\" link=\"#{clipboardActions.moveWorkingList}\">\n      <category>DEFAULT_LIST</category>\n      <category>CLIPBOARD_LIST</category>\n      <filter-id>canMoveWorkingList</filter-id>\n    </action>\n\n    <action icon=\"/icons/action_export_zip.gif\" id=\"WORKLIST_EXPORT\" label=\"command.clipboard.zipExport\" link=\"#{clipboardActions.exportWorklistAsZip()}\">\n      <category>DEFAULT_LIST</category>\n      <filter id=\"currentWorkListIsNotEmpty2\">\n        <rule grant=\"false\">\n          <condition>#{clipboardActions.workListEmpty}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/action_clipboard_deleteall.gif\" id=\"WORKLIST_CLEAN\" label=\"command.clipboard.delAll\" link=\"#{clipboardActions.clearWorkingList()}\">\n      <category>DEFAULT_LIST</category>\n      <category>CLIPBOARD_LIST</category>\n      <filter id=\"currentWorkListIsNotEmpty3\">\n        <rule grant=\"false\">\n          <condition>#{clipboardActions.workListEmpty}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <!-- Actions for the document selection -->\n\n    <action icon=\"\" id=\"CLIPBOARD_PASTE\" label=\"command.clipboard.paste\" link=\"#{clipboardActions.pasteClipboard}\" order=\"20\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter id=\"canPastFromClipboard\">\n        <rule grant=\"true\">\n          <condition>#{clipboardActions.canPasteFromClipboard}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action confirm=\"if( !confirmDeleteDocumentsForever() ) return false;\" help=\"command.deleteDocs.help\" icon=\"\" id=\"CURRENT_SELECTION_DELETE\" label=\"command.deleteDocs\" link=\"#{deleteActions.purgeSelection}\">\n      <category>CURRENT_SELECTION_TRASH_LIST</category>\n      <filter id=\"canPurge\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.canPurge}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action confirm=\"if( !confirmEmptyTrash() ) return false;\" help=\"command.emptyTrash.help\" icon=\"\" id=\"CURRENT_SELECTION_EMPTY_TRASH\" label=\"command.emptyTrash\" link=\"#{deleteActions.emptyTrash}\">\n      <category>CURRENT_SELECTION_TRASH_LIST</category>\n      <filter id=\"canEmptyTrash\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.canEmptyTrash}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action confirm=\"if( !confirmUndeleteDocuments() ) return false;\" help=\"command.undeleteDocs.help\" icon=\"\" id=\"CURRENT_SELECTION_UNDELETE\" label=\"command.undeleteDocs\" link=\"#{deleteActions.undeleteSelection}\">\n      <category>CURRENT_SELECTION_TRASH_LIST</category>\n      <filter id=\"canPurge\"/>\n    </action>\n\n    <action confirm=\"if( !confirmDeleteDocuments() ) return false;\" help=\"command.trashDocs.help\" icon=\"\" id=\"CURRENT_SELECTION_TRASH\" label=\"command.trashDocs\" link=\"#{deleteActions.deleteSelection}\" order=\"1000\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter id=\"canDelete\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.canDelete}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"\" id=\"CURRENT_SELECTION_EDIT\" label=\"command.bulk.edit\" order=\"0\" type=\"fancybox\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canEditCurrentSelection</filter-id>\n      <properties>\n        <property name=\"include\">/incl/bulk_edit_box.xhtml</property>\n        <property name=\"layout\">bulkEdit@edit</property>\n        <property name=\"autoDimensions\">false</property>\n        <property name=\"width\">50%</property>\n        <property name=\"height\">70%</property>\n        <property name=\"modal\">true</property>\n        <property name=\"scrolling\">auto</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"\" id=\"CURRENT_SELECTION_COPY\" label=\"command.clipboard.copy\" link=\"#{clipboardActions.putSelectionInClipboard}\" order=\"10\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canCopyFromCurrentSelection</filter-id>\n    </action>\n\n    <action icon=\"\" id=\"CURRENT_SELECTION_ADDTOLIST\" label=\"help.command.clipboard.addworklist\" link=\"#{clipboardActions.putSelectionInDefaultWorkList}\" order=\"30\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canCopyFromCurrentSelection</filter-id>\n      <filter id=\"no_addtolist_for_domains\">\n        <rule grant=\"false\">\n          <type>Root</type>\n        </rule>\n      </filter>\n    </action>\n\n    <action enabled=\"true\" icon=\"\" id=\"MOVE_TOP\" label=\"command.order.movetotop\" link=\"#{orderableDocumentActions.moveToTop}\" order=\"200\">\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canMoveToTop</filter-id>\n    </action>\n\n    <action enabled=\"true\" icon=\"\" id=\"MOVE_UP\" label=\"command.order.moveup\" link=\"#{orderableDocumentActions.moveUp}\" order=\"250\">\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canMoveUp</filter-id>\n    </action>\n\n    <action enabled=\"true\" icon=\"\" id=\"MOVE_DOWN\" label=\"command.order.movedown\" link=\"#{orderableDocumentActions.moveDown}\" order=\"300\">\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canMoveDown</filter-id>\n    </action>\n\n    <action enabled=\"true\" icon=\"\" id=\"MOVE_BOTTOM\" label=\"command.order.movetobottom\" link=\"#{orderableDocumentActions.moveToBottom}\" order=\"350\">\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canMoveToBottom</filter-id>\n    </action>\n\n    <action confirm=\"if( !confirmDeleteDocuments() ) return false;\" help=\"command.trashDocs.help\" icon=\"\" id=\"CURRENT_SELECTION_SECTIONS_TRASH\" label=\"command.trashDocs\" link=\"#{deleteActions.deleteSelectionSections}\">\n      <category>CURRENT_SELECTION_SECTIONS_LIST</category>\n      <filter id=\"canDeleteSection\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.canDeleteSections}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/view_doc.png\" id=\"POPUP_VIEW\" label=\"command.view\" link=\"javascript:doView\">\n      <category>POPUP</category>\n    </action>\n\n    <action icon=\"/icons/application_form_edit.png\" id=\"POPUP_EDIT\" label=\"action.view.edit\" link=\"javascript:doEdit\">\n      <category>POPUP</category>\n      <filter-id>user_canedit</filter-id>\n      <filter-id>mutable_document</filter-id>\n    </action>\n\n    <action icon=\"/icons/action_clipboard_copy.gif\" id=\"POPUP_COPY\" label=\"command.clipboard.copy\" link=\"javascript:doCopy\">\n      <category>POPUP</category>\n    </action>\n\n    <action icon=\"/icons/action_paste_all.gif\" id=\"POPUP_PASTE\" label=\"command.clipboard.paste\" link=\"javascript:doPaste\">\n      <category>POPUP</category>\n      <filter id=\"canPastePopup\">\n        <rule grant=\"true\">\n          <condition>\n            #{clipboardActions.getCanPasteFromClipboardInside(document)}\n          </condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/action_move_all.gif\" id=\"POPUP_MOVE\" label=\"command.clipboard.moveAll\" link=\"javascript:doMove\">\n      <category>POPUP</category>\n      <filter id=\"canPastePopup\">\n        <rule grant=\"true\">\n          <condition>\n            #{clipboardActions.getCanMoveFromClipboardInside(document)}\n          </condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/rename.png\" id=\"POPUP_RENAME\" label=\"command.rename\" link=\"javascript:doRename\">\n      <category>POPUP</category>\n      <filter-id>user_canedit</filter-id>\n      <filter-id>mutable_document</filter-id>\n      <filter id=\"canRenamePopup\">\n        <rule grant=\"true\">\n          <condition>#{popupHelper.isCurrentContainerDirectParent}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/delete_red.png\" id=\"POPUP_DEL\" label=\"command.trashDocs\" link=\"javascript:doDelete\">\n      <category>POPUP</category>\n      <filter id=\"canDeletePopup\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.getCanDeleteItem(container)}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/group.png\" id=\"POPUP_RIGHTS\" label=\"action.view.rights\" link=\"javascript:doAccessRights\" order=\"10\">\n      <category>POPUP</category>\n      <filter-id>rights</filter-id>\n    </action>\n\n    <action icon=\"/icons/icone_download.gif\" id=\"POPUP_DOWNLOAD\" label=\"command.download\" link=\"javascript:doDownload\" order=\"70\">\n      <category>POPUP</category>\n      <filter id=\"hasContent\">\n        <rule grant=\"true\">\n          <schema>file</schema>\n        </rule>\n      </filter>\n      <filter id=\"documentHasBlobAttached\">\n        <rule grant=\"true\">\n          <condition>\n            #{popupHelper.isDocumentHasBlobAttached(document)}\n          </condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/start_workflow.png\" id=\"POPUP_WORKFLOW\" label=\"action.view.review\" link=\"javascript:doWorkflow\" order=\"90\">\n      <category>POPUP</category>\n      <filter-id>jbpm-process</filter-id>\n      <filter-id>mutable_document</filter-id>\n    </action>\n\n    <action icon=\"/icons/lock.gif\" id=\"POPUP_DOCUMENT_LOCK\" label=\"command.lock\" link=\"javascript:doLock\" order=\"110\">\n      <category>POPUP</category>\n      <filter-id>mutable_document</filter-id>\n      <filter id=\"popup_can_lock_doc\">\n        <rule grant=\"true\">\n          <permission>Write</permission>\n          <condition>#{lockActions.getCanLockDoc(document)}</condition>\n        </rule>\n        <rule grant=\"false\">\n          <facet>Folderish</facet>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/lock.gif\" id=\"POPUP_DOCUMENT_UNLOCK\" label=\"command.unlock\" link=\"javascript:doUnlock\" order=\"130\">\n      <category>POPUP</category>\n      <filter-id>mutable_document</filter-id>\n      <filter id=\"popup_can_unlock_doc\">\n        <rule grant=\"true\">\n          <condition>#{lockActions.getCanUnlockDoc(document)}</condition>\n        </rule>\n        <rule grant=\"false\">\n          <facet>Folderish</facet>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/mail.gif\" id=\"POPUP_sendEmail\" label=\"action.email.document\" link=\"javascript:doSendEmail\" order=\"150\">\n      <category>POPUP</category>\n      <filter-id>not_folder</filter-id>\n    </action>\n\n    <!-- Actions for the document lock/unlock -->\n\n    <action icon=\"\" id=\"DOCUMENT_LOCK\" label=\"command.lock\" link=\"#{lockActions.lockCurrentDocument}\">\n      <category>EDIT_ACTIONS</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_lock</filter-id>\n    </action>\n\n    <action icon=\"\" id=\"DOCUMENT_UNLOCK\" label=\"command.unlock\" link=\"#{lockActions.unlockCurrentDocument}\">\n      <category>EDIT_ACTIONS</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_unlock</filter-id>\n    </action>\n\n    <!-- live edit new document creation links -->\n\n    <action icon=\"/icons/word.png\" id=\"le_create_msword\" label=\"action.liveedit.create.msword\" link=\"#{nxd:liveCreateUrl('application/msword', 'File', 'file', 'content', 'filename')}\" order=\"40\" type=\"bare_link\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_msword</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/xls.png\" id=\"le_create_msexcel\" label=\"action.liveedit.create.msexcel\" link=\"#{nxd:liveCreateUrl('application/vnd.ms-excel', 'File', 'file', 'content', 'filename')}\" order=\"50\" type=\"bare_link\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_msexcel</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/ppt.png\" id=\"le_create_mspowerpoint\" label=\"action.liveedit.create.mspowerpoint\" link=\"#{nxd:liveCreateUrl('application/vnd.ms-powerpoint', 'File', 'file', 'content', 'filename')}\" order=\"60\" type=\"bare_link\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_mspowerpoint</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/odt.png\" id=\"le_create_odwriter\" label=\"action.liveedit.create.writer\" link=\"#{nxd:liveCreateUrl('application/vnd.oasis.opendocument.text', 'File', 'file', 'content', 'filename')}\" order=\"80\" type=\"bare_link\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_odwriter</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/ods.png\" id=\"le_create_odcalc\" label=\"action.liveedit.create.calc\" link=\"#{nxd:liveCreateUrl('application/vnd.oasis.opendocument.spreadsheet', 'File', 'file', 'content', 'filename')}\" order=\"100\" type=\"bare_link\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_odcalc</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/odp.png\" id=\"le_create_odimpress\" label=\"action.liveedit.create.impress\" link=\"#{nxd:liveCreateUrl('application/vnd.oasis.opendocument.presentation', 'File', 'file', 'content', 'filename')}\" order=\"120\" type=\"bare_link\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_odimpress</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <!-- Local Configuration -->\n    <action icon=\"/icons/file.gif\" id=\"TAB_LOCAL_CONFIGURATION\" label=\"action.view.local.configuration\" link=\"/incl/tabs/local_configuration.xhtml\" order=\"70\">\n      <category>TAB_MANAGE_sub_tab</category>\n      <filter-id>has_local_configuration_available</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <!-- actions on document create and edit pages -->\n\n    <action id=\"CREATE_DOCUMENT\" label=\"command.create\" link=\"#{documentActions.saveDocument}\" order=\"0\">\n      <category>CREATE_DOCUMENT_FORM</category>\n      <filter-id>is_not_creating_workspace</filter-id>\n    </action>\n\n    <action id=\"CREATE_WORKSPACE\" label=\"command.create\" link=\"#{documentTemplatesActions.createDocumentFromTemplate}\" order=\"0\">\n      <category>CREATE_DOCUMENT_FORM</category>\n      <filter-id>is_creating_workspace</filter-id>\n    </action>\n\n    <action id=\"CANCEL_DOCUMENT_CREATION\" immediate=\"true\" label=\"command.cancel\" link=\"#{navigationContext.goBack()}\" order=\"50\">\n      <category>CREATE_DOCUMENT_FORM</category>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"EDIT_CURRENT_DOCUMENT\" label=\"command.save\" link=\"#{documentActions.updateCurrentDocument}\" order=\"0\">\n      <category>EDIT_DOCUMENT_FORM</category>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action enabled=\"false\" id=\"EDIT_CURRENT_DOCUMENT_AND_STAY\" label=\"command.save.and.stay\" link=\"#{documentActions.updateDocument(currentDocument, true)}\" order=\"10\">\n      <category>EDIT_DOCUMENT_FORM</category>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <!-- end of actions on document create and edit pages -->\n\n    <!-- footer links -->\n\n    <action id=\"footer_contact_us\" label=\"label.footer.contactUs\" link=\"//www.nuxeo.com/about/contact?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\" order=\"10\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_blogs\" label=\"label.footer.blogs\" link=\"//www.nuxeo.com/blog?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\" order=\"20\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_community\" label=\"label.footer.community\" link=\"//community.nuxeo.com/?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\" order=\"30\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_answers\" label=\"label.footer.answers\" link=\"//answers.nuxeo.com/?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\" order=\"40\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_documentation\" label=\"label.footer.documentation\" link=\"//doc.nuxeo.com/?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\" order=\"50\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_twitter\" label=\"Twitter\" link=\"//twitter.com/nuxeo/?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\" order=\"60\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"styleClass\">twitt</property>\n        <property name=\"labelStyleClass\">footerLabel</property>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_linkedin\" label=\"LinkedIn\" link=\"//www.linkedin.com/groupRegistration?gid=43314&amp;utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\" order=\"70\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"styleClass\">linkedin</property>\n        <property name=\"labelStyleClass\">footerLabel</property>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <!-- end of footer links -->\n\n    <action id=\"bulkImportDocuments\" label=\"label.bulk.import.documents\" order=\"0\" type=\"fancybox\">\n      <category>IMPORT_ACTIONS</category>\n      <properties>\n        <property name=\"include\">/incl/bulk_import_box.xhtml</property>\n        <property name=\"dropContext\">IMPORT_DOCUMENTS</property>\n        <property name=\"autoDimensions\">false</property>\n        <property name=\"width\">70%</property>\n        <property name=\"height\">95%</property>\n        <property name=\"modal\">true</property>\n        <property name=\"scrolling\">auto</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.actions/Contributions/org.nuxeo.ecm.platform.actions--filters",
              "id": "org.nuxeo.ecm.platform.actions--filters",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"view\">\n      <rule grant=\"false\">\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"create\">\n      <rule grant=\"true\">\n        <permission>AddChildren</permission>\n        <facet>Folderish</facet>\n        <type>Workspace</type>\n        <type>TemplateRoot</type>\n        <type>Section</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n      </rule>\n      <rule grant=\"false\">\n        <condition>\n          #{typeManager.getAllowedSubTypes(document.getType(),document).size()==0}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"importFile\">\n      <rule grant=\"true\">\n        <permission>AddChildren</permission>\n        <facet>Folderish</facet>\n        <type>Workspace</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <condition>\n          #{typeManager.getAllowedSubTypes(document.getType(),\n          document).size()\n          &gt; 0}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"edit\">\n      <rule grant=\"false\">\n        <type>Root</type>\n        <type>Domain</type>\n        <type>WorkspaceRoot</type>\n        <type>Workspace</type>\n      </rule>\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"user_canedit\">\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"workspace_edit\">\n      <rule grant=\"true\">\n        <type>Domain</type>\n        <type>WorkspaceRoot</type>\n        <type>Workspace</type>\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"metadata_edit\">\n      <rule grant=\"false\">\n        <type>Root</type>\n      </rule>\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n    <!-- deprecated, use mutable_document instead -->\n    <filter id=\"cannotEdit\">\n      <rule grant=\"false\">\n        <type>Root</type>\n      </rule>\n      <rule grant=\"false\">\n        <condition>!document.isProxy()</condition>\n        <permission>Write</permission>\n      </rule>\n      <rule grant=\"false\">\n        <condition>!document.isProxy()</condition>\n        <permission>Manage everything</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"anonymous\">\n      <rule grant=\"true\">\n        <condition>#{currentUser.anonymous}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"not_anonymous\">\n      <rule grant=\"false\">\n        <condition>#{currentUser.anonymous}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"not_transient_user\">\n      <rule grant=\"false\">\n        <condition>#{currentUser.transient}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"view_content\">\n      <rule grant=\"true\">\n        <permission>ReadChildren</permission>\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"valid_for_publish\">\n      <rule grant=\"true\">\n        <condition>\n          document.getCurrentLifeCycleState().equals(\"approved\")\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"manage\">\n      <rule grant=\"true\">\n        <permission>Manage everything</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"not_review_documents\">\n      <rule grant=\"false\">\n        <condition>\n          document.getCurrentLifeCycleState().equals(\"review\")\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"mutable_document\">\n      <rule grant=\"false\">\n        <facet>Immutable</facet>\n      </rule>\n      <rule grant=\"false\">\n        <type>Root</type>\n      </rule>\n      <rule grant=\"false\">\n        <condition>\n          document.isTrashed()\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"updatable_main_blob\">\n      <rule grant=\"true\">\n        <condition>#{documentActions.canUpdateMainBlob}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"delete_content\">\n      <rule grant=\"true\">\n        <permission>RemoveChildren</permission>\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"rights\">\n      <rule grant=\"true\">\n        <permission>WriteSecurity</permission>\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"currentWorkListIsNotEmpty\">\n      <rule grant=\"false\">\n        <condition>#{clipboardActions.workListEmpty}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canPasteCurrentWorkList\">\n      <rule grant=\"true\">\n        <condition>#{clipboardActions.canPasteWorkList}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canMoveWorkingList\">\n      <rule grant=\"true\">\n        <condition>#{clipboardActions.canMoveWorkingList}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canCopyFromCurrentSelection\">\n      <rule grant=\"true\">\n        <condition>#{clipboardActions.canCopy}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canEditCurrentSelection\">\n      <rule grant=\"true\">\n        <condition>#{bulkEditActions.canEdit}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"can_lock\">\n      <rule grant=\"true\">\n        <permission>Write</permission>\n        <condition>#{lockActions.canLockCurrentDoc}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"can_unlock\">\n      <rule grant=\"true\">\n        <condition>#{lockActions.canUnlockCurrentDoc}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"only_for_manager\">\n      <rule grant=\"true\">\n        <condition>#{userSession.administrator}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"hasAttachedFiles\">\n      <rule grant=\"true\">\n        <schema>files</schema>\n      </rule>\n    </filter>\n\n    <filter id=\"type_section\">\n      <rule grant=\"false\">\n        <type>Section</type>\n      </rule>\n    </filter>\n\n    <filter id=\"denyFilesTab\">\n      <rule grant=\"false\">\n        <type>WebSite</type>\n        <type>WebPage</type>\n        <type>BlogSite</type>\n        <type>BlogPost</type>\n      </rule>\n    </filter>\n\n    <filter id=\"inSection\">\n      <rule grant=\"true\">\n        <type>Section</type>\n        <type>SectionRoot</type>\n      </rule>\n    </filter>\n\n    <filter id=\"outSection\">\n      <rule grant=\"false\">\n        <type>Section</type>\n        <type>SectionRoot</type>\n      </rule>\n    </filter>\n\n    <filter id=\"not_readonly\">\n      <rule grant=\"true\">\n        <condition>#{notReadOnly}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"orderable\">\n      <rule grant=\"true\">\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"not_orderable\">\n      <rule grant=\"false\">\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"canMoveToTop\">\n      <rule grant=\"true\">\n        <condition>#{orderableDocumentActions.canMoveToTop}</condition>\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"canMoveUp\">\n      <rule grant=\"true\">\n        <condition>#{orderableDocumentActions.canMoveUp}</condition>\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"canMoveDown\">\n      <rule grant=\"true\">\n        <condition>#{orderableDocumentActions.canMoveDown}</condition>\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"canMoveToBottom\">\n      <rule grant=\"true\">\n        <condition>#{orderableDocumentActions.canMoveToBottom}</condition>\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"has_local_configuration_available\">\n      <rule grant=\"false\">\n        <condition>\n          #{webActions.getActionsList('LOCAL_CONFIGURATION').isEmpty()}\n        </condition>\n      </rule>\n      <rule grant=\"true\">\n        <permission>Manage everything</permission>\n        <facet>SuperSpace</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"is_creating_workspace\">\n      <rule grant=\"true\">\n        <condition>#{changeableDocument.type == 'Workspace'}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_not_creating_workspace\">\n      <rule grant=\"false\">\n        <condition>#{changeableDocument.type == 'Workspace'}</condition>\n      </rule>\n    </filter>\n\n    <!-- LiveEdit filter -->\n    <filter id=\"is_le_create_msword\">\n      <rule grant=\"true\">\n        <condition>#{msword_liveeditable}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_le_create_msexcel\">\n      <rule grant=\"true\">\n        <condition>#{msexcel_liveeditable}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_le_create_mspowerpoint\">\n      <rule grant=\"true\">\n        <condition>#{mspowerpoint_liveeditable}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_le_create_odwriter\">\n      <rule grant=\"true\">\n        <condition>#{ootext_liveeditable}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_le_create_odcalc\">\n      <rule grant=\"true\">\n        <condition>#{oocalc_liveeditable}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_le_create_odimpress\">\n      <rule grant=\"true\">\n        <condition>#{oopresentation_liveeditable}</condition>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.actions",
          "name": "org.nuxeo.ecm.platform.actions",
          "requirements": [],
          "resolutionOrder": 664,
          "services": [],
          "startOrder": 252,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.actions\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <!-- server actions -->\n\n    <action id=\"documents\" link=\"view_documents\" label=\"label.main.tab.documents\"\n      order=\"40\" type=\"main_tab\">\n      <category>MAIN_TABS</category>\n      <properties>\n        <property name=\"requireDocument\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"non_anonymous_logout\" link=\"logout\" label=\"command.logout\"\n      order=\"100\" type=\"bare_link\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>not_anonymous</filter-id>\n    </action>\n\n    <action id=\"login\" link=\"logout\" label=\"command.login\" order=\"100\"\n      type=\"bare_link\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>anonymous</filter-id>\n    </action>\n\n    <action id=\"newDomain\" link=\"#{documentActions.createDocument('Domain')}\"\n      label=\"command.create.domain\" icon=\"/icons/action_add.gif\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <filter id=\"newDomain\">\n        <rule grant=\"true\">\n          <permission>AddChildren</permission>\n          <type>Root</type>\n        </rule>\n      </filter>\n    </action>\n\n    <!-- domain and roots actions -->\n\n    <action id=\"newWorkspace\" link=\"#{documentActions.createDocument('Workspace')}\"\n      label=\"command.create.workspace\" icon=\"/icons/action_add.gif\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <filter id=\"newWorkspace\">\n        <rule grant=\"true\">\n          <permission>AddChildren</permission>\n          <type>WorkspaceRoot</type>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"newWorkspaceWithWizard\" link=\"create_workspace_wizard\"\n      enabled=\"false\" label=\"command.create.workspace.wizard\" icon=\"/icons/action_add.gif\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <filter id=\"newWorkspaceWizard\">\n        <rule grant=\"true\">\n          <permission>AddChildren</permission>\n          <type>WorkspaceRoot</type>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"newSection\" link=\"#{documentActions.createDocument('Section')}\"\n      label=\"command.create.section\" icon=\"/icons/action_add.gif\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <filter id=\"newSection\">\n        <rule grant=\"true\">\n          <permission>AddChildren</permission>\n          <type>SectionRoot</type>\n        </rule>\n      </filter>\n    </action>\n\n    <!-- generic actions -->\n\n    <action id=\"newDocument\" label=\"action.new.document\" icon=\"/icons/action_add.gif\"\n      type=\"fancybox\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <properties>\n        <property name=\"include\">/select_document_type.xhtml</property>\n      </properties>\n      <filter-id>create</filter-id>\n    </action>\n\n    <!-- disabled by default, see NXP-15369 -->\n    <action id=\"newFile\" enabled=\"false\" label=\"action.new.file\" icon=\"/icons/action_add_file.gif\"\n      type=\"fancybox\">\n      <category>SUBVIEW_UPPER_LIST</category>\n      <properties>\n        <property name=\"include\">/create_file.xhtml</property>\n      </properties>\n      <filter-id>importFile</filter-id>\n    </action>\n\n    <!--\n      tabs are handled by a specific template so links should be paths to\n      template to include in the tab content\n    -->\n    <action id=\"TAB_MANAGE\" type=\"rest_document_link\" order=\"240\"\n      label=\"action.view.manage\" icon=\"/icons/file.gif\" accessKey=\"m\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>manage</filter-id>\n      <filter id=\"TAB_MANAGE_has_subtabs\">\n        <rule grant=\"false\">\n          <condition>\n            #{webActions.getActionsList('TAB_MANAGE_sub_tab').isEmpty()}\n          </condition>\n        </rule>\n      </filter>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n        <property name=\"link\">/incl/tabs/document_manage.xhtml</property>\n      </properties>\n    </action>\n\n    <action id=\"TAB_PERMISSIONS\" link=\"/permissions/document_permissions.xhtml\"\n      order=\"50\" label=\"action.view.permissions\" icon=\"/icons/file.gif\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>isNotVersion</filter-id>\n      <properties>\n        <!-- NXP-18320: disable ajax support on Polymer tabs -->\n        <property name=\"ajaxSupport\">false</property>\n      </properties>\n    </action>\n\n    <action id=\"TAB_VIEW\" link=\"/incl/tabs/document_view.xhtml\" order=\"0\"\n      label=\"action.view.summary\" icon=\"/icons/file.gif\" accessKey=\"v\"\n      type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>view</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"TAB_CONTENT\" link=\"/incl/tabs/document_content.xhtml\"\n      order=\"10\" label=\"action.view.content\" icon=\"/icons/file.gif\" accessKey=\"c\"\n      type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <!--\n        NXP-12715: use same tab on workspaces and sections\n      -->\n      <!--\n        <filter-id>outSection</filter-id>\n      -->\n      <filter-id>view_content</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <!--\n      NXP-12715: use same tab on workspaces and sections => disable this action\n      by default\n    -->\n    <action id=\"TAB_SECTION_CONTENT\" link=\"/incl/tabs/section_content.xhtml\"\n      order=\"10\" label=\"action.view.content\" icon=\"/icons/file.gif\" enabled=\"false\"\n      type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>view_content</filter-id>\n      <filter-id>inSection</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"TAB_TRASH_CONTENT\" link=\"/incl/tabs/document_trash_content.xhtml\"\n      order=\"200\" label=\"action.view.trash.content\" icon=\"/icons/file.gif\">\n      <category>TAB_MANAGE_sub_tab</category>\n      <filter id=\"viewTrash\">\n        <rule grant=\"true\">\n          <permission>Manage everything</permission>\n          <facet>Folderish</facet>\n          <condition>#{deleteActions.trashManagementEnabled}</condition>\n        </rule>\n      </filter>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"print\" link=\"#{restHelper.doPrint(themeActions.defaultTheme)}\"\n      order=\"100\" label=\"label.print\" icon=\"/icons/printer.gif\" accesskey=\"p\">\n      <category>DOCUMENT_UPPER_ACTION_BLANK_TARGET</category>\n    </action>\n\n    <action id=\"TAB_EDIT\" link=\"/incl/tabs/document_edit.xhtml\" order=\"20\"\n      label=\"action.view.modification\" icon=\"/icons/file.gif\" accessKey=\"e\"\n      type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>edit</filter-id>\n      <filter-id>mutable_document</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"TAB_WORKSPACE_EDIT\" link=\"/incl/tabs/document_edit.xhtml\"\n      order=\"22\" label=\"action.view.modification\" icon=\"/icons/file.gif\"\n      accessKey=\"e\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>workspace_edit</filter-id>\n      <filter-id>mutable_document</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"TAB_FILES_EDIT\" link=\"/incl/tabs/document_files_edit.xhtml\"\n      order=\"43\" label=\"action.view.files\" accessKey=\"f\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>edit</filter-id>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>hasAttachedFiles</filter-id>\n      <filter-id>denyFilesTab</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"TAB_RIGHTS\" link=\"/incl/tabs/document_rights.xhtml\"\n      order=\"50\" label=\"action.view.rights\" icon=\"/icons/file.gif\"\n      enabled=\"false\">\n      <category>TAB_MANAGE_sub_tab</category>\n      <filter-id>rights</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <!-- Manage the sub tabs -->\n\n    <!-- Actions on WorkLists -->\n\n    <action id=\"WORKLIST_PASTE\" link=\"#{clipboardActions.pasteWorkingList}\"\n      label=\"command.clipboard.pasteAll\" icon=\"/icons/action_paste_all.gif\">\n      <category>DEFAULT_LIST</category>\n      <category>CLIPBOARD_LIST</category>\n      <filter-id>canPasteCurrentWorkList</filter-id>\n    </action>\n\n    <action id=\"WORKLIST_MOVE\" link=\"#{clipboardActions.moveWorkingList}\"\n      label=\"command.clipboard.moveAll\" icon=\"/icons/action_move_all.gif\">\n      <category>DEFAULT_LIST</category>\n      <category>CLIPBOARD_LIST</category>\n      <filter-id>canMoveWorkingList</filter-id>\n    </action>\n\n    <action id=\"WORKLIST_EXPORT\" link=\"#{clipboardActions.exportWorklistAsZip()}\"\n      label=\"command.clipboard.zipExport\" icon=\"/icons/action_export_zip.gif\">\n      <category>DEFAULT_LIST</category>\n      <filter id=\"currentWorkListIsNotEmpty2\">\n        <rule grant=\"false\">\n          <condition>#{clipboardActions.workListEmpty}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"WORKLIST_CLEAN\" link=\"#{clipboardActions.clearWorkingList()}\"\n      label=\"command.clipboard.delAll\" icon=\"/icons/action_clipboard_deleteall.gif\">\n      <category>DEFAULT_LIST</category>\n      <category>CLIPBOARD_LIST</category>\n      <filter id=\"currentWorkListIsNotEmpty3\">\n        <rule grant=\"false\">\n          <condition>#{clipboardActions.workListEmpty}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <!-- Actions for the document selection -->\n\n    <action id=\"CLIPBOARD_PASTE\" link=\"#{clipboardActions.pasteClipboard}\"\n      label=\"command.clipboard.paste\" icon=\"\" order=\"20\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter id=\"canPastFromClipboard\">\n        <rule grant=\"true\">\n          <condition>#{clipboardActions.canPasteFromClipboard}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"CURRENT_SELECTION_DELETE\" link=\"#{deleteActions.purgeSelection}\"\n      label=\"command.deleteDocs\" icon=\"\" help=\"command.deleteDocs.help\"\n      confirm=\"if( !confirmDeleteDocumentsForever() ) return false;\">\n      <category>CURRENT_SELECTION_TRASH_LIST</category>\n      <filter id=\"canPurge\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.canPurge}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"CURRENT_SELECTION_EMPTY_TRASH\" link=\"#{deleteActions.emptyTrash}\"\n      label=\"command.emptyTrash\" icon=\"\" help=\"command.emptyTrash.help\"\n      confirm=\"if( !confirmEmptyTrash() ) return false;\">\n      <category>CURRENT_SELECTION_TRASH_LIST</category>\n      <filter id=\"canEmptyTrash\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.canEmptyTrash}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"CURRENT_SELECTION_UNDELETE\" link=\"#{deleteActions.undeleteSelection}\"\n      label=\"command.undeleteDocs\" icon=\"\" help=\"command.undeleteDocs.help\"\n      confirm=\"if( !confirmUndeleteDocuments() ) return false;\">\n      <category>CURRENT_SELECTION_TRASH_LIST</category>\n      <filter id=\"canPurge\" />\n    </action>\n\n    <action id=\"CURRENT_SELECTION_TRASH\" link=\"#{deleteActions.deleteSelection}\"\n      label=\"command.trashDocs\" icon=\"\" help=\"command.trashDocs.help\"\n      confirm=\"if( !confirmDeleteDocuments() ) return false;\" order=\"1000\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter id=\"canDelete\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.canDelete}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"CURRENT_SELECTION_EDIT\" type=\"fancybox\" label=\"command.bulk.edit\"\n      icon=\"\" order=\"0\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canEditCurrentSelection</filter-id>\n      <properties>\n        <property name=\"include\">/incl/bulk_edit_box.xhtml</property>\n        <property name=\"layout\">bulkEdit@edit</property>\n        <property name=\"autoDimensions\">false</property>\n        <property name=\"width\">50%</property>\n        <property name=\"height\">70%</property>\n        <property name=\"modal\">true</property>\n        <property name=\"scrolling\">auto</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"CURRENT_SELECTION_COPY\" link=\"#{clipboardActions.putSelectionInClipboard}\"\n      label=\"command.clipboard.copy\" icon=\"\" order=\"10\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canCopyFromCurrentSelection</filter-id>\n    </action>\n\n    <action id=\"CURRENT_SELECTION_ADDTOLIST\" link=\"#{clipboardActions.putSelectionInDefaultWorkList}\"\n      label=\"help.command.clipboard.addworklist\" icon=\"\" order=\"30\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canCopyFromCurrentSelection</filter-id>\n      <filter id=\"no_addtolist_for_domains\">\n        <rule grant=\"false\">\n          <type>Root</type>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"MOVE_TOP\" link=\"#{orderableDocumentActions.moveToTop}\"\n      enabled=\"true\" label=\"command.order.movetotop\" icon=\"\" order=\"200\">\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canMoveToTop</filter-id>\n    </action>\n\n    <action id=\"MOVE_UP\" link=\"#{orderableDocumentActions.moveUp}\"\n      enabled=\"true\" label=\"command.order.moveup\" icon=\"\" order=\"250\">\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canMoveUp</filter-id>\n    </action>\n\n    <action id=\"MOVE_DOWN\" link=\"#{orderableDocumentActions.moveDown}\"\n      enabled=\"true\" label=\"command.order.movedown\" icon=\"\" order=\"300\">\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canMoveDown</filter-id>\n    </action>\n\n    <action id=\"MOVE_BOTTOM\" link=\"#{orderableDocumentActions.moveToBottom}\"\n      enabled=\"true\" label=\"command.order.movetobottom\" icon=\"\" order=\"350\">\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canMoveToBottom</filter-id>\n    </action>\n\n    <action id=\"CURRENT_SELECTION_SECTIONS_TRASH\" link=\"#{deleteActions.deleteSelectionSections}\"\n      label=\"command.trashDocs\" icon=\"\" help=\"command.trashDocs.help\"\n      confirm=\"if( !confirmDeleteDocuments() ) return false;\">\n      <category>CURRENT_SELECTION_SECTIONS_LIST</category>\n      <filter id=\"canDeleteSection\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.canDeleteSections}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"POPUP_VIEW\" link=\"javascript:doView\" label=\"command.view\"\n      icon=\"/icons/view_doc.png\">\n      <category>POPUP</category>\n    </action>\n\n    <action id=\"POPUP_EDIT\" link=\"javascript:doEdit\" label=\"action.view.edit\"\n      icon=\"/icons/application_form_edit.png\">\n      <category>POPUP</category>\n      <filter-id>user_canedit</filter-id>\n      <filter-id>mutable_document</filter-id>\n    </action>\n\n    <action id=\"POPUP_COPY\" link=\"javascript:doCopy\" label=\"command.clipboard.copy\"\n      icon=\"/icons/action_clipboard_copy.gif\">\n      <category>POPUP</category>\n    </action>\n\n    <action id=\"POPUP_PASTE\" link=\"javascript:doPaste\" label=\"command.clipboard.paste\"\n      icon=\"/icons/action_paste_all.gif\">\n      <category>POPUP</category>\n      <filter id=\"canPastePopup\">\n        <rule grant=\"true\">\n          <condition>\n            #{clipboardActions.getCanPasteFromClipboardInside(document)}\n          </condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"POPUP_MOVE\" link=\"javascript:doMove\" label=\"command.clipboard.moveAll\"\n      icon=\"/icons/action_move_all.gif\">\n      <category>POPUP</category>\n      <filter id=\"canPastePopup\">\n        <rule grant=\"true\">\n          <condition>\n            #{clipboardActions.getCanMoveFromClipboardInside(document)}\n          </condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"POPUP_RENAME\" link=\"javascript:doRename\" label=\"command.rename\"\n      icon=\"/icons/rename.png\">\n      <category>POPUP</category>\n      <filter-id>user_canedit</filter-id>\n      <filter-id>mutable_document</filter-id>\n      <filter id=\"canRenamePopup\">\n        <rule grant=\"true\">\n          <condition>#{popupHelper.isCurrentContainerDirectParent}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"POPUP_DEL\" link=\"javascript:doDelete\" label=\"command.trashDocs\"\n      icon=\"/icons/delete_red.png\">\n      <category>POPUP</category>\n      <filter id=\"canDeletePopup\">\n        <rule grant=\"true\">\n          <condition>#{deleteActions.getCanDeleteItem(container)}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"POPUP_RIGHTS\" link=\"javascript:doAccessRights\" order=\"10\"\n      label=\"action.view.rights\" icon=\"/icons/group.png\">\n      <category>POPUP</category>\n      <filter-id>rights</filter-id>\n    </action>\n\n    <action id=\"POPUP_DOWNLOAD\" link=\"javascript:doDownload\" order=\"70\"\n      label=\"command.download\" icon=\"/icons/icone_download.gif\">\n      <category>POPUP</category>\n      <filter id=\"hasContent\">\n        <rule grant=\"true\">\n          <schema>file</schema>\n        </rule>\n      </filter>\n      <filter id=\"documentHasBlobAttached\">\n        <rule grant=\"true\">\n          <condition>\n            #{popupHelper.isDocumentHasBlobAttached(document)}\n          </condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"POPUP_WORKFLOW\" link=\"javascript:doWorkflow\" order=\"90\"\n      label=\"action.view.review\" icon=\"/icons/start_workflow.png\">\n      <category>POPUP</category>\n      <filter-id>jbpm-process</filter-id>\n      <filter-id>mutable_document</filter-id>\n    </action>\n\n    <action id=\"POPUP_DOCUMENT_LOCK\" link=\"javascript:doLock\" order=\"110\"\n      label=\"command.lock\" icon=\"/icons/lock.gif\">\n      <category>POPUP</category>\n      <filter-id>mutable_document</filter-id>\n      <filter id=\"popup_can_lock_doc\">\n        <rule grant=\"true\">\n          <permission>Write</permission>\n          <condition>#{lockActions.getCanLockDoc(document)}</condition>\n        </rule>\n        <rule grant=\"false\">\n          <facet>Folderish</facet>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"POPUP_DOCUMENT_UNLOCK\" link=\"javascript:doUnlock\" order=\"130\"\n      label=\"command.unlock\" icon=\"/icons/lock.gif\">\n      <category>POPUP</category>\n      <filter-id>mutable_document</filter-id>\n      <filter id=\"popup_can_unlock_doc\">\n        <rule grant=\"true\">\n          <condition>#{lockActions.getCanUnlockDoc(document)}</condition>\n        </rule>\n        <rule grant=\"false\">\n          <facet>Folderish</facet>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"POPUP_sendEmail\" link=\"javascript:doSendEmail\" order=\"150\"\n      label=\"action.email.document\" icon=\"/icons/mail.gif\">\n      <category>POPUP</category>\n      <filter-id>not_folder</filter-id>\n    </action>\n\n    <!-- Actions for the document lock/unlock -->\n\n    <action id=\"DOCUMENT_LOCK\" link=\"#{lockActions.lockCurrentDocument}\"\n      label=\"command.lock\" icon=\"\">\n      <category>EDIT_ACTIONS</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_lock</filter-id>\n    </action>\n\n    <action id=\"DOCUMENT_UNLOCK\" link=\"#{lockActions.unlockCurrentDocument}\"\n      label=\"command.unlock\" icon=\"\">\n      <category>EDIT_ACTIONS</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_unlock</filter-id>\n    </action>\n\n    <!-- live edit new document creation links -->\n\n    <action id=\"le_create_msword\" type=\"bare_link\"\n      link=\"#{nxd:liveCreateUrl('application/msword', 'File', 'file', 'content', 'filename')}\"\n      order=\"40\" label=\"action.liveedit.create.msword\" icon=\"/icons/word.png\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_msword</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"le_create_msexcel\" type=\"bare_link\"\n      link=\"#{nxd:liveCreateUrl('application/vnd.ms-excel', 'File', 'file', 'content', 'filename')}\"\n      order=\"50\" label=\"action.liveedit.create.msexcel\" icon=\"/icons/xls.png\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_msexcel</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"le_create_mspowerpoint\" type=\"bare_link\"\n      link=\"#{nxd:liveCreateUrl('application/vnd.ms-powerpoint', 'File', 'file', 'content', 'filename')}\"\n      order=\"60\" label=\"action.liveedit.create.mspowerpoint\" icon=\"/icons/ppt.png\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_mspowerpoint</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"le_create_odwriter\" type=\"bare_link\"\n      link=\"#{nxd:liveCreateUrl('application/vnd.oasis.opendocument.text', 'File', 'file', 'content', 'filename')}\"\n      order=\"80\" label=\"action.liveedit.create.writer\" icon=\"/icons/odt.png\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_odwriter</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"le_create_odcalc\" type=\"bare_link\"\n      link=\"#{nxd:liveCreateUrl('application/vnd.oasis.opendocument.spreadsheet', 'File', 'file', 'content', 'filename')}\"\n      order=\"100\" label=\"action.liveedit.create.calc\" icon=\"/icons/ods.png\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_odcalc</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"le_create_odimpress\" type=\"bare_link\"\n      link=\"#{nxd:liveCreateUrl('application/vnd.oasis.opendocument.presentation', 'File', 'file', 'content', 'filename')}\"\n      order=\"120\" label=\"action.liveedit.create.impress\" icon=\"/icons/odp.png\">\n      <category>LIVEEDIT_CREATE_ACTIONS</category>\n      <filter-id>is_le_create_odimpress</filter-id>\n      <properties>\n        <property name=\"cacheLink\">true</property>\n      </properties>\n    </action>\n\n    <!-- Local Configuration -->\n    <action id=\"TAB_LOCAL_CONFIGURATION\" link=\"/incl/tabs/local_configuration.xhtml\"\n      order=\"70\" label=\"action.view.local.configuration\" icon=\"/icons/file.gif\">\n      <category>TAB_MANAGE_sub_tab</category>\n      <filter-id>has_local_configuration_available</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <!-- actions on document create and edit pages -->\n\n    <action id=\"CREATE_DOCUMENT\" link=\"#{documentActions.saveDocument}\"\n      order=\"0\" label=\"command.create\">\n      <category>CREATE_DOCUMENT_FORM</category>\n      <filter-id>is_not_creating_workspace</filter-id>\n    </action>\n\n    <action id=\"CREATE_WORKSPACE\" link=\"#{documentTemplatesActions.createDocumentFromTemplate}\"\n      order=\"0\" label=\"command.create\">\n      <category>CREATE_DOCUMENT_FORM</category>\n      <filter-id>is_creating_workspace</filter-id>\n    </action>\n\n    <action id=\"CANCEL_DOCUMENT_CREATION\" link=\"#{navigationContext.goBack()}\"\n      order=\"50\" label=\"command.cancel\" immediate=\"true\">\n      <category>CREATE_DOCUMENT_FORM</category>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"EDIT_CURRENT_DOCUMENT\" link=\"#{documentActions.updateCurrentDocument}\"\n      order=\"0\" label=\"command.save\">\n      <category>EDIT_DOCUMENT_FORM</category>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"EDIT_CURRENT_DOCUMENT_AND_STAY\" enabled=\"false\"\n      link=\"#{documentActions.updateDocument(currentDocument, true)}\" order=\"10\"\n      label=\"command.save.and.stay\">\n      <category>EDIT_DOCUMENT_FORM</category>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <!-- end of actions on document create and edit pages -->\n\n    <!-- footer links -->\n\n    <action id=\"footer_contact_us\"\n      link=\"//www.nuxeo.com/about/contact?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\"\n      label=\"label.footer.contactUs\" order=\"10\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_blogs\"\n      link=\"//www.nuxeo.com/blog?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\"\n      label=\"label.footer.blogs\" order=\"20\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_community\"\n      link=\"//community.nuxeo.com/?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\"\n      label=\"label.footer.community\" order=\"30\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_answers\"\n      link=\"//answers.nuxeo.com/?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\"\n      label=\"label.footer.answers\" order=\"40\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_documentation\"\n      link=\"//doc.nuxeo.com/?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\"\n      label=\"label.footer.documentation\" order=\"50\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_twitter\"\n      link=\"//twitter.com/nuxeo/?utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\"\n      label=\"Twitter\" order=\"60\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"styleClass\">twitt</property>\n        <property name=\"labelStyleClass\">footerLabel</property>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <action id=\"footer_linkedin\"\n      link=\"//www.linkedin.com/groupRegistration?gid=43314&amp;utm_source=dm&amp;utm_medium=pages-footer&amp;utm_campaign=products\"\n      label=\"LinkedIn\" order=\"70\" type=\"bare_link\">\n      <category>FOOTER</category>\n      <properties>\n        <property name=\"styleClass\">linkedin</property>\n        <property name=\"labelStyleClass\">footerLabel</property>\n        <property name=\"target\">_blank</property>\n      </properties>\n    </action>\n\n    <!-- end of footer links -->\n\n    <action id=\"bulkImportDocuments\" order=\"0\" label=\"label.bulk.import.documents\"\n      type=\"fancybox\">\n      <category>IMPORT_ACTIONS</category>\n      <properties>\n        <property name=\"include\">/incl/bulk_import_box.xhtml</property>\n        <property name=\"dropContext\">IMPORT_DOCUMENTS</property>\n        <property name=\"autoDimensions\">false</property>\n        <property name=\"width\">70%</property>\n        <property name=\"height\">95%</property>\n        <property name=\"modal\">true</property>\n        <property name=\"scrolling\">auto</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"view\">\n      <rule grant=\"false\">\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"create\">\n      <rule grant=\"true\">\n        <permission>AddChildren</permission>\n        <facet>Folderish</facet>\n        <type>Workspace</type>\n        <type>TemplateRoot</type>\n        <type>Section</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n      </rule>\n      <rule grant=\"false\">\n        <condition>\n          #{typeManager.getAllowedSubTypes(document.getType(),document).size()==0}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"importFile\">\n      <rule grant=\"true\">\n        <permission>AddChildren</permission>\n        <facet>Folderish</facet>\n        <type>Workspace</type>\n        <type>Folder</type>\n        <type>OrderedFolder</type>\n        <condition>\n          #{typeManager.getAllowedSubTypes(document.getType(),\n          document).size()\n          > 0}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"edit\">\n      <rule grant=\"false\">\n        <type>Root</type>\n        <type>Domain</type>\n        <type>WorkspaceRoot</type>\n        <type>Workspace</type>\n      </rule>\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"user_canedit\">\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"workspace_edit\">\n      <rule grant=\"true\">\n        <type>Domain</type>\n        <type>WorkspaceRoot</type>\n        <type>Workspace</type>\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"metadata_edit\">\n      <rule grant=\"false\">\n        <type>Root</type>\n      </rule>\n      <rule grant=\"true\">\n        <permission>Write</permission>\n      </rule>\n    </filter>\n\n    <!-- deprecated, use mutable_document instead -->\n    <filter id=\"cannotEdit\">\n      <rule grant=\"false\">\n        <type>Root</type>\n      </rule>\n      <rule grant=\"false\">\n        <condition>!document.isProxy()</condition>\n        <permission>Write</permission>\n      </rule>\n      <rule grant=\"false\">\n        <condition>!document.isProxy()</condition>\n        <permission>Manage everything</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"anonymous\">\n      <rule grant=\"true\">\n        <condition>#{currentUser.anonymous}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"not_anonymous\">\n      <rule grant=\"false\">\n        <condition>#{currentUser.anonymous}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"not_transient_user\">\n      <rule grant=\"false\">\n        <condition>#{currentUser.transient}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"view_content\">\n      <rule grant=\"true\">\n        <permission>ReadChildren</permission>\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"valid_for_publish\">\n      <rule grant=\"true\">\n        <condition>\n          document.getCurrentLifeCycleState().equals(\"approved\")\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"manage\">\n      <rule grant=\"true\">\n        <permission>Manage everything</permission>\n      </rule>\n    </filter>\n\n    <filter id=\"not_review_documents\">\n      <rule grant=\"false\">\n        <condition>\n          document.getCurrentLifeCycleState().equals(\"review\")\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"mutable_document\">\n      <rule grant=\"false\">\n        <facet>Immutable</facet>\n      </rule>\n      <rule grant=\"false\">\n        <type>Root</type>\n      </rule>\n      <rule grant=\"false\">\n        <condition>\n          document.isTrashed()\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"updatable_main_blob\">\n      <rule grant=\"true\">\n        <condition>#{documentActions.canUpdateMainBlob}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"delete_content\">\n      <rule grant=\"true\">\n        <permission>RemoveChildren</permission>\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"rights\">\n      <rule grant=\"true\">\n        <permission>WriteSecurity</permission>\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"currentWorkListIsNotEmpty\">\n      <rule grant=\"false\">\n        <condition>#{clipboardActions.workListEmpty}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canPasteCurrentWorkList\">\n      <rule grant=\"true\">\n        <condition>#{clipboardActions.canPasteWorkList}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canMoveWorkingList\">\n      <rule grant=\"true\">\n        <condition>#{clipboardActions.canMoveWorkingList}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canCopyFromCurrentSelection\">\n      <rule grant=\"true\">\n        <condition>#{clipboardActions.canCopy}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canEditCurrentSelection\">\n      <rule grant=\"true\">\n        <condition>#{bulkEditActions.canEdit}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"can_lock\">\n      <rule grant=\"true\">\n        <permission>Write</permission>\n        <condition>#{lockActions.canLockCurrentDoc}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"can_unlock\">\n      <rule grant=\"true\">\n        <condition>#{lockActions.canUnlockCurrentDoc}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <facet>Folderish</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"only_for_manager\">\n      <rule grant=\"true\">\n        <condition>#{userSession.administrator}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"hasAttachedFiles\">\n      <rule grant=\"true\">\n        <schema>files</schema>\n      </rule>\n    </filter>\n\n    <filter id=\"type_section\">\n      <rule grant=\"false\">\n        <type>Section</type>\n      </rule>\n    </filter>\n\n    <filter id=\"denyFilesTab\">\n      <rule grant=\"false\">\n        <type>WebSite</type>\n        <type>WebPage</type>\n        <type>BlogSite</type>\n        <type>BlogPost</type>\n      </rule>\n    </filter>\n\n    <filter id=\"inSection\">\n      <rule grant=\"true\">\n        <type>Section</type>\n        <type>SectionRoot</type>\n      </rule>\n    </filter>\n\n    <filter id=\"outSection\">\n      <rule grant=\"false\">\n        <type>Section</type>\n        <type>SectionRoot</type>\n      </rule>\n    </filter>\n\n    <filter id=\"not_readonly\">\n      <rule grant=\"true\">\n        <condition>#{notReadOnly}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"orderable\">\n      <rule grant=\"true\">\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"not_orderable\">\n      <rule grant=\"false\">\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"canMoveToTop\">\n      <rule grant=\"true\">\n        <condition>#{orderableDocumentActions.canMoveToTop}</condition>\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"canMoveUp\">\n      <rule grant=\"true\">\n        <condition>#{orderableDocumentActions.canMoveUp}</condition>\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"canMoveDown\">\n      <rule grant=\"true\">\n        <condition>#{orderableDocumentActions.canMoveDown}</condition>\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"canMoveToBottom\">\n      <rule grant=\"true\">\n        <condition>#{orderableDocumentActions.canMoveToBottom}</condition>\n        <facet>Orderable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"has_local_configuration_available\">\n      <rule grant=\"false\">\n        <condition>\n          #{webActions.getActionsList('LOCAL_CONFIGURATION').isEmpty()}\n        </condition>\n      </rule>\n      <rule grant=\"true\">\n        <permission>Manage everything</permission>\n        <facet>SuperSpace</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"is_creating_workspace\">\n      <rule grant=\"true\">\n        <condition>#{changeableDocument.type == 'Workspace'}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_not_creating_workspace\">\n      <rule grant=\"false\">\n        <condition>#{changeableDocument.type == 'Workspace'}</condition>\n      </rule>\n    </filter>\n\n    <!-- LiveEdit filter -->\n    <filter id=\"is_le_create_msword\">\n      <rule grant=\"true\">\n        <condition>#{msword_liveeditable}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_le_create_msexcel\">\n      <rule grant=\"true\">\n        <condition>#{msexcel_liveeditable}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_le_create_mspowerpoint\">\n      <rule grant=\"true\">\n        <condition>#{mspowerpoint_liveeditable}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_le_create_odwriter\">\n      <rule grant=\"true\">\n        <condition>#{ootext_liveeditable}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_le_create_odcalc\">\n      <rule grant=\"true\">\n        <condition>#{oocalc_liveeditable}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"is_le_create_odimpress\">\n      <rule grant=\"true\">\n        <condition>#{oopresentation_liveeditable}</condition>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    @since 5.8, global widgets used to render actions/tabs in\n    default UI.\n  \n",
          "documentationHtml": "<p>\n&#64;since 5.8, global widgets used to render actions/tabs in\ndefault UI.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.action.widgets/Contributions/org.nuxeo.ecm.platform.action.widgets--widgets",
              "id": "org.nuxeo.ecm.platform.action.widgets--widgets",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"documentTabs\" type=\"tabs\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">#{useAjaxTabs}</property>\n        <property name=\"actions\">#{tabsActionsList}</property>\n        <property name=\"currentTabAction\">#{webActions.currentTabAction}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentSubTabs\" type=\"tabs\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">#{useAjaxTabs}</property>\n        <property name=\"actions\">#{subTabsActionsList}</property>\n        <property name=\"currentTabAction\">#{webActions.currentSubTabAction}</property>\n        <property name=\"styleClass\">subtabsBar</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentActionsUpperButtons\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">DOCUMENT_UPPER_ACTION</property>\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"maxActionsNumber\">5</property>\n        <property name=\"styleClass\">globalActions contextActions</property>\n        <property name=\"actionStyleClass\">button</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentActionSubviewUpperList\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">\n          SUBVIEW_UPPER_LIST, SUBVIEW_UPPER_LIST_HREF\n        </property>\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"maxActionsNumber\">5</property>\n        <property name=\"styleClass\">action_bar</property>\n        <property name=\"actionStyleClass\">button</property>\n      </properties>\n    </widget>\n\n    <widget name=\"headerSearch\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">SEARCH_ACTIONS</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"styleClass\">userSearchBlock</property>\n        <property name=\"actionStyleClass\">advancedSearchLink</property>\n      </properties>\n    </widget>\n\n    <widget name=\"mainTabs\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">MAIN_TABS</property>\n        <property name=\"overallDisplay\">menu</property>\n        <property name=\"styleClass\">mainTabs</property>\n        <property name=\"currentAction\">\n          #{webActions.getCurrentTabAction('MAIN_TABS')}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"userMenuActions\" type=\"documentActionsWithForms\">\n      <labels>\n        <label mode=\"any\">#{messages['label.loggedAsUser']}</label>\n      </labels>\n      <properties mode=\"view\">\n        <property name=\"category\">USER_MENU_ACTIONS</property>\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"overallDisplay\">rollover_menu</property>\n        <property name=\"styleClass\">userMenuActions</property>\n        <property name=\"labelStyleClass\">#{currentUser.name}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"userActions\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">\n          USER_SERVICES, USER_SERVICES_BOTTOM\n        </property>\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"styleClass\">userActions</property>\n      </properties>\n    </widget>\n\n    <widget name=\"footerLinks\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">FOOTER</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"separator\"> | </property>\n        <property name=\"styleClass\">nuxLinks</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentEditButtons\" type=\"documentActions\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">buttons</property>\n        <property name=\"category\">EDIT_DOCUMENT_FORM</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"actionStyleClass\">button</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentCreateButtons\" type=\"documentActions\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">buttons</property>\n        <property name=\"category\">CREATE_DOCUMENT_FORM</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"actionStyleClass\">button</property>\n      </properties>\n    </widget>\n\n    <widget name=\"breadcrumbActions\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">LIVEEDIT_CREATE_ACTIONS,BREADCRUMB_ACTIONS</property>\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"styleClass\">action_bar</property>\n        <property name=\"actionStyleClass\">button</property>\n      </properties>\n    </widget>\n\n    <widget name=\"importActions\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">IMPORT_ACTIONS</property>\n        <property name=\"actionsDisplay\">buttons</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"styleClass\">action_bar</property>\n        <property name=\"actionStyleClass\">importButton</property>\n      </properties>\n    </widget>\n\n    <widget name=\"treeExplorerTabs\" type=\"documentTabsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">TREE_EXPLORER</property>\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"hideSingleTab\">false</property>\n        <property name=\"useAjaxForm\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"blobActions\" type=\"actions\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n      </properties>\n    </widget>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.action.widgets",
          "name": "org.nuxeo.ecm.platform.action.widgets",
          "requirements": [],
          "resolutionOrder": 672,
          "services": [],
          "startOrder": 251,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.action.widgets\">\n\n  <documentation>\n    @since 5.8, global widgets used to render actions/tabs in\n    default UI.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"documentTabs\" type=\"tabs\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">#{useAjaxTabs}</property>\n        <property name=\"actions\">#{tabsActionsList}</property>\n        <property name=\"currentTabAction\">#{webActions.currentTabAction}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentSubTabs\" type=\"tabs\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">#{useAjaxTabs}</property>\n        <property name=\"actions\">#{subTabsActionsList}</property>\n        <property name=\"currentTabAction\">#{webActions.currentSubTabAction}</property>\n        <property name=\"styleClass\">subtabsBar</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentActionsUpperButtons\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">DOCUMENT_UPPER_ACTION</property>\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"maxActionsNumber\">5</property>\n        <property name=\"styleClass\">globalActions contextActions</property>\n        <property name=\"actionStyleClass\">button</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentActionSubviewUpperList\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">\n          SUBVIEW_UPPER_LIST, SUBVIEW_UPPER_LIST_HREF\n        </property>\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"maxActionsNumber\">5</property>\n        <property name=\"styleClass\">action_bar</property>\n        <property name=\"actionStyleClass\">button</property>\n      </properties>\n    </widget>\n\n    <widget name=\"headerSearch\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">SEARCH_ACTIONS</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"styleClass\">userSearchBlock</property>\n        <property name=\"actionStyleClass\">advancedSearchLink</property>\n      </properties>\n    </widget>\n\n    <widget name=\"mainTabs\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">MAIN_TABS</property>\n        <property name=\"overallDisplay\">menu</property>\n        <property name=\"styleClass\">mainTabs</property>\n        <property name=\"currentAction\">\n          #{webActions.getCurrentTabAction('MAIN_TABS')}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"userMenuActions\" type=\"documentActionsWithForms\">\n      <labels>\n        <label mode=\"any\">#{messages['label.loggedAsUser']}</label>\n      </labels>\n      <properties mode=\"view\">\n        <property name=\"category\">USER_MENU_ACTIONS</property>\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"overallDisplay\">rollover_menu</property>\n        <property name=\"styleClass\">userMenuActions</property>\n        <property name=\"labelStyleClass\">#{currentUser.name}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"userActions\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">\n          USER_SERVICES, USER_SERVICES_BOTTOM\n        </property>\n        <property name=\"actionsDisplay\">links</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"styleClass\">userActions</property>\n      </properties>\n    </widget>\n\n    <widget name=\"footerLinks\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">FOOTER</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"separator\"> | </property>\n        <property name=\"styleClass\">nuxLinks</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentEditButtons\" type=\"documentActions\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">buttons</property>\n        <property name=\"category\">EDIT_DOCUMENT_FORM</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"actionStyleClass\">button</property>\n      </properties>\n    </widget>\n\n    <widget name=\"documentCreateButtons\" type=\"documentActions\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">buttons</property>\n        <property name=\"category\">CREATE_DOCUMENT_FORM</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"actionStyleClass\">button</property>\n      </properties>\n    </widget>\n\n    <widget name=\"breadcrumbActions\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">LIVEEDIT_CREATE_ACTIONS,BREADCRUMB_ACTIONS</property>\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"styleClass\">action_bar</property>\n        <property name=\"actionStyleClass\">button</property>\n      </properties>\n    </widget>\n\n    <widget name=\"importActions\" type=\"documentActionsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">IMPORT_ACTIONS</property>\n        <property name=\"actionsDisplay\">buttons</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"styleClass\">action_bar</property>\n        <property name=\"actionStyleClass\">importButton</property>\n      </properties>\n    </widget>\n\n    <widget name=\"treeExplorerTabs\" type=\"documentTabsWithForms\">\n      <properties mode=\"view\">\n        <property name=\"category\">TREE_EXPLORER</property>\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"hideSingleTab\">false</property>\n        <property name=\"useAjaxForm\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"blobActions\" type=\"actions\">\n      <properties mode=\"view\">\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n      </properties>\n    </widget>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/action-widgets-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.automation.features.upload.jsf.contrib/Contributions/org.nuxeo.ecm.automation.features.upload.jsf.contrib--actions",
              "id": "org.nuxeo.ecm.automation.features.upload.jsf.contrib--actions",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action help=\"desc.import.and.add.to.clipboard\" id=\"Chain.ImportClipboard\" label=\"label.import.and.add.to.clipboard\" link=\"\" order=\"10\">\n      <category>Clipboard_CLIPBOARD</category>\n      <filter-id>not_anonymous</filter-id>\n      <properties>\n        <property name=\"chainId\">Blob.ImportClipboard</property>\n      </properties>\n    </action>\n    <action help=\"desc.import.and.add.to.worklist\" id=\"Chain.ImportWorklist\" label=\"label.import.and.add.to.worklist\" link=\"\" order=\"10\">\n      <category>Clipboard_DEFAULT</category>\n      <filter-id>not_anonymous</filter-id>\n      <properties>\n        <property name=\"chainId\"><Blob class=\"ImportWorklist\"/></property>\n      </properties>\n    </action>\n\n    <action help=\"desc.smart.import.file\" id=\"Chain.FileManager.ImportInSeam\" label=\"label.smart.import\" link=\"\" order=\"10\">\n      <category>ContentView</category>\n      <filter-id>create</filter-id>\n      <properties>\n        <property name=\"chainId\">FileManager.ImportInSeam</property>\n      </properties>\n    </action>\n    <action help=\"desc.smart.import.with.md\" id=\"Chain.FileManager.ImportWithMetaDataInSeam\" label=\"label.smart.import.with.md\" link=\"/nuxeo/dndFormCollector.faces?schemas=dc&amp;layouts=dndEdit\" order=\"30\">\n      <category>ContentView</category>\n      <filter-id>create</filter-id>\n      <properties>\n        <property name=\"chainId\">FileManager.ImportWithMetaDataInSeam</property>\n        <property name=\"layout\">dndEdit</property>\n      </properties>\n    </action>\n\n    <action enabled=\"false\" help=\"desc.dnd.attach\" id=\"BlobHolder.Attach\" label=\"label.dnd.attach\" link=\"\" order=\"10\">\n      <category>mainBlob</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>user_canedit</filter-id>\n      <filter-id>updatable_main_blob</filter-id>\n      <properties>\n        <property name=\"operationId\">BlobHolder.AttachOnCurrentDocument</property>\n      </properties>\n    </action>\n    <action help=\"desc.dnd.attach\" id=\"Chain.VersionAndAttachFile\" label=\"label.dnd.attach\" link=\"\" order=\"10\">\n      <category>mainBlob</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>user_canedit</filter-id>\n      <filter-id>updatable_main_blob</filter-id>\n      <properties>\n        <property name=\"chainId\">VersionAndAttachFile</property>\n      </properties>\n    </action>\n    <action help=\"desc.dnd.attachfiles\" id=\"Chain.AttachFiles\" label=\"label.dnd.attachfiles\" link=\"\" order=\"10\">\n      <category>otherBlobs</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>user_canedit</filter-id>\n      <properties>\n        <property name=\"chainId\">AttachFiles</property>\n      </properties>\n    </action>\n    <action enabled=\"false\" help=\"desc.dnd.attachfiles\" id=\"Chain.VersionAndAttachFiles\" label=\"label.dnd.attachfiles\" link=\"\" order=\"10\">\n      <category>otherBlobs</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>user_canedit</filter-id>\n      <properties>\n        <property name=\"chainId\">VersionAndAttachFiles</property>\n      </properties>\n    </action>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.automation.features.upload.jsf.contrib",
          "name": "org.nuxeo.ecm.automation.features.upload.jsf.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.actions"
          ],
          "resolutionOrder": 673,
          "services": [],
          "startOrder": 87,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.automation.features.upload.jsf.contrib\">\n\n  <require>org.nuxeo.ecm.platform.actions</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"Chain.ImportClipboard\"\n      link=\"\"\n      order=\"10\" label=\"label.import.and.add.to.clipboard\"\n      help=\"desc.import.and.add.to.clipboard\">\n      <category>Clipboard_CLIPBOARD</category>\n      <filter-id>not_anonymous</filter-id>\n      <properties>\n        <property name=\"chainId\">Blob.ImportClipboard</property>\n      </properties>\n    </action>\n    <action id=\"Chain.ImportWorklist\"\n      link=\"\"\n      order=\"10\" label=\"label.import.and.add.to.worklist\"\n      help=\"desc.import.and.add.to.worklist\">\n      <category>Clipboard_DEFAULT</category>\n      <filter-id>not_anonymous</filter-id>\n      <properties>\n        <property name=\"chainId\"><Blob class=\"ImportWorklist\"></Blob></property>\n      </properties>\n    </action>\n\n    <action id=\"Chain.FileManager.ImportInSeam\"\n      link=\"\"\n      order=\"10\" label=\"label.smart.import\"\n      help=\"desc.smart.import.file\">\n      <category>ContentView</category>\n      <filter-id>create</filter-id>\n      <properties>\n        <property name=\"chainId\">FileManager.ImportInSeam</property>\n      </properties>\n    </action>\n    <action id=\"Chain.FileManager.ImportWithMetaDataInSeam\"\n      link=\"${org.nuxeo.ecm.contextPath}/dndFormCollector.faces?schemas=dc&#038;layouts=dndEdit\"\n      order=\"30\" label=\"label.smart.import.with.md\"\n      help=\"desc.smart.import.with.md\">\n      <category>ContentView</category>\n      <filter-id>create</filter-id>\n      <properties>\n        <property name=\"chainId\">FileManager.ImportWithMetaDataInSeam</property>\n        <property name=\"layout\">dndEdit</property>\n      </properties>\n    </action>\n\n    <action id=\"BlobHolder.Attach\"\n      link=\"\"\n      order=\"10\" label=\"label.dnd.attach\"\n      help=\"desc.dnd.attach\"\n      enabled=\"false\">\n      <category>mainBlob</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>user_canedit</filter-id>\n      <filter-id>updatable_main_blob</filter-id>\n      <properties>\n        <property name=\"operationId\">BlobHolder.AttachOnCurrentDocument</property>\n      </properties>\n    </action>\n    <action id=\"Chain.VersionAndAttachFile\"\n      link=\"\"\n      order=\"10\" label=\"label.dnd.attach\"\n      help=\"desc.dnd.attach\">\n      <category>mainBlob</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>user_canedit</filter-id>\n      <filter-id>updatable_main_blob</filter-id>\n      <properties>\n        <property name=\"chainId\">VersionAndAttachFile</property>\n      </properties>\n    </action>\n    <action id=\"Chain.AttachFiles\"\n      link=\"\"\n      order=\"10\" label=\"label.dnd.attachfiles\"\n      help=\"desc.dnd.attachfiles\">\n      <category>otherBlobs</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>user_canedit</filter-id>\n      <properties>\n        <property name=\"chainId\">AttachFiles</property>\n      </properties>\n    </action>\n    <action id=\"Chain.VersionAndAttachFiles\"\n      link=\"\"\n      order=\"10\" label=\"label.dnd.attachfiles\"\n      help=\"desc.dnd.attachfiles\"\n      enabled=\"false\">\n      <category>otherBlobs</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>user_canedit</filter-id>\n      <properties>\n        <property name=\"chainId\">VersionAndAttachFiles</property>\n      </properties>\n    </action>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/importOptions-actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Default DocumentsLists used in Nuxeo5.\n\n    @author <a href=\"mailto:td@nuxeo.com\">Thierry Delprat</a>\n",
          "documentationHtml": "<p>\nDefault DocumentsLists used in Nuxeo5.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService--list",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.documentsLists.DefaultDocumentsLists/Contributions/org.nuxeo.ecm.webapp.documentsLists.DefaultDocumentsLists--list",
              "id": "org.nuxeo.ecm.webapp.documentsLists.DefaultDocumentsLists--list",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService",
                "name": "org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"list\" target=\"org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService\">\n\n    <documentsList name=\"DEFAULT\">\n      <category>CLIPBOARD</category>\n      <imageURL>/icons/file_actions.gif</imageURL>\n      <title>workingList.default</title>\n      <defaultInCategory>true</defaultInCategory>\n      <persistent>true</persistent>\n    </documentsList>\n\n    <documentsList name=\"CLIPBOARD\">\n      <category>CLIPBOARD</category>\n      <imageURL>/icons/clipboard.gif</imageURL>\n      <title>workingList.clipboard</title>\n      <defaultInCategory>false</defaultInCategory>\n      <supportAppends>false</supportAppends>\n    </documentsList>\n\n    <documentsList name=\"CURRENT_SELECTION\">\n      <events>\n        <event>folderishDocumentSelectionChanged</event>\n        <event>searchPerformed</event>\n        <event>mainTabsChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n    <documentsList name=\"CURRENT_SELECTION_TRASH\">\n      <events>\n        <event>folderishDocumentSelectionChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n    <documentsList name=\"CURRENT_SELECTION_SECTIONS\">\n      <events>\n        <event>folderishDocumentSelectionChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n    <documentsList name=\"CURRENT_SELECTION_VERSIONS\">\n      <events>\n        <event>documentSelectionChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.documentsLists.DefaultDocumentsLists",
          "name": "org.nuxeo.ecm.webapp.documentsLists.DefaultDocumentsLists",
          "requirements": [],
          "resolutionOrder": 674,
          "services": [],
          "startOrder": 644,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.webapp.documentsLists.DefaultDocumentsLists\">\n\n  <documentation>\n    Default DocumentsLists used in Nuxeo5.\n\n    @author <a href=\"mailto:td@nuxeo.com\">Thierry Delprat</a>\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.webapp.documentsLists.DocumentsListsService\"\n    point=\"list\">\n\n    <documentsList name=\"DEFAULT\">\n      <category>CLIPBOARD</category>\n      <imageURL>/icons/file_actions.gif</imageURL>\n      <title>workingList.default</title>\n      <defaultInCategory>true</defaultInCategory>\n      <persistent>true</persistent>\n    </documentsList>\n\n    <documentsList name=\"CLIPBOARD\">\n      <category>CLIPBOARD</category>\n      <imageURL>/icons/clipboard.gif</imageURL>\n      <title>workingList.clipboard</title>\n      <defaultInCategory>false</defaultInCategory>\n      <supportAppends>false</supportAppends>\n    </documentsList>\n\n    <documentsList name=\"CURRENT_SELECTION\">\n      <events>\n        <event>folderishDocumentSelectionChanged</event>\n        <event>searchPerformed</event>\n        <event>mainTabsChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n    <documentsList name=\"CURRENT_SELECTION_TRASH\">\n      <events>\n        <event>folderishDocumentSelectionChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n    <documentsList name=\"CURRENT_SELECTION_SECTIONS\">\n      <events>\n        <event>folderishDocumentSelectionChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n    <documentsList name=\"CURRENT_SELECTION_VERSIONS\">\n      <events>\n        <event>documentSelectionChanged</event>\n      </events>\n      <isSession>false</isSession>\n    </documentsList>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/documentslists-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.webapp.trashManagement.TrashManagementService",
          "declaredStartOrder": null,
          "documentation": "\n    The TrashManagement service registers a flag that enables / disables the\n    \"recycle bin\"-like behaviour of the delete action\n\n    @author Narcis Paslaru (npaslaru@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe TrashManagement service registers a flag that enables / disables the\n&#34;recycle bin&#34;-like behaviour of the delete action\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webapp.trashManagement.TrashManagementService",
              "descriptors": [
                "org.nuxeo.ecm.webapp.trashManagement.TrashConfigDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.trashManagement.TrashManagementService/ExtensionPoints/org.nuxeo.ecm.webapp.trashManagement.TrashManagementService--config",
              "id": "org.nuxeo.ecm.webapp.trashManagement.TrashManagementService--config",
              "label": "config (org.nuxeo.ecm.webapp.trashManagement.TrashManagementService)",
              "name": "config",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.trashManagement.TrashManagementService",
          "name": "org.nuxeo.ecm.webapp.trashManagement.TrashManagementService",
          "requirements": [],
          "resolutionOrder": 675,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.webapp.trashManagement.TrashManagementService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.trashManagement.TrashManagementService/Services/org.nuxeo.ecm.webapp.trashManagement.TrashManagementService",
              "id": "org.nuxeo.ecm.webapp.trashManagement.TrashManagementService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 908,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webapp.trashManagement.TrashManagementService\">\n  <implementation\n          class=\"org.nuxeo.ecm.webapp.trashManagement.TrashManagementService\" />\n  <service>\n    <provide interface=\"org.nuxeo.ecm.webapp.trashManagement.TrashManagementService\" />\n  </service>\n  <documentation>\n    The TrashManagement service registers a flag that enables / disables the\n    \"recycle bin\"-like behaviour of the delete action\n\n    @author Narcis Paslaru (npaslaru@nuxeo.com)\n  </documentation>\n  <extension-point name=\"config\">\n    <object\n      class=\"org.nuxeo.ecm.webapp.trashManagement.TrashConfigDescriptor\" />\n  </extension-point>\n  <documentation>\n    Flag for trash management behaviour\n    @author Narcis Paslaru (npaslaru@nuxeo.com)\n  </documentation>\n</component>\n",
          "xmlFileName": "/OSGI-INF/trashManagement-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Default trash management used in Nuxeo5\n\n    @author\n    <a href=\"mailto:npaslaru@nuxeo.com\">Narcis Paslaru</a>\n",
          "documentationHtml": "<p>\nDefault trash management used in Nuxeo5\n</p><p>\n<a href=\"mailto:npaslaru&#64;nuxeo.com\">Narcis Paslaru</a></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.webapp.trashManagement.TrashManagementService--config",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.trashManagement.DefaultTrashManagement/Contributions/org.nuxeo.ecm.webapp.trashManagement.DefaultTrashManagement--config",
              "id": "org.nuxeo.ecm.webapp.trashManagement.DefaultTrashManagement--config",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.webapp.trashManagement.TrashManagementService",
                "name": "org.nuxeo.ecm.webapp.trashManagement.TrashManagementService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"config\" target=\"org.nuxeo.ecm.webapp.trashManagement.TrashManagementService\">\n\n    <trashConfig enabled=\"true\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.trashManagement.DefaultTrashManagement",
          "name": "org.nuxeo.ecm.webapp.trashManagement.DefaultTrashManagement",
          "requirements": [],
          "resolutionOrder": 676,
          "services": [],
          "startOrder": 654,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.webapp.trashManagement.DefaultTrashManagement\">\n\n  <documentation>\n    Default trash management used in Nuxeo5\n\n    @author\n    <a href=\"mailto:npaslaru@nuxeo.com\">Narcis Paslaru</a>\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.webapp.trashManagement.TrashManagementService\"\n    point=\"config\">\n\n    <trashConfig enabled=\"true\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/trashManagement-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.webapp.security.UIPermissionService",
          "declaredStartOrder": null,
          "documentation": "\n    This service provides the list of permissions displayed in the UI\n    for a document type.\n\n    Attention: this service is deprecated in favor of the centralized\n    org.nuxeo.ecm.core.security.SecurityService that provides similar UI\n    related features\n\n    Example: @author GeorgeLefter (glefter@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThis service provides the list of permissions displayed in the UI\nfor a document type.\n</p><p>\nAttention: this service is deprecated in favor of the centralized\norg.nuxeo.ecm.core.security.SecurityService that provides similar UI\nrelated features\n</p><p>\nExample: &#64;author GeorgeLefter (glefter&#64;nuxeo.com)\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webapp.security.UIPermissionService",
              "descriptors": [
                "org.nuxeo.ecm.webapp.security.UIPermissionListDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.security.UIPermissionService/ExtensionPoints/org.nuxeo.ecm.webapp.security.UIPermissionService--uiPermissions",
              "id": "org.nuxeo.ecm.webapp.security.UIPermissionService--uiPermissions",
              "label": "uiPermissions (org.nuxeo.ecm.webapp.security.UIPermissionService)",
              "name": "uiPermissions",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.security.UIPermissionService",
          "name": "org.nuxeo.ecm.webapp.security.UIPermissionService",
          "requirements": [],
          "resolutionOrder": 677,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.webapp.security.UIPermissionService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.security.UIPermissionService/Services/org.nuxeo.ecm.webapp.security.UIPermissionService",
              "id": "org.nuxeo.ecm.webapp.security.UIPermissionService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 907,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webapp.security.UIPermissionService\">\n  <implementation\n          class=\"org.nuxeo.ecm.webapp.security.UIPermissionService\" />\n  <service>\n    <provide interface=\"org.nuxeo.ecm.webapp.security.UIPermissionService\" />\n  </service>\n  <documentation>\n    This service provides the list of permissions displayed in the UI\n    for a document type.\n\n    Attention: this service is deprecated in favor of the centralized\n    org.nuxeo.ecm.core.security.SecurityService that provides similar UI\n    related features\n\n    Example: @author GeorgeLefter (glefter@nuxeo.com)\n  </documentation>\n  <extension-point name=\"uiPermissions\">\n    <object\n            class=\"org.nuxeo.ecm.webapp.security.UIPermissionListDescriptor\" />\n  </extension-point>\n  <documentation>\n    Example:\n    <uiPermissionList default=\"true\">\n      <permission name=\"Read\" />\n      <permission name=\"Write\" />\n    </uiPermissionList>\n    <uiPermissionList documentType=\"Section\">\n      <permission name=\"Read\" />\n      <permission name=\"Write\" />\n    </uiPermissionList>\n    <uiPermissionList documentType=\"Workspace\">\n      <permission name=\"Read\" />\n      <permission name=\"Write\" />\n      <permission name=\"Remove\" />\n    </uiPermissionList>\n  </documentation>\n</component>\n",
          "xmlFileName": "/OSGI-INF/uiPermissionService-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.forms.layouts.webapp/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp--widgettypes",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp--widgettypes",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"info_box\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Info box</title>\n        <description>\n          <p>\n            This widget displays common information about the document, like\n            creation date, creator, version, state, contributors, ...\n          </p>\n        </description>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/info_box_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"extendedFile\">\n      <configuration>\n        <sinceVersion>7.3</sinceVersion>\n        <title>Extended File</title>\n        <description>\n          <p>\n            The file widget displays a file uploader/editor in create or edit\n            mode, with additional message tag for errors, and a link to the file\n            in other modes.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;nxu:inputFile /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;nxu:outputFile /&gt; tag in other modes.\n          </p>\n        </description>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>blob</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"file_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_downloadLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_iconRendered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"file_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_downloadLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_iconRendered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <property name=\"template\">/widgets/extended_file_widget.xhtml</property>\n    </widgetType>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.forms.layouts.webapp/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp--widgets",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp--widgets",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"nature\" type=\"suggestOneDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.nature</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:nature</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.nature?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">nature</property>\n        <property name=\"localize\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"subjects\" type=\"suggestManyDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.subject</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"edit\">label.dublincore.subjects.info</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:subjects</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.subjects?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"dbl10n\">true</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">l10nsubjects</property>\n      </properties>\n    </widget>\n\n    <widget name=\"rights\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.rights</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:rights</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.rights?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"source\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.source</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:source</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.source?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"coverage\" type=\"suggestOneDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.coverage</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"edit\">label.dublincore.coverage.info</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:coverage</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.coverage?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"dbl10n\">true</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">l10ncoverage</property>\n      </properties>\n    </widget>\n\n    <widget name=\"created\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.created</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:created</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.created?'hidden':'view'}</mode>\n        <mode value=\"any\">view</mode>\n        <mode value=\"pdf\">pdf</mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"modified\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.modified</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:modified</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.modified?'hidden':'view'}</mode>\n        <mode value=\"any\">view</mode>\n        <mode value=\"pdf\">pdf</mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"format\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.format</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:format</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.format?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"language\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.language</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:language</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.language?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"expired\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.expired</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:expired</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.expired?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"author\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.creator</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"edit\">label.dublincore.author.info</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:creator</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.creator?'hidden':'view'}</mode>\n        <mode value=\"any\">view</mode>\n        <mode value=\"pdf\">pdf</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/single_user_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"contributors\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.contributors</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"edit\">label.dublincore.contributors.info</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:contributors</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.contributors?'hidden':'view'}\n        </mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/contributors_widget.xhtml</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"lastContributor\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.lastContributor</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"edit\">label.dublincore.lastContributor.info</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:lastContributor</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.lastContributor?'hidden':'view'}\n        </mode>\n        <mode value=\"any\">view</mode>\n        <mode value=\"pdf\">pdf</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/single_user_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"title\" type=\"text\">\n      <labels>\n        <label mode=\"any\">title</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:title</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.title?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"description\" type=\"textarea\">\n      <labels>\n        <label mode=\"any\">description</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:description</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.description?'hidden':'view'}\n        </mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"file\" type=\"extendedFile\">\n      <labels>\n        <label mode=\"any\">label.file.content</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>file:content</field>\n        <field>file:content/name</field>\n      </fields>\n    </widget>\n\n    <widget name=\"note\" type=\"richtext_with_mimetype\">\n      <labels>\n        <label mode=\"any\">note</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>note:note</field>\n        <field>note:mime_type</field>\n      </fields>\n    </widget>\n\n    <widget name=\"files\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.files.files</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field schema=\"files\">files</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/files_list_widget_template.xhtml\n        </property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"diff\">true</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"file\" type=\"template\">\n          <labels>\n            <label mode=\"any\"/>\n          </labels>\n          <fields>\n            <field>file</field>\n            <field>file/name</field>\n          </fields>\n          <properties mode=\"any\">\n            <property name=\"template\">\n              /widgets/extended_subfile_widget.xhtml\n            </property>\n          </properties>\n          <properties widgetMode=\"edit\">\n            <property name=\"required\">true</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"header_title_and_permlink\" type=\"title_and_permlink\">\n      <fields>\n        <field/>\n      </fields>\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n    </widget>\n\n    <widget name=\"header_description\" type=\"textarea\">\n      <widgetModes>\n        <mode value=\"any\">\n          #{currentDocument.folder==false or empty\n          currentDocument.dublincore.description ?'hidden':mode}\n        </mode>\n      </widgetModes>\n      <fields>\n        <field>dc:description</field>\n      </fields>\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <properties mode=\"any\">\n        <property name=\"styleClass\">\n          currentDocumentDescription quote\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"bulk_collections\" type=\"multipleDocumentsSuggestion\">\n      <labels>\n        <label mode=\"any\">label.collections</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>contextData['bulk_collections']</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"restoreSeamCtx\">false</property>\n        <property name=\"placeholder\">label.addToCollection.collection.placeHolder</property>\n        <property name=\"operationId\">Collection.Suggestion</property>\n        <property name=\"selectionFormatter\">formatSelectedCollection</property>\n        <property name=\"suggestionFormatter\">formatSuggestedCollection</property>\n        <property name=\"documentSchemas\">dublincore,common</property>\n      </properties>\n    </widget>\n\n    <widget name=\"bulk_tags\" type=\"select_tags\">\n      <labels>\n        <label mode=\"any\">label.search.tagSearch</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>contextData['bulk_tags']</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"canSelectNewTag\">true</property>\n        <property name=\"placeholder\">\n          #{messages['label.search.tags.placeholder']}\n        </property>\n      </properties>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.forms.layouts.webapp/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp--layouts",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp--layouts",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"heading\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>title</widget>\n        </row>\n        <row>\n          <widget>description</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"dublincore\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>nature</widget>\n        </row>\n        <row>\n          <widget>subjects</widget>\n        </row>\n        <row>\n          <widget>rights</widget>\n        </row>\n        <row>\n          <widget>source</widget>\n        </row>\n        <row>\n          <widget>coverage</widget>\n        </row>\n        <row>\n          <widget>created</widget>\n        </row>\n        <row>\n          <widget>modified</widget>\n        </row>\n        <row>\n          <widget>format</widget>\n        </row>\n        <row>\n          <widget>language</widget>\n        </row>\n        <row>\n          <widget>expired</widget>\n        </row>\n        <row>\n          <widget>author</widget>\n        </row>\n        <row>\n          <widget>contributors</widget>\n        </row>\n        <row>\n          <widget>lastContributor</widget>\n        </row>\n      </rows>\n\n    </layout>\n\n    <layout name=\"file\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>file</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"note\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>note</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"files\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>files</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"document_header\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_div_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>header_title_and_permlink</widget>\n        </row>\n        <row>\n          <widget>header_description</widget>\n        </row>\n      </rows>\n    </layout>\n\n\n    <layout name=\"dndEdit\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>nature</widget>\n        </row>\n        <row>\n          <widget>subjects</widget>\n        </row>\n        <row>\n          <widget>rights</widget>\n        </row>\n        <row>\n          <widget>source</widget>\n        </row>\n        <row>\n          <widget>coverage</widget>\n        </row>\n        <row>\n          <widget>format</widget>\n        </row>\n        <row>\n          <widget>language</widget>\n        </row>\n        <row>\n          <widget>expired</widget>\n        </row>\n      </rows>\n\n    </layout>\n\n    <layout name=\"bulkEdit@edit\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_bulkedit_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>bulk_tags</widget>\n        </row>\n        <row>\n          <widget>bulk_collections</widget>\n        </row>\n        <row>\n          <widget>nature</widget>\n        </row>\n        <row>\n          <widget>subjects</widget>\n        </row>\n        <row>\n          <widget>coverage</widget>\n        </row>\n        <row>\n          <widget>expired</widget>\n        </row>\n        <row>\n          <widget>rights</widget>\n        </row>\n        <row>\n          <widget>source</widget>\n        </row>\n        <row>\n          <widget>format</widget>\n        </row>\n        <row>\n          <widget>language</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"bulkImport@create\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>bulk_tags</widget>\n        </row>\n        <row>\n          <widget>bulk_collections</widget>\n        </row>\n        <row>\n          <widget>nature</widget>\n        </row>\n        <row>\n          <widget>subjects</widget>\n        </row>\n        <row>\n          <widget>coverage</widget>\n        </row>\n      </rows>\n    </layout>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.forms.layouts.webapp",
          "name": "org.nuxeo.ecm.platform.forms.layouts.webapp",
          "requirements": [],
          "resolutionOrder": 678,
          "services": [],
          "startOrder": 329,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.forms.layouts.webapp\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"info_box\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Info box</title>\n        <description>\n          <p>\n            This widget displays common information about the document, like\n            creation date, creator, version, state, contributors, ...\n          </p>\n        </description>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/info_box_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"extendedFile\">\n      <configuration>\n        <sinceVersion>7.3</sinceVersion>\n        <title>Extended File</title>\n        <description>\n          <p>\n            The file widget displays a file uploader/editor in create or edit\n            mode, with additional message tag for errors, and a link to the file\n            in other modes.\n          </p>\n          <p>\n            Widgets using this type can provide properties accepted on a\n            &lt;nxu:inputFile /&gt; tag in create or edit mode, and properties\n            accepted on a &lt;nxu:outputFile /&gt; tag in other modes.\n          </p>\n        </description>\n        <categories>\n          <category>configuration_not_ready</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>blob</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"file_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_downloadLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_iconRendered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"file_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_downloadLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">file_iconRendered</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <property name=\"template\">/widgets/extended_file_widget.xhtml</property>\n    </widgetType>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"nature\" type=\"suggestOneDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.nature</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:nature</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.nature?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">nature</property>\n        <property name=\"localize\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"subjects\" type=\"suggestManyDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.subject</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"edit\">label.dublincore.subjects.info</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:subjects</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.subjects?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"dbl10n\">true</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">l10nsubjects</property>\n      </properties>\n    </widget>\n\n    <widget name=\"rights\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.rights</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:rights</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.rights?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"source\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.source</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:source</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.source?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"coverage\" type=\"suggestOneDirectory\">\n      <labels>\n        <label mode=\"any\">label.dublincore.coverage</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"edit\">label.dublincore.coverage.info</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:coverage</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.coverage?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"dbl10n\">true</property>\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"directoryName\">l10ncoverage</property>\n      </properties>\n    </widget>\n\n    <widget name=\"created\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.created</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:created</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.created?'hidden':'view'}</mode>\n        <mode value=\"any\">view</mode>\n        <mode value=\"pdf\">pdf</mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"modified\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.modified</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:modified</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.modified?'hidden':'view'}</mode>\n        <mode value=\"any\">view</mode>\n        <mode value=\"pdf\">pdf</mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"format\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.format</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:format</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.format?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"language\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.dublincore.language</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:language</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.language?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"expired\" type=\"datetime\">\n      <labels>\n        <label mode=\"any\">label.dublincore.expired</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:expired</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.expired?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"format\">#{nxu:basicDateFormatter()}</property>\n      </properties>\n    </widget>\n\n    <widget name=\"author\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.creator</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"edit\">label.dublincore.author.info</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:creator</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.creator?'hidden':'view'}</mode>\n        <mode value=\"any\">view</mode>\n        <mode value=\"pdf\">pdf</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/single_user_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"contributors\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.contributors</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"edit\">label.dublincore.contributors.info</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:contributors</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.contributors?'hidden':'view'}\n        </mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/contributors_widget.xhtml</property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"lastContributor\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.dublincore.lastContributor</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"edit\">label.dublincore.lastContributor.info</label>\n      </helpLabels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:lastContributor</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.lastContributor?'hidden':'view'}\n        </mode>\n        <mode value=\"any\">view</mode>\n        <mode value=\"pdf\">pdf</mode>\n      </widgetModes>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/single_user_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"title\" type=\"text\">\n      <labels>\n        <label mode=\"any\">title</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:title</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.title?'hidden':'view'}</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"description\" type=\"textarea\">\n      <labels>\n        <label mode=\"any\">description</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>dc:description</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"view_summary\">#{empty layoutValue.dc.description?'hidden':'view'}\n        </mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"styleClass\">dataInputText</property>\n      </properties>\n    </widget>\n\n    <widget name=\"file\" type=\"extendedFile\">\n      <labels>\n        <label mode=\"any\">label.file.content</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>file:content</field>\n        <field>file:content/name</field>\n      </fields>\n    </widget>\n\n    <widget name=\"note\" type=\"richtext_with_mimetype\">\n      <labels>\n        <label mode=\"any\">note</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>note:note</field>\n        <field>note:mime_type</field>\n      </fields>\n    </widget>\n\n    <widget name=\"files\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.files.files</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field schema=\"files\">files</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/files_list_widget_template.xhtml\n        </property>\n      </properties>\n      <properties widgetMode=\"edit\">\n        <property name=\"diff\">true</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"file\" type=\"template\">\n          <labels>\n            <label mode=\"any\"></label>\n          </labels>\n          <fields>\n            <field>file</field>\n            <field>file/name</field>\n          </fields>\n          <properties mode=\"any\">\n            <property name=\"template\">\n              /widgets/extended_subfile_widget.xhtml\n            </property>\n          </properties>\n          <properties widgetMode=\"edit\">\n            <property name=\"required\">true</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"header_title_and_permlink\" type=\"title_and_permlink\">\n      <fields>\n        <field></field>\n      </fields>\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n    </widget>\n\n    <widget name=\"header_description\" type=\"textarea\">\n      <widgetModes>\n        <mode value=\"any\">\n          #{currentDocument.folder==false or empty\n          currentDocument.dublincore.description ?'hidden':mode}\n        </mode>\n      </widgetModes>\n      <fields>\n        <field>dc:description</field>\n      </fields>\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <properties mode=\"any\">\n        <property name=\"styleClass\">\n          currentDocumentDescription quote\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"bulk_collections\" type=\"multipleDocumentsSuggestion\">\n      <labels>\n        <label mode=\"any\">label.collections</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>contextData['bulk_collections']</field>\n      </fields>\n      <properties widgetMode=\"any\">\n        <property name=\"minChars\">0</property>\n        <property name=\"hideHelpLabel\">true</property>\n        <property name=\"restoreSeamCtx\">false</property>\n        <property name=\"placeholder\">label.addToCollection.collection.placeHolder</property>\n        <property name=\"operationId\">Collection.Suggestion</property>\n        <property name=\"selectionFormatter\">formatSelectedCollection</property>\n        <property name=\"suggestionFormatter\">formatSuggestedCollection</property>\n        <property name=\"documentSchemas\">dublincore,common</property>\n      </properties>\n    </widget>\n\n    <widget name=\"bulk_tags\" type=\"select_tags\">\n      <labels>\n        <label mode=\"any\">label.search.tagSearch</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>contextData['bulk_tags']</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"canSelectNewTag\">true</property>\n        <property name=\"placeholder\">\n          #{messages['label.search.tags.placeholder']}\n        </property>\n      </properties>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"heading\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>title</widget>\n        </row>\n        <row>\n          <widget>description</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"dublincore\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>nature</widget>\n        </row>\n        <row>\n          <widget>subjects</widget>\n        </row>\n        <row>\n          <widget>rights</widget>\n        </row>\n        <row>\n          <widget>source</widget>\n        </row>\n        <row>\n          <widget>coverage</widget>\n        </row>\n        <row>\n          <widget>created</widget>\n        </row>\n        <row>\n          <widget>modified</widget>\n        </row>\n        <row>\n          <widget>format</widget>\n        </row>\n        <row>\n          <widget>language</widget>\n        </row>\n        <row>\n          <widget>expired</widget>\n        </row>\n        <row>\n          <widget>author</widget>\n        </row>\n        <row>\n          <widget>contributors</widget>\n        </row>\n        <row>\n          <widget>lastContributor</widget>\n        </row>\n      </rows>\n\n    </layout>\n\n    <layout name=\"file\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>file</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"note\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>note</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"files\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>files</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"document_header\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_div_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>header_title_and_permlink</widget>\n        </row>\n        <row>\n          <widget>header_description</widget>\n        </row>\n      </rows>\n    </layout>\n\n\n    <layout name=\"dndEdit\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>nature</widget>\n        </row>\n        <row>\n          <widget>subjects</widget>\n        </row>\n        <row>\n          <widget>rights</widget>\n        </row>\n        <row>\n          <widget>source</widget>\n        </row>\n        <row>\n          <widget>coverage</widget>\n        </row>\n        <row>\n          <widget>format</widget>\n        </row>\n        <row>\n          <widget>language</widget>\n        </row>\n        <row>\n          <widget>expired</widget>\n        </row>\n      </rows>\n\n    </layout>\n\n    <layout name=\"bulkEdit@edit\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_bulkedit_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>bulk_tags</widget>\n        </row>\n        <row>\n          <widget>bulk_collections</widget>\n        </row>\n        <row>\n          <widget>nature</widget>\n        </row>\n        <row>\n          <widget>subjects</widget>\n        </row>\n        <row>\n          <widget>coverage</widget>\n        </row>\n        <row>\n          <widget>expired</widget>\n        </row>\n        <row>\n          <widget>rights</widget>\n        </row>\n        <row>\n          <widget>source</widget>\n        </row>\n        <row>\n          <widget>format</widget>\n        </row>\n        <row>\n          <widget>language</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"bulkImport@create\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>bulk_tags</widget>\n        </row>\n        <row>\n          <widget>bulk_collections</widget>\n        </row>\n        <row>\n          <widget>nature</widget>\n        </row>\n        <row>\n          <widget>subjects</widget>\n        </row>\n        <row>\n          <widget>coverage</widget>\n        </row>\n      </rows>\n    </layout>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouts-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      The widget types from this contribution are intended to be\n      used in the summary view. All these widgets are bound to the\n      currentDocument in the Seam context.\n    \n",
              "documentationHtml": "<p>\nThe widget types from this contribution are intended to be\nused in the summary view. All these widgets are bound to the\ncurrentDocument in the Seam context.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.forms.layouts.webapp.summary/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.summary--widgettypes",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.summary--widgettypes",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <documentation>\n      The widget types from this contribution are intended to be\n      used in the summary view. All these widgets are bound to the\n      currentDocument in the Seam context.\n    </documentation>\n\n    <widgetType name=\"summary_current_document_actions\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <deprecatedVersion>5.6</deprecatedVersion>\n        <title>Actions (lock, restore version)</title>\n        <description>\n          <p>\n            This widget displays the actions on the current document\n            (lock/unlock and undelete by default).\n          </p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n            </ul>\n          </p>\n        </description>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/actions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_custom_actions\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <deprecatedVersion>5.7</deprecatedVersion>\n        <title>Custom actions</title>\n        <description>\n          <p>This widget displays custom actions on the current document.</p>\n          <p>\n            It will display actions in the category given in the 'category'\n            property (defaults to 'DOCUMENT_SUMMARY_CUSTOM_ACTIONS' when not\n            set). The widget label and help label will be displayed above the\n            actions.\n          </p>\n        </description>\n        <categories>\n          <category>summary</category>\n          <category>tab_designer</category>\n        </categories>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"any\">\n            <layout name=\"summary_current_document_custom_actions_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>category</widget>\n                </row>\n                <row>\n                  <widget>actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget>overallDisplay</widget>\n                </row>\n                <row>\n                  <widget>maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget>headerStyleClass</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n                <row>\n                  <widget>subStyleClass</widget>\n                </row>\n                <row>\n                  <widget>moreMenuLabel</widget>\n                </row>\n              </rows>\n              <widget name=\"category\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The category of actions to use (defaults to\n                    DOCUMENT_SUMMARY_CUSTOM_ACTIONS when not set)\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>category</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">actionCategories</property>\n                </properties>\n              </widget>\n              <widget name=\"headerStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Header style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the header, displaying this\n                    widget label. Available since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>headerStyleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"actionsDisplay\" type=\"selectOneListbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Actions display</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to 'buttons', actions will be\n                    displayed as command buttons. If set to 'links', actions\n                    will be displayed as command links. If set to 'icons',\n                    actions will be displayed as icons.\n                    Else (default behaviour),\n                    actions will be displayed as command links and display their\n                    icons when defined.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <!-- still named display here, kept for BBB -->\n                  <field>display</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Icons and links (default)\" itemValue=\"icons_links\"/>\n                  <option itemLabel=\"Icons\" itemValue=\"icons\"/>\n                  <option itemLabel=\"Buttons\" itemValue=\"buttons\"/>\n                  <option itemLabel=\"Links\" itemValue=\"links\"/>\n                </selectOptions>\n              </widget>\n              <widget name=\"overallDisplay\" type=\"selectOneListbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Overall display</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Overall display of actions, available since\n                    5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>overallDisplay</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Vertical block (default)\" itemValue=\"\"/>\n                  <option itemLabel=\"Horizontal block\" itemValue=\"horizontal_block\"/>\n                  <option itemLabel=\"Menu\" itemValue=\"menu\"/>\n                </selectOptions>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the global container div.\n                    Available since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"subStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Sub style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for div containing actions.\n                    Available since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>subStyleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"actionStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Action style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for each action link. Available\n                    since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>subStyleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"maxActionsNumber\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Maximum number of actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Integer indicating the maximum number of\n                    actions to display. When this limit is reached, other\n                    actions are displayed in a menu. Available since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>maxActionsNumber</field>\n                </fields>\n              </widget>\n              <widget name=\"moreMenuLabel\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Label for the \"more\" menu</label>\n                </labels>\n                <fields>\n                  <field>moreMenuLabel</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/custom_actions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_description\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Description</title>\n        <description>\n          <p>This widget displays the description of the currentDocument.</p>\n          <p>\n            Since 5.6, it also displays the creation date, author and version\n            beneath the description.\n          </p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n              <li>currentDocumentVersionInfo: the current document version\n                information</li>\n            </ul>\n          </p>\n        </description>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/description_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_files\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Files</title>\n        <description>\n          <p>This widget displays the files held by the currentDocument</p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n              <li>\n                currentDocumentAsBlobHolder: the BlobHolder on the\n                currentDocument\n              </li>\n              <li>\n                conversionActions: the Seam Bean wrapping the\n                conversionService\n              </li>\n              <li>liveEditHelper: the Seam Bean encapsulating LiveEdit</li>\n            </ul>\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/content_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_view\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>View layout</title>\n        <description>\n          <p>This widget displays the view layouts of the currentDocument</p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n              <li>currentDocumentType: the type of the current document</li>\n            </ul>\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/metadata_custom_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_dublincore\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Dublincore</title>\n        <description>\n          <p>\n            This widget displays the dublincore layout of the currentDocument.\n          </p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n            </ul>\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/metadata_dc_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_tagging\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Tagging</title>\n        <description>\n          This widget displays the tags for the currentDocument and\n          allows to add new ones. It requires the tag service to be deployed.\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n        </properties>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/tagging_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_relations\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Relations</title>\n        <description>\n          This widget displays the in/out relations for the\n          currentDocument. It requires the Relation service to be deployed.\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/relations_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_comments\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Comments</title>\n        <description>\n          This widget displays the comments for the currentDocument.\n          It requires the Comment service to be deployed.\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/comments_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_publications\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Publications</title>\n        <description>\n          This widget displays the publications of the\n          currentDocument. It requires the Publisher service to be deployed.\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/publication_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_lc_and_version\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Life cycle state and version</title>\n        <description>\n          <p>\n            This widget displays the life-cycle state and version of the\n            currentDocument.\n          </p>\n          <p>\n            Since 5.6, this widget is not used by default, it's replaced by the\n            widget named \"summary_current_document_states\".\n          </p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n              <li>\n                currentDocumentVersionInfo: the current document versionning\n                information\n              </li>\n            </ul>\n          </p>\n        </description>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/lc_and_version_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_single_tasks\">\n      <configuration>\n        <sinceVersion>5.3.2</sinceVersion>\n        <title>Tasks</title>\n        <description>\n          <p>\n            This widget displays the single tasks (out of a process instance)\n            attached to current document model.\n          </p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>\n                currentSingleTasks: the single tasks attached to current\n                document\n              </li>\n            </ul>\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <containingForm>true</containingForm>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/single_tasks_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_states\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>States</title>\n        <description>\n          <p>\n            This widget displays current document state (life cycle state and\n            lock status)\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/states_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_contributors\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>Contributors</title>\n        <description>\n          <p>\n            This widget displays the document contributors.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/contributors_widget_template.xhtml\n      </property>\n    </widgetType>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.forms.layouts.webapp.summary/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.summary--widgets",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.summary--widgets",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"summary_current_document_description\" type=\"summary_current_document_description\">\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_actions\" type=\"summary_current_document_actions\">\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_custom_actions\" type=\"summary_current_document_custom_actions\">\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_files\" type=\"summary_current_document_files\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_view\" type=\"summary_current_document_view\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_tagging\" type=\"summary_current_document_tagging\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <properties widgetMode=\"any\">\n        <property name=\"ajaxReRender\">MultiTreeView</property>\n        <property name=\"placeholder\">\n          #{messages['label.add.tag.placeholder']}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"summary_current_document_dublincore\" type=\"summary_current_document_dublincore\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_relations\" type=\"summary_current_document_relations\">\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_comments\" type=\"summary_current_document_comments\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_publications\" type=\"summary_current_document_publications\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_lc_and_version\" type=\"summary_current_document_lc_and_version\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_single_tasks\" type=\"summary_current_document_single_tasks\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"requireSurroundingForm\">false</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_indicators\" type=\"documentActions\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <properties widgetMode=\"view\">\n        <property name=\"category\">SUMMARY_INDICATORS</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"styleClass\">indicators</property>\n      </properties>\n    </widget>\n\n    <widget name=\"summary_current_document_states\" type=\"summary_current_document_states\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_contributors\" type=\"summary_current_document_contributors\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_note_text\" type=\"richtext_with_mimetype\">\n      <fields>\n        <field>note:note</field>\n        <field>note:mime_type</field>\n      </fields>\n      <properties mode=\"view\">\n        <property name=\"translatedHtml\">\n          #{noteActions.translateImageLinks(field_0)}\n        </property>\n        <property name=\"cssClass\">note_content_block</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_panel_top\" type=\"documentActions\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <properties widgetMode=\"any\">\n        <property name=\"category\">SUMMARY_PANEL_TOP</property>\n        <property name=\"styleClass\">summaryActions</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"gridStyleClass\">gridStyle12</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_panel_left\" type=\"documentActions\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <properties widgetMode=\"any\">\n        <property name=\"category\">SUMMARY_PANEL_LEFT</property>\n        <property name=\"styleClass\">summaryActions</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"gridStyleClass\">gridStyle8</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_panel_right\" type=\"documentActions\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <properties widgetMode=\"any\">\n        <property name=\"category\">SUMMARY_PANEL_RIGHT</property>\n        <property name=\"styleClass\">summaryActions</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"gridStyleClass\">gridStyle4</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_panel_bottom\" type=\"documentActions\">\n      <labels>\n        <label mode=\"any\"/>\n      </labels>\n      <properties widgetMode=\"any\">\n        <property name=\"category\">SUMMARY_PANEL_BOTTOM</property>\n        <property name=\"styleClass\">summaryActions</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"gridStyleClass\">gridStyle12</control>\n      </controls>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Actions for stacking widgets inside the summary default\n      widgets.\n\n      @since 5.6\n    \n",
              "documentationHtml": "<p>\nActions for stacking widgets inside the summary default\nwidgets.\n</p><p>\n&#64;since 5.6\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.forms.layouts.webapp.summary/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.summary--actions",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.summary--actions",
              "registrationOrder": 31,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <documentation>\n      Actions for stacking widgets inside the summary default\n      widgets.\n\n      @since 5.6\n    </documentation>\n\n    <!-- default widgets on left panel -->\n\n    <action id=\"summary_note_text\" order=\"100\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_note_text</property>\n      </properties>\n      <filter-id>hasNote</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_files\" order=\"200\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_files</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_view\" order=\"300\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_view</property>\n      </properties>\n      <filter-id>notHasNote</filter-id>\n      <filter-id>denyForFile</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_dublincore\" order=\"350\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_dublincore</property>\n      </properties>\n      <filter-id>hasDublincore</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_comments\" order=\"400\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_comments</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_publications\" order=\"500\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_publications</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_single_tasks\" order=\"600\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_single_tasks</property>\n      </properties>\n    </action>\n\n    <!-- end of default widgets on left panel -->\n\n    <!-- default widgets on right panel -->\n\n    <action id=\"summary_current_document_description\" order=\"100\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_description</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_indicators\" order=\"150\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_indicators</property>\n      </properties>\n    </action>\n\n\n\n    <action id=\"summary_current_document_states\" order=\"200\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_states</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_contributors\" order=\"300\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_contributors</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_custom_actions\" order=\"400\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_custom_actions</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_tagging\" order=\"500\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_tagging</property>\n        <property name=\"disableMultipartForm\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_relations\" order=\"600\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_relations</property>\n      </properties>\n    </action>\n\n    <!-- end of default widgets on right panel -->\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Default layouts displayed on documents summary view\n    \n",
              "documentationHtml": "<p>\nDefault layouts displayed on documents summary view\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.forms.layouts.webapp.summary/Contributions/org.nuxeo.ecm.platform.forms.layouts.webapp.summary--layouts",
              "id": "org.nuxeo.ecm.platform.forms.layouts.webapp.summary--layouts",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <documentation>\n      Default layouts displayed on documents summary view\n    </documentation>\n\n    <layout name=\"grid_summary_layout\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_grid_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>summary_panel_top</widget>\n        </row>\n        <row>\n          <widget>summary_panel_left</widget>\n          <widget>summary_panel_right</widget>\n        </row>\n        <row>\n          <widget>summary_panel_bottom</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <!-- deprecated since 5.6, use a grid layout now -->\n    <layout name=\"default_summary_layout\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_summary_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>summary_current_document_files</widget>\n          <widget>summary_current_document_view</widget>\n          <widget>summary_current_document_comments</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_description</widget>\n          <widget>summary_current_document_states</widget>\n          <widget>summary_current_document_contributors</widget>\n          <widget>summary_current_document_custom_actions</widget>\n          <widget>summary_current_document_tagging</widget>\n          <widget>summary_current_document_relations</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_publications</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_single_tasks</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <!-- deprecated since 5.6, use a grid layout now -->\n    <layout name=\"note_summary_layout\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_summary_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>summary_note_text</widget>\n          <widget>summary_current_document_files</widget>\n          <widget>summary_current_document_comments</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_description</widget>\n          <widget>summary_current_document_states</widget>\n          <widget>summary_current_document_contributors</widget>\n          <widget>summary_current_document_custom_actions</widget>\n          <widget>summary_current_document_tagging</widget>\n          <widget>summary_current_document_relations</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_publications</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_single_tasks</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.forms.layouts.webapp.summary",
          "name": "org.nuxeo.ecm.platform.forms.layouts.webapp.summary",
          "requirements": [],
          "resolutionOrder": 679,
          "services": [],
          "startOrder": 332,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.forms.layouts.webapp.summary\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <documentation>\n      The widget types from this contribution are intended to be\n      used in the summary view. All these widgets are bound to the\n      currentDocument in the Seam context.\n    </documentation>\n\n    <widgetType name=\"summary_current_document_actions\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <deprecatedVersion>5.6</deprecatedVersion>\n        <title>Actions (lock, restore version)</title>\n        <description>\n          <p>\n            This widget displays the actions on the current document\n            (lock/unlock and undelete by default).\n          </p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n            </ul>\n          </p>\n        </description>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/actions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_custom_actions\">\n      <configuration>\n        <sinceVersion>5.4.2</sinceVersion>\n        <deprecatedVersion>5.7</deprecatedVersion>\n        <title>Custom actions</title>\n        <description>\n          <p>This widget displays custom actions on the current document.</p>\n          <p>\n            It will display actions in the category given in the 'category'\n            property (defaults to 'DOCUMENT_SUMMARY_CUSTOM_ACTIONS' when not\n            set). The widget label and help label will be displayed above the\n            actions.\n          </p>\n        </description>\n        <categories>\n          <category>summary</category>\n          <category>tab_designer</category>\n        </categories>\n        <handlingLabels>true</handlingLabels>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"any\">\n            <layout\n              name=\"summary_current_document_custom_actions_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>category</widget>\n                </row>\n                <row>\n                  <widget>actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget>overallDisplay</widget>\n                </row>\n                <row>\n                  <widget>maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget>headerStyleClass</widget>\n                </row>\n                <row>\n                  <widget>styleClass</widget>\n                </row>\n                <row>\n                  <widget>subStyleClass</widget>\n                </row>\n                <row>\n                  <widget>moreMenuLabel</widget>\n                </row>\n              </rows>\n              <widget name=\"category\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">Category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The category of actions to use (defaults to\n                    DOCUMENT_SUMMARY_CUSTOM_ACTIONS when not set)\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>category</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">actionCategories</property>\n                </properties>\n              </widget>\n              <widget name=\"headerStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Header style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the header, displaying this\n                    widget label. Available since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>headerStyleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"actionsDisplay\" type=\"selectOneListbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Actions display</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    If set to 'buttons', actions will be\n                    displayed as command buttons. If set to 'links', actions\n                    will be displayed as command links. If set to 'icons',\n                    actions will be displayed as icons.\n                    Else (default behaviour),\n                    actions will be displayed as command links and display their\n                    icons when defined.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <!-- still named display here, kept for BBB -->\n                  <field>display</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Icons and links (default)\"\n                    itemValue=\"icons_links\" />\n                  <option itemLabel=\"Icons\" itemValue=\"icons\" />\n                  <option itemLabel=\"Buttons\" itemValue=\"buttons\" />\n                  <option itemLabel=\"Links\" itemValue=\"links\" />\n                </selectOptions>\n              </widget>\n              <widget name=\"overallDisplay\" type=\"selectOneListbox\">\n                <categories>\n                  <category>widgetTypeConf</category>\n                </categories>\n                <labels>\n                  <label mode=\"any\">Overall display</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Overall display of actions, available since\n                    5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>overallDisplay</field>\n                </fields>\n                <selectOptions>\n                  <option itemLabel=\"Vertical block (default)\" itemValue=\"\" />\n                  <option itemLabel=\"Horizontal block\" itemValue=\"horizontal_block\" />\n                  <option itemLabel=\"Menu\" itemValue=\"menu\" />\n                </selectOptions>\n              </widget>\n              <widget name=\"styleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for the global container div.\n                    Available since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>styleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"subStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Sub style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for div containing actions.\n                    Available since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>subStyleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"actionStyleClass\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Action style class</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Style class for each action link. Available\n                    since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>subStyleClass</field>\n                </fields>\n              </widget>\n              <widget name=\"maxActionsNumber\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Maximum number of actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    Integer indicating the maximum number of\n                    actions to display. When this limit is reached, other\n                    actions are displayed in a menu. Available since 5.6.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>maxActionsNumber</field>\n                </fields>\n              </widget>\n              <widget name=\"moreMenuLabel\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Label for the \"more\" menu</label>\n                </labels>\n                <fields>\n                  <field>moreMenuLabel</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/custom_actions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_description\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Description</title>\n        <description>\n          <p>This widget displays the description of the currentDocument.</p>\n          <p>\n            Since 5.6, it also displays the creation date, author and version\n            beneath the description.\n          </p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n              <li>currentDocumentVersionInfo: the current document version\n                information</li>\n            </ul>\n          </p>\n        </description>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/description_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_files\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Files</title>\n        <description>\n          <p>This widget displays the files held by the currentDocument</p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n              <li>\n                currentDocumentAsBlobHolder: the BlobHolder on the\n                currentDocument\n              </li>\n              <li>\n                conversionActions: the Seam Bean wrapping the\n                conversionService\n              </li>\n              <li>liveEditHelper: the Seam Bean encapsulating LiveEdit</li>\n            </ul>\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/content_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_view\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>View layout</title>\n        <description>\n          <p>This widget displays the view layouts of the currentDocument</p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n              <li>currentDocumentType: the type of the current document</li>\n            </ul>\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/metadata_custom_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_dublincore\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Dublincore</title>\n        <description>\n          <p>\n            This widget displays the dublincore layout of the currentDocument.\n          </p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n            </ul>\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/metadata_dc_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_tagging\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Tagging</title>\n        <description>\n          This widget displays the tags for the currentDocument and\n          allows to add new ones. It requires the tag service to be deployed.\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n        </properties>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/tagging_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_relations\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Relations</title>\n        <description>\n          This widget displays the in/out relations for the\n          currentDocument. It requires the Relation service to be deployed.\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/relations_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_comments\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Comments</title>\n        <description>\n          This widget displays the comments for the currentDocument.\n          It requires the Comment service to be deployed.\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/comments_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_publications\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Publications</title>\n        <description>\n          This widget displays the publications of the\n          currentDocument. It requires the Publisher service to be deployed.\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/publication_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_lc_and_version\">\n      <configuration>\n        <sinceVersion>5.3.1</sinceVersion>\n        <title>Life cycle state and version</title>\n        <description>\n          <p>\n            This widget displays the life-cycle state and version of the\n            currentDocument.\n          </p>\n          <p>\n            Since 5.6, this widget is not used by default, it's replaced by the\n            widget named \"summary_current_document_states\".\n          </p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>currentDocument: the current document</li>\n              <li>\n                currentDocumentVersionInfo: the current document versionning\n                information\n              </li>\n            </ul>\n          </p>\n        </description>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/lc_and_version_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_single_tasks\">\n      <configuration>\n        <sinceVersion>5.3.2</sinceVersion>\n        <title>Tasks</title>\n        <description>\n          <p>\n            This widget displays the single tasks (out of a process instance)\n            attached to current document model.\n          </p>\n          <p>\n            It requires the following variables to be present in the EL context:\n            <ul>\n              <li>\n                currentSingleTasks: the single tasks attached to current\n                document\n              </li>\n            </ul>\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <containingForm>true</containingForm>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/single_tasks_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_states\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>States</title>\n        <description>\n          <p>\n            This widget displays current document state (life cycle state and\n            lock status)\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/states_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"summary_current_document_contributors\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>Contributors</title>\n        <description>\n          <p>\n            This widget displays the document contributors.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/summary/contributors_widget_template.xhtml\n      </property>\n    </widgetType>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"summary_current_document_description\" type=\"summary_current_document_description\">\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_actions\" type=\"summary_current_document_actions\">\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_custom_actions\" type=\"summary_current_document_custom_actions\">\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_files\" type=\"summary_current_document_files\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_view\" type=\"summary_current_document_view\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_tagging\" type=\"summary_current_document_tagging\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <properties widgetMode=\"any\">\n        <property name=\"ajaxReRender\">MultiTreeView</property>\n        <property name=\"placeholder\">\n          #{messages['label.add.tag.placeholder']}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"summary_current_document_dublincore\" type=\"summary_current_document_dublincore\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_relations\" type=\"summary_current_document_relations\">\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_comments\" type=\"summary_current_document_comments\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_publications\" type=\"summary_current_document_publications\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_lc_and_version\" type=\"summary_current_document_lc_and_version\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_single_tasks\" type=\"summary_current_document_single_tasks\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"requireSurroundingForm\">false</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_indicators\" type=\"documentActions\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <properties widgetMode=\"view\">\n        <property name=\"category\">SUMMARY_INDICATORS</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"styleClass\">indicators</property>\n      </properties>\n    </widget>\n\n    <widget name=\"summary_current_document_states\" type=\"summary_current_document_states\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_current_document_contributors\" type=\"summary_current_document_contributors\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_note_text\" type=\"richtext_with_mimetype\">\n      <fields>\n        <field>note:note</field>\n        <field>note:mime_type</field>\n      </fields>\n      <properties mode=\"view\">\n        <property name=\"translatedHtml\">\n          #{noteActions.translateImageLinks(field_0)}\n        </property>\n        <property name=\"cssClass\">note_content_block</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_panel_top\" type=\"documentActions\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <properties widgetMode=\"any\">\n        <property name=\"category\">SUMMARY_PANEL_TOP</property>\n        <property name=\"styleClass\">summaryActions</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"gridStyleClass\">gridStyle12</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_panel_left\" type=\"documentActions\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <properties widgetMode=\"any\">\n        <property name=\"category\">SUMMARY_PANEL_LEFT</property>\n        <property name=\"styleClass\">summaryActions</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"gridStyleClass\">gridStyle8</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_panel_right\" type=\"documentActions\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <properties widgetMode=\"any\">\n        <property name=\"category\">SUMMARY_PANEL_RIGHT</property>\n        <property name=\"styleClass\">summaryActions</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"gridStyleClass\">gridStyle4</control>\n      </controls>\n    </widget>\n\n    <widget name=\"summary_panel_bottom\" type=\"documentActions\">\n      <labels>\n        <label mode=\"any\"></label>\n      </labels>\n      <properties widgetMode=\"any\">\n        <property name=\"category\">SUMMARY_PANEL_BOTTOM</property>\n        <property name=\"styleClass\">summaryActions</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n        <control name=\"gridStyleClass\">gridStyle12</control>\n      </controls>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <documentation>\n      Actions for stacking widgets inside the summary default\n      widgets.\n\n      @since 5.6\n    </documentation>\n\n    <!-- default widgets on left panel -->\n\n    <action id=\"summary_note_text\" type=\"widget\" order=\"100\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_note_text</property>\n      </properties>\n      <filter-id>hasNote</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_files\" type=\"widget\" order=\"200\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_files</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_view\" type=\"widget\" order=\"300\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_view</property>\n      </properties>\n      <filter-id>notHasNote</filter-id>\n      <filter-id>denyForFile</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_dublincore\" type=\"widget\" order=\"350\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_dublincore</property>\n      </properties>\n      <filter-id>hasDublincore</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_comments\" type=\"widget\" order=\"400\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_comments</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_publications\" type=\"widget\"\n      order=\"500\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_publications</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_single_tasks\" type=\"widget\"\n      order=\"600\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_single_tasks</property>\n      </properties>\n    </action>\n\n    <!-- end of default widgets on left panel -->\n\n    <!-- default widgets on right panel -->\n\n    <action id=\"summary_current_document_description\" type=\"widget\"\n      order=\"100\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_description</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_indicators\" type=\"widget\" order=\"150\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_indicators</property>\n      </properties>\n    </action>\n\n\n\n    <action id=\"summary_current_document_states\" type=\"widget\" order=\"200\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_states</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_contributors\" type=\"widget\"\n      order=\"300\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_contributors</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_custom_actions\" type=\"widget\"\n      order=\"400\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_custom_actions</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_tagging\" type=\"widget\" order=\"500\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_tagging</property>\n        <property name=\"disableMultipartForm\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"summary_current_document_relations\" type=\"widget\" order=\"600\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_current_document_relations</property>\n      </properties>\n    </action>\n\n    <!-- end of default widgets on right panel -->\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <documentation>\n      Default layouts displayed on documents summary view\n    </documentation>\n\n    <layout name=\"grid_summary_layout\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_grid_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>summary_panel_top</widget>\n        </row>\n        <row>\n          <widget>summary_panel_left</widget>\n          <widget>summary_panel_right</widget>\n        </row>\n        <row>\n          <widget>summary_panel_bottom</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <!-- deprecated since 5.6, use a grid layout now -->\n    <layout name=\"default_summary_layout\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_summary_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>summary_current_document_files</widget>\n          <widget>summary_current_document_view</widget>\n          <widget>summary_current_document_comments</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_description</widget>\n          <widget>summary_current_document_states</widget>\n          <widget>summary_current_document_contributors</widget>\n          <widget>summary_current_document_custom_actions</widget>\n          <widget>summary_current_document_tagging</widget>\n          <widget>summary_current_document_relations</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_publications</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_single_tasks</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <!-- deprecated since 5.6, use a grid layout now -->\n    <layout name=\"note_summary_layout\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_summary_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>summary_note_text</widget>\n          <widget>summary_current_document_files</widget>\n          <widget>summary_current_document_comments</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_description</widget>\n          <widget>summary_current_document_states</widget>\n          <widget>summary_current_document_contributors</widget>\n          <widget>summary_current_document_custom_actions</widget>\n          <widget>summary_current_document_tagging</widget>\n          <widget>summary_current_document_relations</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_publications</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_single_tasks</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouts-summary-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.webapp.core.ExceptionHandlingContrib/Contributions/org.nuxeo.ecm.platform.webapp.core.ExceptionHandlingContrib--listener",
              "id": "org.nuxeo.ecm.platform.webapp.core.ExceptionHandlingContrib--listener",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "name": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\">\n    <listener class=\"org.nuxeo.ecm.webapp.shield.SeamExceptionHandlingListener\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--requestdump",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.webapp.core.ExceptionHandlingContrib/Contributions/org.nuxeo.ecm.platform.webapp.core.ExceptionHandlingContrib--requestdump",
              "id": "org.nuxeo.ecm.platform.webapp.core.ExceptionHandlingContrib--requestdump",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "name": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"requestdump\" target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\">\n    <requestdump class=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.DefaultRequestDumper\">\n      <notListed>\n        <attribute>org.jboss.seam.international.messages</attribute>\n      </notListed>\n    </requestdump>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.webapp.core.ExceptionHandlingContrib",
          "name": "org.nuxeo.ecm.platform.webapp.core.ExceptionHandlingContrib",
          "requirements": [
            "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib"
          ],
          "resolutionOrder": 685,
          "services": [],
          "startOrder": 579,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.webapp.core.ExceptionHandlingContrib\">\n  <require>\n    org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib\n  </require>\n\n  <!-- TODO: move this contrib and java classe in ui-web -->\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\"\n    point=\"listener\">\n    <listener class=\"org.nuxeo.ecm.webapp.shield.SeamExceptionHandlingListener\" />\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\"\n    point=\"requestdump\">\n    <requestdump\n      class=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.DefaultRequestDumper\">\n      <notListed>\n        <attribute>org.jboss.seam.international.messages</attribute>\n      </notListed>\n    </requestdump>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/exceptionhandling-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent--remotableSeamBeans",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.coreContrib/Contributions/org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.coreContrib--remotableSeamBeans",
              "id": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.coreContrib--remotableSeamBeans",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent",
                "name": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"remotableSeamBeans\" target=\"org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent\">\n      <remotableSeamBeans>\n          <beans>\n                 <bean>FileManageActions</bean>\n                 <bean>workspaceActions</bean>\n                 <bean>documentActions</bean>\n                 <bean>popupHelper</bean>\n          </beans>\n      </remotableSeamBeans>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.coreContrib",
          "name": "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.coreContrib",
          "requirements": [
            "org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent"
          ],
          "resolutionOrder": 686,
          "services": [],
          "startOrder": 531,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent.coreContrib\">\n\n  <require>org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.SeamRemotingJSBuilderComponent\" point=\"remotableSeamBeans\">\n      <remotableSeamBeans>\n          <beans>\n                 <bean>FileManageActions</bean>\n                 <bean>workspaceActions</bean>\n                 <bean>documentActions</bean>\n                 <bean>popupHelper</bean>\n          </beans>\n      </remotableSeamBeans>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/seamremotingjsbuilder-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.ui.DirectoryUIManager--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.directory.directoryUI/Contributions/org.nuxeo.ecm.webapp.directory.directoryUI--directories",
              "id": "org.nuxeo.ecm.webapp.directory.directoryUI--directories",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.ui.DirectoryUIManager",
                "name": "org.nuxeo.ecm.directory.ui.DirectoryUIManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.ui.DirectoryUIManager\">\n\n    <directory layout=\"vocabulary\" name=\"continent\" sortField=\"label\">\n      <deleteConstraint class=\"org.nuxeo.ecm.directory.api.ui.HierarchicalDirectoryUIDeleteConstraint\">\n        <property name=\"targetDirectory\">country</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n    <directory layout=\"country_vocabulary\" name=\"country\" sortField=\"parent\"/>\n\n    <directory layout=\"vocabulary\" name=\"topic\" sortField=\"label\">\n      <deleteConstraint class=\"org.nuxeo.ecm.directory.api.ui.HierarchicalDirectoryUIDeleteConstraint\">\n        <property name=\"targetDirectory\">subtopic</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n    <directory layout=\"subtopic_vocabulary\" name=\"subtopic\" sortField=\"parent\"/>\n\n    <directory layout=\"vocabulary\" name=\"predicates\" sortField=\"label\"/>\n    <directory layout=\"vocabulary\" name=\"inverse_predicates\" sortField=\"label\"/>\n    <directory layout=\"vocabulary\" name=\"language\" sortField=\"label\"/>\n    <directory layout=\"vocabulary\" name=\"nature\" sortField=\"label\"/>\n\n    <directory layout=\"l10ncoverage_vocabulary\" name=\"l10ncoverage\" sortField=\"id\">\n      <deleteConstraint class=\"org.nuxeo.ecm.directory.api.ui.HierarchicalDirectoryUIDeleteConstraint\">\n        <property name=\"targetDirectory\">l10ncoverage</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n    <directory layout=\"l10nsubjects_vocabulary\" name=\"l10nsubjects\" sortField=\"id\">\n      <deleteConstraint class=\"org.nuxeo.ecm.directory.api.ui.HierarchicalDirectoryUIDeleteConstraint\">\n        <property name=\"targetDirectory\">l10nsubjects</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.directory.directoryUI/Contributions/org.nuxeo.ecm.webapp.directory.directoryUI--widgets",
              "id": "org.nuxeo.ecm.webapp.directory.directoryUI--widgets",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"vocabulary_id\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.id</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vocabulary:id</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"vocabulary_label\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.label</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vocabulary:label</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"vocabulary_obsolete\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.obsolete</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vocabulary:obsolete</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/integer_yes_no_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"vocabulary_order\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.order</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vocabulary:ordering</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">10</property>\n      </properties>\n    </widget>\n\n    <widget name=\"xvocabulary_id\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.id</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>xvocabulary:id</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"xvocabulary_label\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.label</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>xvocabulary:label</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"xvocabulary_obsolete\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.obsolete</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>xvocabulary:obsolete</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/integer_yes_no_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"xvocabulary_order\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.order</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>xvocabulary:ordering</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">10</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nvocabulary_id\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.id</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nvocabulary:id</field>\n      </fields>\n      continent\n      <widgetModes>\n        <mode value=\"edit\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nvocabulary_label_fr\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.l10n.entry.label.french</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nvocabulary:label_fr</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nvocabulary_label_en\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.l10n.entry.label.english</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nvocabulary:label_en</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nvocabulary_obsolete\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.obsolete</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nvocabulary:obsolete</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/integer_yes_no_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nvocabulary_order\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.order</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nvocabulary:ordering</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">10</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nxvocabulary_id\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.id</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nxvocabulary:id</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nxvocabulary_label_fr\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.l10n.entry.label.french</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nxvocabulary:label_fr</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nxvocabulary_label_en\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.l10n.entry.label.english</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nxvocabulary:label_en</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nxvocabulary_obsolete\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.obsolete</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nxvocabulary:obsolete</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/integer_yes_no_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nxvocabulary_order\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.order</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nxvocabulary:ordering</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">10</property>\n      </properties>\n    </widget>\n\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.directory.directoryUI/Contributions/org.nuxeo.ecm.webapp.directory.directoryUI--layouts",
              "id": "org.nuxeo.ecm.webapp.directory.directoryUI--layouts",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"vocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>vocabulary_id</widget>\n        </row>\n        <row>\n          <widget>vocabulary_label</widget>\n        </row>\n        <row>\n          <widget>vocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>vocabulary_order</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"country_vocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>parent</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_id</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_label</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_order</widget>\n        </row>\n      </rows>\n      <widget name=\"parent\" type=\"selectOneDirectory\">\n        <labels>\n          <label mode=\"any\">label.vocabulary.entry.parent</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>xvocabulary:parent</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"directoryName\">continent</property>\n          <property name=\"localize\">true</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"displayObsoleteEntries\">true</property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"subtopic_vocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>parent</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_id</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_label</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_order</widget>\n        </row>\n      </rows>\n      <widget name=\"parent\" type=\"selectOneDirectory\">\n        <labels>\n          <label mode=\"any\">label.vocabulary.entry.parent</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>xvocabulary:parent</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"directoryName\">topic</property>\n          <property name=\"localize\">true</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"displayObsoleteEntries\">true</property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"l10nvocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>l10nvocabulary_id</widget>\n        </row>\n        <row>\n          <widget>l10nvocabulary_label_fr</widget>\n        </row>\n        <row>\n          <widget>l10nvocabulary_label_en</widget>\n        </row>\n        <row>\n          <widget>l10nvocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>l10nvocabulary_order</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"l10ncoverage_vocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>parent</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_id</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_label_en</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_label_fr</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_order</widget>\n        </row>\n      </rows>\n      <widget name=\"parent\" type=\"suggestOneDirectory\">\n        <labels>\n          <label mode=\"any\">label.vocabulary.entry.parent</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>l10nxvocabulary:parent</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"directoryName\">l10ncoverage</property>\n          <property name=\"dbl10n\">true</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"width\">100%</property>\n          <property name=\"minChars\">0</property>\n          <property name=\"hideHelpLabel\">true</property>\n          <property name=\"displayObsoleteEntries\">true</property>\n          <property name=\"canSelectParent\">true</property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"l10nsubjects_vocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>parent</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_id</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_label_en</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_label_fr</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_order</widget>\n        </row>\n      </rows>\n      <widget name=\"parent\" type=\"suggestOneDirectory\">\n        <labels>\n          <label mode=\"any\">label.vocabulary.entry.parent</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>l10nxvocabulary:parent</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"directoryName\">l10nsubjects</property>\n          <property name=\"dbl10n\">true</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"width\">100%</property>\n          <property name=\"minChars\">0</property>\n          <property name=\"hideHelpLabel\">true</property>\n          <property name=\"displayObsoleteEntries\">true</property>\n          <property name=\"canSelectParent\">true</property>\n        </properties>\n      </widget>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.directory.directoryUI",
          "name": "org.nuxeo.ecm.webapp.directory.directoryUI",
          "requirements": [],
          "resolutionOrder": 687,
          "services": [],
          "startOrder": 643,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.webapp.directory.directoryUI\">\n\n  <extension target=\"org.nuxeo.ecm.directory.ui.DirectoryUIManager\"\n    point=\"directories\">\n\n    <directory name=\"continent\" layout=\"vocabulary\" sortField=\"label\">\n      <deleteConstraint\n        class=\"org.nuxeo.ecm.directory.api.ui.HierarchicalDirectoryUIDeleteConstraint\">\n        <property name=\"targetDirectory\">country</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n    <directory name=\"country\" layout=\"country_vocabulary\" sortField=\"parent\" />\n\n    <directory name=\"topic\" layout=\"vocabulary\" sortField=\"label\">\n      <deleteConstraint\n        class=\"org.nuxeo.ecm.directory.api.ui.HierarchicalDirectoryUIDeleteConstraint\">\n        <property name=\"targetDirectory\">subtopic</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n    <directory name=\"subtopic\" layout=\"subtopic_vocabulary\" sortField=\"parent\" />\n\n    <directory name=\"predicates\" layout=\"vocabulary\" sortField=\"label\" />\n    <directory name=\"inverse_predicates\" layout=\"vocabulary\" sortField=\"label\" />\n    <directory name=\"language\" layout=\"vocabulary\" sortField=\"label\" />\n    <directory name=\"nature\" layout=\"vocabulary\" sortField=\"label\" />\n\n    <directory name=\"l10ncoverage\" layout=\"l10ncoverage_vocabulary\"\n      sortField=\"id\">\n      <deleteConstraint\n        class=\"org.nuxeo.ecm.directory.api.ui.HierarchicalDirectoryUIDeleteConstraint\">\n        <property name=\"targetDirectory\">l10ncoverage</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n    <directory name=\"l10nsubjects\" layout=\"l10nsubjects_vocabulary\"\n      sortField=\"id\">\n      <deleteConstraint\n        class=\"org.nuxeo.ecm.directory.api.ui.HierarchicalDirectoryUIDeleteConstraint\">\n        <property name=\"targetDirectory\">l10nsubjects</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n    </directory>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"vocabulary_id\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.id</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vocabulary:id</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"vocabulary_label\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.label</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vocabulary:label</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"vocabulary_obsolete\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.obsolete</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vocabulary:obsolete</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/integer_yes_no_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"vocabulary_order\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.order</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vocabulary:ordering</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">10</property>\n      </properties>\n    </widget>\n\n    <widget name=\"xvocabulary_id\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.id</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>xvocabulary:id</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"xvocabulary_label\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.label</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>xvocabulary:label</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"xvocabulary_obsolete\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.obsolete</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>xvocabulary:obsolete</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/integer_yes_no_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"xvocabulary_order\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.order</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>xvocabulary:ordering</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">10</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nvocabulary_id\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.id</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nvocabulary:id</field>\n      </fields>\n      continent\n      <widgetModes>\n        <mode value=\"edit\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nvocabulary_label_fr\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.l10n.entry.label.french</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nvocabulary:label_fr</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nvocabulary_label_en\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.l10n.entry.label.english</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nvocabulary:label_en</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nvocabulary_obsolete\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.obsolete</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nvocabulary:obsolete</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/integer_yes_no_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nvocabulary_order\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.order</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nvocabulary:ordering</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">10</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nxvocabulary_id\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.id</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nxvocabulary:id</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit\">view</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nxvocabulary_label_fr\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.l10n.entry.label.french</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nxvocabulary:label_fr</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nxvocabulary_label_en\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.l10n.entry.label.english</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nxvocabulary:label_en</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">50</property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nxvocabulary_obsolete\" type=\"template\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.obsolete</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nxvocabulary:obsolete</field>\n      </fields>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/integer_yes_no_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"l10nxvocabulary_order\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.vocabulary.entry.order</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>l10nxvocabulary:ordering</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"size\">10</property>\n      </properties>\n    </widget>\n\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"vocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>vocabulary_id</widget>\n        </row>\n        <row>\n          <widget>vocabulary_label</widget>\n        </row>\n        <row>\n          <widget>vocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>vocabulary_order</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"country_vocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>parent</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_id</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_label</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_order</widget>\n        </row>\n      </rows>\n      <widget name=\"parent\" type=\"selectOneDirectory\">\n        <labels>\n          <label mode=\"any\">label.vocabulary.entry.parent</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>xvocabulary:parent</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"directoryName\">continent</property>\n          <property name=\"localize\">true</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"displayObsoleteEntries\">true</property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"subtopic_vocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>parent</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_id</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_label</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>xvocabulary_order</widget>\n        </row>\n      </rows>\n      <widget name=\"parent\" type=\"selectOneDirectory\">\n        <labels>\n          <label mode=\"any\">label.vocabulary.entry.parent</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>xvocabulary:parent</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"directoryName\">topic</property>\n          <property name=\"localize\">true</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"required\">true</property>\n          <property name=\"displayObsoleteEntries\">true</property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"l10nvocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>l10nvocabulary_id</widget>\n        </row>\n        <row>\n          <widget>l10nvocabulary_label_fr</widget>\n        </row>\n        <row>\n          <widget>l10nvocabulary_label_en</widget>\n        </row>\n        <row>\n          <widget>l10nvocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>l10nvocabulary_order</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"l10ncoverage_vocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>parent</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_id</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_label_en</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_label_fr</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_order</widget>\n        </row>\n      </rows>\n      <widget name=\"parent\" type=\"suggestOneDirectory\">\n        <labels>\n          <label mode=\"any\">label.vocabulary.entry.parent</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>l10nxvocabulary:parent</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"directoryName\">l10ncoverage</property>\n          <property name=\"dbl10n\">true</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"width\">100%</property>\n          <property name=\"minChars\">0</property>\n          <property name=\"hideHelpLabel\">true</property>\n          <property name=\"displayObsoleteEntries\">true</property>\n          <property name=\"canSelectParent\">true</property>\n        </properties>\n      </widget>\n    </layout>\n\n    <layout name=\"l10nsubjects_vocabulary\">\n      <templates>\n        <template mode=\"any\">\n          /directory/directory_layout_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>parent</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_id</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_label_en</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_label_fr</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_obsolete</widget>\n        </row>\n        <row>\n          <widget>l10nxvocabulary_order</widget>\n        </row>\n      </rows>\n      <widget name=\"parent\" type=\"suggestOneDirectory\">\n        <labels>\n          <label mode=\"any\">label.vocabulary.entry.parent</label>\n        </labels>\n        <translated>true</translated>\n        <fields>\n          <field>l10nxvocabulary:parent</field>\n        </fields>\n        <properties mode=\"any\">\n          <property name=\"directoryName\">l10nsubjects</property>\n          <property name=\"dbl10n\">true</property>\n        </properties>\n        <properties widgetMode=\"edit\">\n          <property name=\"width\">100%</property>\n          <property name=\"minChars\">0</property>\n          <property name=\"hideHelpLabel\">true</property>\n          <property name=\"displayObsoleteEntries\">true</property>\n          <property name=\"canSelectParent\">true</property>\n        </properties>\n      </widget>\n    </layout>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/directory-ui-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--chains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.automation.defaultChains/Contributions/org.nuxeo.ecm.platform.automation.defaultChains--chains",
              "id": "org.nuxeo.ecm.platform.automation.defaultChains--chains",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <chain id=\"addCurrentDocumentToWorklist\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Seam.AddToWorklist\"/>\n      <operation id=\"Seam.AddMessage\">\n        <param name=\"severity\" type=\"string\">INFO</param>\n        <param name=\"message\" type=\"string\">label.document.added.to.worklist</param>\n      </operation>\n    </chain>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.automation.defaultChains",
          "name": "org.nuxeo.ecm.platform.automation.defaultChains",
          "requirements": [],
          "resolutionOrder": 688,
          "services": [],
          "startOrder": 278,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.automation.defaultChains\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"chains\">\n\n    <chain id=\"addCurrentDocumentToWorklist\">\n      <operation id=\"Context.FetchDocument\" />\n      <operation id=\"Seam.AddToWorklist\" />\n      <operation id=\"Seam.AddMessage\">\n        <param type=\"string\" name=\"severity\">INFO</param>\n        <param type=\"string\" name=\"message\">label.document.added.to.worklist</param>\n      </operation>\n    </chain>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/chains-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.pageproviders.contrib/Contributions/org.nuxeo.ecm.platform.pageproviders.contrib--providers",
              "id": "org.nuxeo.ecm.platform.pageproviders.contrib--providers",
              "registrationOrder": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"search_media_all\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:primaryType = ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>100</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"search_media_by_title\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:primaryType = ?\n        AND ecm:fulltext LIKE ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>100</pageSize>\n    </coreQueryPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.webapp.provider.ImportFolderPageProvider\" name=\"importFolders\">\n      <pattern escapeParameters=\"true\" quoteParameters=\"false\">\n        SELECT * FROM Document WHERE ecm:fulltext.dc:title LIKE '?%' AND ecm:mixinType !=\n        'HiddenInNavigation' AND ecm:mixinType = 'Folderish'\n        AND ecm:isTrashed = 0\n        AND SORTED_COLUMN IS NOT NULL\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <coreQueryPageProvider name=\"breadcrumb_user_domains\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Domain WHERE ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>0</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"startup_domains\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Domain\n        WHERE ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isTrashed = 0\n        AND ecm:isVersion = 0\n        AND ecm:isProxy = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>2</pageSize>\n\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.platform.pageproviders.contrib",
          "name": "org.nuxeo.ecm.platform.pageproviders.contrib",
          "requirements": [],
          "resolutionOrder": 689,
          "services": [],
          "startOrder": 369,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.pageproviders.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider name=\"search_media_all\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:primaryType = ?\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>100</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"search_media_by_title\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:primaryType = ?\n        AND ecm:fulltext LIKE ?\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>100</pageSize>\n    </coreQueryPageProvider>\n\n    <genericPageProvider name=\"importFolders\"\n      class=\"org.nuxeo.ecm.webapp.provider.ImportFolderPageProvider\">\n      <pattern quoteParameters=\"false\" escapeParameters=\"true\">\n        SELECT * FROM Document WHERE ecm:fulltext.dc:title LIKE '?%' AND ecm:mixinType !=\n        'HiddenInNavigation' AND ecm:mixinType = 'Folderish'\n        AND ecm:isTrashed = 0\n        AND SORTED_COLUMN IS NOT NULL\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <coreQueryPageProvider name=\"breadcrumb_user_domains\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Domain WHERE ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>0</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"startup_domains\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Domain\n        WHERE ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isTrashed = 0\n        AND ecm:isVersion = 0\n        AND ecm:isProxy = 0\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>2</pageSize>\n\n    </coreQueryPageProvider>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageproviders-webapp-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.import.actions/Contributions/org.nuxeo.ecm.webapp.import.actions--actions",
              "id": "org.nuxeo.ecm.webapp.import.actions--actions",
              "registrationOrder": 37,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action help=\"desc.smart.import.file\" id=\"dndBulkImportDocuments\" label=\"label.smart.import\" link=\"\" order=\"10\">\n      <category>IMPORT_DOCUMENTS</category>\n      <properties>\n        <property name=\"chainId\">FileManager.ImportWithMetaDataInSeam</property>\n        <property name=\"layout\">bulkImport@create</property>\n      </properties>\n    </action>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.import.actions",
          "name": "org.nuxeo.ecm.webapp.import.actions",
          "requirements": [],
          "resolutionOrder": 690,
          "services": [],
          "startOrder": 645,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webapp.import.actions\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"dndBulkImportDocuments\" link=\"\"\n      order=\"10\" label=\"label.smart.import\"\n      help=\"desc.smart.import.file\">\n      <category>IMPORT_DOCUMENTS</category>\n      <properties>\n        <property name=\"chainId\">FileManager.ImportWithMetaDataInSeam</property>\n        <property name=\"layout\">bulkImport@create</property>\n      </properties>\n    </action>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/import-actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.info.view/Contributions/org.nuxeo.ecm.webapp.info.view--widgets",
              "id": "org.nuxeo.ecm.webapp.info.view--widgets",
              "registrationOrder": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"infoViewPanelLeft\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">INFO_VIEW_PANEL_LEFT</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">false</control>\n        <control name=\"gridStyleClass\">\n          gridStyle8 infoViewLeft\n        </control>\n      </controls>\n    </widget>\n\n    <widget name=\"infoViewPanelRight\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">INFO_VIEW_PANEL_RIGHT</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">false</control>\n        <control name=\"gridStyleClass\">\n          gridStyle4 compactLayout infoViewRight\n        </control>\n      </controls>\n    </widget>\n\n    <widget name=\"infoViewPreview\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewDocContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"preview\" type=\"documentPreview\">\n          <properties widgetMode=\"view\">\n            <property name=\"width\">100%</property>\n            <property name=\"height\">600px</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"infoViewNote\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewDocContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgetRefs>\n        <widget>summary_note_text</widget>\n      </subWidgetRefs>\n    </widget>\n\n    <widget name=\"infoViewNoPreview\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewDocContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"noPreview\" type=\"template\">\n          <properties mode=\"any\">\n            <property name=\"template\">\n              /widgets/info_view_no_preview_widget.xhtml\n            </property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"infoViewTitleContainer\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewTitle</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"infoViewTitle\" type=\"title_link\">\n          <fields>\n            <field/>\n            <field>ref</field>\n            <field>dc.description</field>\n          </fields>\n          <properties mode=\"any\">\n            <property name=\"target\">_top</property>\n            <property name=\"hideExternalLink\">true</property>\n            <property name=\"hideDownloadLink\">true</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"infoViewInfoLayoutContainer\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewInfoLayout</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"infoViewInfoLayout\" type=\"documentLayout\">\n          <properties widgetMode=\"view\">\n            <property name=\"mode\">view</property>\n            <property name=\"documentMode\">info</property>\n            <property name=\"defaultLayout\">defaultInfoLayout@tabLayout</property>\n            <property name=\"includeAnyMode\">false</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"infoViewActions\" type=\"documentActionsWithForms\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">INFO_VIEW_ACTIONS</property>\n        <property name=\"styleClass\">globalActionBar infoViewActions</property>\n        <property name=\"subStyleClass\">contextActions</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"useAjaxForm\">true</property>\n        <property name=\"ignoreTemplateProperty\">true</property>\n        <property name=\"maxActionsNumber\">5</property>\n      </properties>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.info.view/Contributions/org.nuxeo.ecm.webapp.info.view--actions",
              "id": "org.nuxeo.ecm.webapp.info.view--actions",
              "registrationOrder": 38,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"infoViewPreview\" order=\"100\" type=\"widget\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewPreview</property>\n      </properties>\n      <filter-id>notHasNote</filter-id>\n      <filter-id>view_preview</filter-id>\n      <filter-id>denyInfoViewPreview</filter-id>\n    </action>\n\n    <action id=\"infoViewNote\" order=\"100\" type=\"widget\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewNote</property>\n      </properties>\n      <filter-id>hasNote</filter-id>\n    </action>\n\n    <action id=\"infoViewNoPreview\" order=\"100\" type=\"widget\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewNoPreview</property>\n      </properties>\n      <filter-id>notHasPreview</filter-id>\n    </action>\n\n    <action id=\"infoViewTitleContainer\" order=\"100\" type=\"widget\">\n      <category>INFO_VIEW_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewTitleContainer</property>\n      </properties>\n    </action>\n\n    <action id=\"infoViewInfoLayoutContainer\" order=\"200\" type=\"widget\">\n      <category>INFO_VIEW_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewInfoLayoutContainer</property>\n      </properties>\n    </action>\n\n    <action id=\"infoViewActions\" order=\"300\" type=\"widget\">\n      <category>INFO_VIEW_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewActions</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/pin.png\" id=\"infoAddToFavoritesAction\" label=\"label.addToFavorites\" link=\"#{favoritesActions.addCurrentDocumentToFavorites()}\" order=\"0\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>canAddToFavorites</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/pinned.png\" id=\"infoRemoveFromFavoritesAction\" label=\"label.removeFromFavorites\" link=\"#{favoritesActions.removeCurrentDocumentFromFavorites()}\" order=\"0\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>canRemoveFromFavorites</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/contextual_menu/unlocked.png\" id=\"infoDocumentLock\" label=\"command.lock\" link=\"#{lockActions.lockCurrentDocument}\" order=\"10\" type=\"link\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_lock</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/contextual_menu/locked.png\" id=\"infoDocumentUnlock\" label=\"command.unlock\" link=\"#{lockActions.unlockCurrentDocument}\" order=\"10\" type=\"link\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_unlock</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action accessKey=\"k\" icon=\"/icons/contextual_menu/share.png\" id=\"infoPermalinkAction\" label=\"label.permalink\" order=\"20\" type=\"fancybox\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"include\">/incl/permalink_box.xhtml</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/contextual_menu/download.png\" id=\"infoDownloadAction\" label=\"label.document.download\" link=\"#{operationActionBean.doOperation('downloadFilesZip')}\" order=\"30\" type=\"link\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>documentHasBlobs</filter-id>\n    </action>\n\n    <action icon=\"/icons/contextual_menu/subscribe.png\" id=\"infoSubscribesAllDocNotifications\" label=\"label.subscriptions.follow\" link=\"#{subscriptionAction.updateAllSubscriptions}\" order=\"40\" type=\"link\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>hasNoSubscriptions</filter-id>\n      <filter-id>canSubscribe</filter-id>\n      <filter-id>isNotVersion</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/contextual_menu/unsubscribe.png\" id=\"infoUnsubscribesAllDocNotifications\" label=\"label.subscriptions.unfollow\" link=\"#{subscriptionAction.updateAllSubscriptions}\" order=\"40\" type=\"link\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>hasSubscriptions</filter-id>\n      <filter-id>canSubscribe</filter-id>\n      <filter-id>isNotVersion</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.info.view/Contributions/org.nuxeo.ecm.webapp.info.view--layouts",
              "id": "org.nuxeo.ecm.webapp.info.view--layouts",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"gridInfoViewLayout\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_grid_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>infoViewPanelLeft</widget>\n          <widget>infoViewPanelRight</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"defaultInfoLayout@tabLayout\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_grid_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>infoViewInfoBox</widget>\n        </row>\n        <row>\n          <widget>infoViewMetadata</widget>\n        </row>\n        <row>\n          <widget>infoViewWorkflow</widget>\n        </row>\n        <row>\n          <widget>infoViewTags</widget>\n        </row>\n        <row>\n          <widget>infoViewCollections</widget>\n        </row>\n        <row>\n          <widget>infoViewComments</widget>\n        </row>\n      </rows>\n      <widget name=\"infoViewInfoBox\" type=\"container\">\n        <subWidgets>\n          <widget name=\"infoBox\" type=\"info_box\"/>\n        </subWidgets>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n        <controls mode=\"any\">\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n      </widget>\n      <widget name=\"infoViewMetadata\" type=\"container\">\n        <labels>\n          <label mode=\"any\">action.view.metadata</label>\n        </labels>\n        <translated>true</translated>\n        <subWidgets>\n          <widget name=\"metadata\" type=\"documentLayout\">\n            <properties widgetMode=\"view\">\n              <property name=\"mode\">view</property>\n              <property name=\"documentMode\">view</property>\n              <property name=\"includeAnyMode\">false</property>\n            </properties>\n            <controls mode=\"any\">\n              <control name=\"requireSurroundingForm\">true</control>\n            </controls>\n          </widget>\n        </subWidgets>\n        <controls mode=\"any\">\n          <control name=\"handleLabels\">true</control>\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"infoViewWorkflow\" type=\"container\">\n        <labels>\n          <label mode=\"any\">label.document.routing.workflow</label>\n        </labels>\n        <translated>true</translated>\n        <subWidgets>\n          <widget name=\"workflow\" type=\"summary_document_route\">\n            <controls mode=\"any\">\n              <control name=\"requireSurroundingForm\">true</control>\n            </controls>\n          </widget>\n        </subWidgets>\n        <controls mode=\"any\">\n          <control name=\"handleLabels\">true</control>\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n        <widgetModes>\n          <mode value=\"view\">#{routingActions.filteredRouteModels.size() &gt; 0 ?\n            'view' : 'hidden'}</mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"infoViewTags\" type=\"container\">\n        <labels>\n          <label mode=\"any\">action.view.tagging</label>\n        </labels>\n        <translated>true</translated>\n        <subWidgets>\n          <widget name=\"tags\" type=\"summary_current_document_tagging\">\n            <controls mode=\"any\">\n              <control name=\"requireSurroundingForm\">true</control>\n            </controls>\n            <properties widgetMode=\"any\">\n              <property name=\"placeholder\">\n                #{messages['label.add.tag.placeholder']}\n              </property>\n            </properties>\n          </widget>\n        </subWidgets>\n        <controls mode=\"any\">\n          <control name=\"handleLabels\">true</control>\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"infoViewCollections\" type=\"container\">\n        <labels>\n          <label mode=\"any\">label.collections</label>\n        </labels>\n        <translated>true</translated>\n        <subWidgets>\n          <widget name=\"collections\" type=\"summary_current_document_collections\"/>\n        </subWidgets>\n        <controls mode=\"any\">\n          <control name=\"handleLabels\">true</control>\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n        <widgetModes>\n          <mode value=\"view\">#{collectionActions.hasCurrentDocumentVisibleCollection()\n            ? 'view' : 'hidden'}</mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"infoViewComments\" type=\"container\">\n        <labels>\n          <label mode=\"any\">#{nxu:translate('label.summary.comments',\n            documentThreadedComments.size)}</label>\n        </labels>\n        <translated>false</translated>\n        <subWidgets>\n          <widget name=\"comments\" type=\"summary_current_document_comments\">\n            <controls mode=\"any\">\n              <control name=\"requireSurroundingForm\">true</control>\n            </controls>\n          </widget>\n        </subWidgets>\n        <controls mode=\"any\">\n          <control name=\"handleLabels\">true</control>\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n        <widgetModes>\n          <mode value=\"view\">#{documentThreadedComments.size() &gt; 0 ? 'view' :\n            'hidden'}</mode>\n        </widgetModes>\n      </widget>\n    </layout>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.info.view/Contributions/org.nuxeo.ecm.webapp.info.view--filters",
              "id": "org.nuxeo.ecm.webapp.info.view--filters",
              "registrationOrder": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter append=\"true\" id=\"denyInfoViewPreview\">\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core/org.nuxeo.ecm.webapp.info.view",
          "name": "org.nuxeo.ecm.webapp.info.view",
          "requirements": [],
          "resolutionOrder": 691,
          "services": [],
          "startOrder": 646,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webapp.info.view\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"infoViewPanelLeft\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">INFO_VIEW_PANEL_LEFT</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">false</control>\n        <control name=\"gridStyleClass\">\n          gridStyle8 infoViewLeft\n        </control>\n      </controls>\n    </widget>\n\n    <widget name=\"infoViewPanelRight\" type=\"documentActions\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">INFO_VIEW_PANEL_RIGHT</property>\n      </properties>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">false</control>\n        <control name=\"gridStyleClass\">\n          gridStyle4 compactLayout infoViewRight\n        </control>\n      </controls>\n    </widget>\n\n    <widget name=\"infoViewPreview\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewDocContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"preview\" type=\"documentPreview\">\n          <properties widgetMode=\"view\">\n            <property name=\"width\">100%</property>\n            <property name=\"height\">600px</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"infoViewNote\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewDocContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgetRefs>\n        <widget>summary_note_text</widget>\n      </subWidgetRefs>\n    </widget>\n\n    <widget name=\"infoViewNoPreview\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewDocContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"noPreview\" type=\"template\">\n          <properties mode=\"any\">\n            <property name=\"template\">\n              /widgets/info_view_no_preview_widget.xhtml\n            </property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"infoViewTitleContainer\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewTitle</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"infoViewTitle\" type=\"title_link\">\n          <fields>\n            <field></field>\n            <field>ref</field>\n            <field>dc.description</field>\n          </fields>\n          <properties mode=\"any\">\n            <property name=\"target\">_top</property>\n            <property name=\"hideExternalLink\">true</property>\n            <property name=\"hideDownloadLink\">true</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"infoViewInfoLayoutContainer\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewInfoLayout</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"infoViewInfoLayout\" type=\"documentLayout\">\n          <properties widgetMode=\"view\">\n            <property name=\"mode\">view</property>\n            <property name=\"documentMode\">info</property>\n            <property name=\"defaultLayout\">defaultInfoLayout@tabLayout</property>\n            <property name=\"includeAnyMode\">false</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"infoViewActions\" type=\"documentActionsWithForms\">\n      <properties widgetMode=\"view\">\n        <property name=\"category\">INFO_VIEW_ACTIONS</property>\n        <property name=\"styleClass\">globalActionBar infoViewActions</property>\n        <property name=\"subStyleClass\">contextActions</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"useAjaxForm\">true</property>\n        <property name=\"ignoreTemplateProperty\">true</property>\n        <property name=\"maxActionsNumber\">5</property>\n      </properties>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"infoViewPreview\" type=\"widget\" order=\"100\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewPreview</property>\n      </properties>\n      <filter-id>notHasNote</filter-id>\n      <filter-id>view_preview</filter-id>\n      <filter-id>denyInfoViewPreview</filter-id>\n    </action>\n\n    <action id=\"infoViewNote\" type=\"widget\" order=\"100\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewNote</property>\n      </properties>\n      <filter-id>hasNote</filter-id>\n    </action>\n\n    <action id=\"infoViewNoPreview\" type=\"widget\" order=\"100\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewNoPreview</property>\n      </properties>\n      <filter-id>notHasPreview</filter-id>\n    </action>\n\n    <action id=\"infoViewTitleContainer\" type=\"widget\" order=\"100\">\n      <category>INFO_VIEW_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewTitleContainer</property>\n      </properties>\n    </action>\n\n    <action id=\"infoViewInfoLayoutContainer\" type=\"widget\" order=\"200\">\n      <category>INFO_VIEW_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewInfoLayoutContainer</property>\n      </properties>\n    </action>\n\n    <action id=\"infoViewActions\" type=\"widget\" order=\"300\">\n      <category>INFO_VIEW_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewActions</property>\n      </properties>\n    </action>\n\n    <action id=\"infoAddToFavoritesAction\" order=\"0\" label=\"label.addToFavorites\"\n      link=\"#{favoritesActions.addCurrentDocumentToFavorites()}\" icon=\"/icons/pin.png\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>canAddToFavorites</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"infoRemoveFromFavoritesAction\" order=\"0\"\n      label=\"label.removeFromFavorites\" link=\"#{favoritesActions.removeCurrentDocumentFromFavorites()}\"\n      icon=\"/icons/pinned.png\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>canRemoveFromFavorites</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"infoDocumentLock\" link=\"#{lockActions.lockCurrentDocument}\"\n      order=\"10\" label=\"command.lock\" type=\"link\" icon=\"/icons/contextual_menu/unlocked.png\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_lock</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"infoDocumentUnlock\" link=\"#{lockActions.unlockCurrentDocument}\"\n      order=\"10\" label=\"command.unlock\" type=\"link\" icon=\"/icons/contextual_menu/locked.png\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>mutable_document</filter-id>\n      <filter-id>can_unlock</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"infoPermalinkAction\" order=\"20\" label=\"label.permalink\"\n      type=\"fancybox\" icon=\"/icons/contextual_menu/share.png\" accessKey=\"k\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"include\">/incl/permalink_box.xhtml</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"infoDownloadAction\" link=\"#{operationActionBean.doOperation('downloadFilesZip')}\"\n      order=\"30\" label=\"label.document.download\" type=\"link\"\n      icon=\"/icons/contextual_menu/download.png\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>documentHasBlobs</filter-id>\n    </action>\n\n    <action id=\"infoSubscribesAllDocNotifications\" link=\"#{subscriptionAction.updateAllSubscriptions}\"\n      order=\"40\" label=\"label.subscriptions.follow\" type=\"link\"\n      icon=\"/icons/contextual_menu/subscribe.png\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>hasNoSubscriptions</filter-id>\n      <filter-id>canSubscribe</filter-id>\n      <filter-id>isNotVersion</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"infoUnsubscribesAllDocNotifications\" link=\"#{subscriptionAction.updateAllSubscriptions}\"\n      order=\"40\" label=\"label.subscriptions.unfollow\" type=\"link\"\n      icon=\"/icons/contextual_menu/unsubscribe.png\">\n      <category>INFO_VIEW_ACTIONS</category>\n      <filter-id>hasSubscriptions</filter-id>\n      <filter-id>canSubscribe</filter-id>\n      <filter-id>isNotVersion</filter-id>\n      <properties>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"gridInfoViewLayout\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_grid_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>infoViewPanelLeft</widget>\n          <widget>infoViewPanelRight</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"defaultInfoLayout@tabLayout\">\n      <templates>\n        <template mode=\"any\">\n          /layouts/layout_grid_template.xhtml\n        </template>\n      </templates>\n      <rows>\n        <row>\n          <widget>infoViewInfoBox</widget>\n        </row>\n        <row>\n          <widget>infoViewMetadata</widget>\n        </row>\n        <row>\n          <widget>infoViewWorkflow</widget>\n        </row>\n        <row>\n          <widget>infoViewTags</widget>\n        </row>\n        <row>\n          <widget>infoViewCollections</widget>\n        </row>\n        <row>\n          <widget>infoViewComments</widget>\n        </row>\n      </rows>\n      <widget name=\"infoViewInfoBox\" type=\"container\">\n        <subWidgets>\n          <widget name=\"infoBox\" type=\"info_box\" />\n        </subWidgets>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n        <controls mode=\"any\">\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n      </widget>\n      <widget name=\"infoViewMetadata\" type=\"container\">\n        <labels>\n          <label mode=\"any\">action.view.metadata</label>\n        </labels>\n        <translated>true</translated>\n        <subWidgets>\n          <widget name=\"metadata\" type=\"documentLayout\">\n            <properties widgetMode=\"view\">\n              <property name=\"mode\">view</property>\n              <property name=\"documentMode\">view</property>\n              <property name=\"includeAnyMode\">false</property>\n            </properties>\n            <controls mode=\"any\">\n              <control name=\"requireSurroundingForm\">true</control>\n            </controls>\n          </widget>\n        </subWidgets>\n        <controls mode=\"any\">\n          <control name=\"handleLabels\">true</control>\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"infoViewWorkflow\" type=\"container\">\n        <labels>\n          <label mode=\"any\">label.document.routing.workflow</label>\n        </labels>\n        <translated>true</translated>\n        <subWidgets>\n          <widget name=\"workflow\" type=\"summary_document_route\">\n            <controls mode=\"any\">\n              <control name=\"requireSurroundingForm\">true</control>\n            </controls>\n          </widget>\n        </subWidgets>\n        <controls mode=\"any\">\n          <control name=\"handleLabels\">true</control>\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n        <widgetModes>\n          <mode value=\"view\">#{routingActions.filteredRouteModels.size() > 0 ?\n            'view' : 'hidden'}</mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"infoViewTags\" type=\"container\">\n        <labels>\n          <label mode=\"any\">action.view.tagging</label>\n        </labels>\n        <translated>true</translated>\n        <subWidgets>\n          <widget name=\"tags\" type=\"summary_current_document_tagging\">\n            <controls mode=\"any\">\n              <control name=\"requireSurroundingForm\">true</control>\n            </controls>\n            <properties widgetMode=\"any\">\n              <property name=\"placeholder\">\n                #{messages['label.add.tag.placeholder']}\n              </property>\n            </properties>\n          </widget>\n        </subWidgets>\n        <controls mode=\"any\">\n          <control name=\"handleLabels\">true</control>\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n      </widget>\n      <widget name=\"infoViewCollections\" type=\"container\">\n        <labels>\n          <label mode=\"any\">label.collections</label>\n        </labels>\n        <translated>true</translated>\n        <subWidgets>\n          <widget name=\"collections\" type=\"summary_current_document_collections\" />\n        </subWidgets>\n        <controls mode=\"any\">\n          <control name=\"handleLabels\">true</control>\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n        <widgetModes>\n          <mode value=\"view\">#{collectionActions.hasCurrentDocumentVisibleCollection()\n            ? 'view' : 'hidden'}</mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"infoViewComments\" type=\"container\">\n        <labels>\n          <label mode=\"any\">#{nxu:translate('label.summary.comments',\n            documentThreadedComments.size)}</label>\n        </labels>\n        <translated>false</translated>\n        <subWidgets>\n          <widget name=\"comments\" type=\"summary_current_document_comments\">\n            <controls mode=\"any\">\n              <control name=\"requireSurroundingForm\">true</control>\n            </controls>\n          </widget>\n        </subWidgets>\n        <controls mode=\"any\">\n          <control name=\"handleLabels\">true</control>\n          <control name=\"gridStyleClass\">gridStyle12</control>\n        </controls>\n        <properties widgetMode=\"any\">\n          <property name=\"hideSubLabels\">true</property>\n        </properties>\n        <widgetModes>\n          <mode value=\"view\">#{documentThreadedComments.size() > 0 ? 'view' :\n            'hidden'}</mode>\n        </widgetModes>\n      </widget>\n    </layout>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"denyInfoViewPreview\" append=\"true\">\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/info-view-layouts-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-webapp-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.webapp/org.nuxeo.ecm.webapp.core",
      "id": "org.nuxeo.ecm.webapp.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: 2023.7.9-t20240205-104924\r\nBundle-Name: NuxeoWeb\r\nBundle-SymbolicName: org.nuxeo.ecm.webapp.core\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: web\r\nNuxeo-Component: OSGI-INF/theme-contrib.xml, OSGI-INF/actions-contrib.xm\r\n l, OSGI-INF/action-widgets-contrib.xml, OSGI-INF/importOptions-actions-\r\n contrib.xml, OSGI-INF/documentslists-contrib.xml, OSGI-INF/trashManagem\r\n ent-framework.xml, OSGI-INF/trashManagement-contrib.xml, OSGI-INF/uiPer\r\n missionService-framework.xml, OSGI-INF/layouts-contrib.xml, OSGI-INF/la\r\n youts-summary-contrib.xml, OSGI-INF/exceptionhandling-contrib.xml, OSGI\r\n -INF/seamremotingjsbuilder-contrib.xml, OSGI-INF/directory-ui-contrib.x\r\n ml, OSGI-INF/chains-contrib.xml, OSGI-INF/pageproviders-webapp-contrib.\r\n xml, OSGI-INF/import-actions-contrib.xml, OSGI-INF/info-view-layouts-co\r\n ntrib.xml\r\nRequire-Bundle: org.nuxeo.ecm.platform.types.api,org.nuxeo.ecm.platform.\r\n versioning.api,org.nuxeo.ecm.platform.ui,org.nuxeo.ecm.webapp.base,org.\r\n nuxeo.ecm.core.query,org.nuxeo.ecm.platform.search.api,org.nuxeo.ecm.di\r\n rectory.api,org.nuxeo.ecm.platform.forms.layout.client,org.nuxeo.ecm.pl\r\n atform.jbpm.api\r\n\r\n",
      "maxResolutionOrder": 691,
      "minResolutionOrder": 655,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.types.api",
        "org.nuxeo.ecm.platform.versioning.api",
        "org.nuxeo.ecm.platform.ui",
        "org.nuxeo.ecm.webapp.base",
        "org.nuxeo.ecm.core.query",
        "org.nuxeo.ecm.platform.search.api",
        "org.nuxeo.ecm.directory.api",
        "org.nuxeo.ecm.platform.forms.layout.client",
        "org.nuxeo.ecm.platform.jbpm.api"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-audio-jsf",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.audio.core",
          "org.nuxeo.ecm.platform.audio.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio",
        "id": "grp:org.nuxeo.ecm.platform.audio",
        "name": "org.nuxeo.ecm.platform.audio",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.audio.jsf",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--bundles",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.jsf/org.nuxeo.ecm.platform.audio.theme/Contributions/org.nuxeo.ecm.platform.audio.theme--bundles",
              "id": "org.nuxeo.ecm.platform.audio.theme--bundles",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bundles\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>audio-player.js</resource>\n      </resources>\n    </bundle>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.jsf/org.nuxeo.ecm.platform.audio.theme/Contributions/org.nuxeo.ecm.platform.audio.theme--resources",
              "id": "org.nuxeo.ecm.platform.audio.theme--resources",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <resource name=\"audio-player.js\">\n      <uri>/scripts/wpaudioplayer/audio-player.js</uri>\n    </resource>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.jsf/org.nuxeo.ecm.platform.audio.theme",
          "name": "org.nuxeo.ecm.platform.audio.theme",
          "requirements": [
            "org.nuxeo.theme.nuxeo.webapp"
          ],
          "resolutionOrder": 658,
          "services": [],
          "startOrder": 266,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.audio.theme\">\n\n  <require>org.nuxeo.theme.nuxeo.webapp</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"bundles\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>audio-player.js</resource>\n      </resources>\n    </bundle>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\n    <resource name=\"audio-player.js\">\n      <uri>/scripts/wpaudioplayer/audio-player.js</uri>\n    </resource>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/theme-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.jsf/org.nuxeo.ecm.platform.audio.layouts/Contributions/org.nuxeo.ecm.platform.audio.layouts--widgettypes",
              "id": "org.nuxeo.ecm.platform.audio.layouts--widgettypes",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"audio_player\">\n      <configuration>\n        <sinceVersion>5.8</sinceVersion>\n        <title>Audio Player</title>\n        <description>\n          <p>This widgets displays a html5 or flash audio player</p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <!-- set configuration not ready until Studio knows how to manage that\n            kind of configuration -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>summary</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <layouts mode=\"any\">\n            <layout>\n              <rows>\n                <row>\n                  <widget>field_0</widget>\n                </row>\n                <row>\n                  <widget>field_1</widget>\n                </row>\n              </rows>\n              <widget name=\"field_0\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Bound document</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The bound document can be referenced using\n                    an empty field definition in a form layout, or using the\n                    equivalent expression \"#{value}\". In a listing layout, it\n                    can be referenced by using the value \"data\".\n                  </label>\n                </helpLabels>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">fields</property>\n                </properties>\n              </widget>\n              <widget name=\"field_1\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">File field binding</label>\n                </labels>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">fields</property>\n                  <property name=\"list\">false</property>\n                  <property name=\"complex\">false</property>\n                  <propertyList name=\"supportedTypes\">\n                    <value>blob</value>\n                  </propertyList>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"video_player_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>width</widget>\n                </row>\n              </rows>\n              <widget name=\"width\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Width</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The width of the Audio player.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>width</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/audio_player_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"audio_file\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Audio File</title>\n        <description>\n          <p>\n            The audio widget displays a file uploader/editor in create or edit\n            mode, with additional message tag for errors.\n          </p>\n        </description>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"audio_file_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget>acceptedExtensions</widget>\n                </row>\n              </rows>\n              <widget name=\"acceptedExtensions\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Accepted extensions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    A comma separated list of supported file\n                    extensions. Default value: '.mp3, .ogg, .oga, .flac, .m4a,\n                    .aac, .ac3, .aif, .aiff, .aifc, .au, .snd, .asf, .wav'.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>acceptedExtensions</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>blob</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/audio_file_widget_template.xhtml</property>\n    </widgetType>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.jsf/org.nuxeo.ecm.platform.audio.layouts/Contributions/org.nuxeo.ecm.platform.audio.layouts--widgets",
              "id": "org.nuxeo.ecm.platform.audio.layouts--widgets",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"summary_audio_player\" type=\"audio_player\">\n      <fields>\n        <field>#{value}</field>\n        <field>file:content</field>\n      </fields>\n    </widget>\n\n    <widget name=\"audioFile\" type=\"audio_file\">\n      <labels>\n        <label mode=\"any\">label.file.content</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>file:content</field>\n        <field>file:content/name</field>\n      </fields>\n    </widget>\n\n    <widget name=\"infoViewAudioPlayer\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewAudioContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"audioPlayer\" type=\"audio_player\">\n          <fields>\n            <field>#{value}</field>\n            <field>file:content</field>\n          </fields>\n        </widget>\n      </subWidgets>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.jsf/org.nuxeo.ecm.platform.audio.layouts/Contributions/org.nuxeo.ecm.platform.audio.layouts--actions",
              "id": "org.nuxeo.ecm.platform.audio.layouts--actions",
              "registrationOrder": 33,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"summary_audio_player\" order=\"50\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_audio_player</property>\n      </properties>\n      <filter-id>hasAudio</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_view\">\n      <filter-id>notHasAudio</filter-id>\n    </action>\n\n    <action id=\"infoViewAudioPlayer\" order=\"100\" type=\"widget\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewAudioPlayer</property>\n      </properties>\n      <filter-id>hasAudio</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.jsf/org.nuxeo.ecm.platform.audio.layouts/Contributions/org.nuxeo.ecm.platform.audio.layouts--filters",
              "id": "org.nuxeo.ecm.platform.audio.layouts--filters",
              "registrationOrder": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"hasAudio\">\n      <rule grant=\"true\">\n        <facet>Audio</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"notHasAudio\">\n      <rule grant=\"false\">\n        <facet>Audio</facet>\n      </rule>\n    </filter>\n\n    <filter append=\"true\" id=\"denyInfoViewPreview\">\n      <rule grant=\"false\">\n        <facet>Audio</facet>\n      </rule>\n    </filter>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.jsf/org.nuxeo.ecm.platform.audio.layouts/Contributions/org.nuxeo.ecm.platform.audio.layouts--layouts",
              "id": "org.nuxeo.ecm.platform.audio.layouts--layouts",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"audio_file\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>audioFile</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.jsf/org.nuxeo.ecm.platform.audio.layouts",
          "name": "org.nuxeo.ecm.platform.audio.layouts",
          "requirements": [
            "org.nuxeo.ecm.platform.forms.layouts.webapp.summary"
          ],
          "resolutionOrder": 681,
          "services": [],
          "startOrder": 264,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.audio.layouts\">\n\n  <require>org.nuxeo.ecm.platform.forms.layouts.webapp.summary</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"audio_player\">\n      <configuration>\n        <sinceVersion>5.8</sinceVersion>\n        <title>Audio Player</title>\n        <description>\n          <p>This widgets displays a html5 or flash audio player</p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <!-- set configuration not ready until Studio knows how to manage that\n            kind of configuration -->\n          <category>configuration_not_ready</category>\n          <!--\n            <category>summary</category>\n          -->\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <layouts mode=\"any\">\n            <layout>\n              <rows>\n                <row>\n                  <widget>field_0</widget>\n                </row>\n                <row>\n                  <widget>field_1</widget>\n                </row>\n              </rows>\n              <widget name=\"field_0\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Bound document</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The bound document can be referenced using\n                    an empty field definition in a form layout, or using the\n                    equivalent expression \"#{value}\". In a listing layout, it\n                    can be referenced by using the value \"data\".\n                  </label>\n                </helpLabels>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">fields</property>\n                </properties>\n              </widget>\n              <widget name=\"field_1\" type=\"selectOneResource\">\n                <labels>\n                  <label mode=\"any\">File field binding</label>\n                </labels>\n                <properties mode=\"any\">\n                  <property name=\"resourceName\">fields</property>\n                  <property name=\"list\">false</property>\n                  <property name=\"complex\">false</property>\n                  <propertyList name=\"supportedTypes\">\n                    <value>blob</value>\n                  </propertyList>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"video_player_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>width</widget>\n                </row>\n              </rows>\n              <widget name=\"width\" type=\"int\">\n                <labels>\n                  <label mode=\"any\">Width</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The width of the Audio player.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>width</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <!-- no configurable properties -->\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/audio_player_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"audio_file\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Audio File</title>\n        <description>\n          <p>\n            The audio widget displays a file uploader/editor in create or edit\n            mode, with additional message tag for errors.\n          </p>\n        </description>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"audio_file_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget>acceptedExtensions</widget>\n                </row>\n              </rows>\n              <widget name=\"acceptedExtensions\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Accepted extensions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    A comma separated list of supported file\n                    extensions. Default value: '.mp3, .ogg, .oga, .flac, .m4a,\n                    .aac, .ac3, .aif, .aiff, .aifc, .au, .snd, .asf, .wav'.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>acceptedExtensions</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>blob</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/audio_file_widget_template.xhtml</property>\n    </widgetType>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"summary_audio_player\" type=\"audio_player\">\n      <fields>\n        <field>#{value}</field>\n        <field>file:content</field>\n      </fields>\n    </widget>\n\n    <widget name=\"audioFile\" type=\"audio_file\">\n      <labels>\n        <label mode=\"any\">label.file.content</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>file:content</field>\n        <field>file:content/name</field>\n      </fields>\n    </widget>\n\n    <widget name=\"infoViewAudioPlayer\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewAudioContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"audioPlayer\" type=\"audio_player\">\n          <fields>\n            <field>#{value}</field>\n            <field>file:content</field>\n          </fields>\n        </widget>\n      </subWidgets>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"summary_audio_player\" type=\"widget\" order=\"50\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_audio_player</property>\n      </properties>\n      <filter-id>hasAudio</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_view\">\n      <filter-id>notHasAudio</filter-id>\n    </action>\n\n    <action id=\"infoViewAudioPlayer\" type=\"widget\" order=\"100\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewAudioPlayer</property>\n      </properties>\n      <filter-id>hasAudio</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"hasAudio\">\n      <rule grant=\"true\">\n        <facet>Audio</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"notHasAudio\">\n      <rule grant=\"false\">\n        <facet>Audio</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"denyInfoViewPreview\" append=\"true\">\n      <rule grant=\"false\">\n        <facet>Audio</facet>\n      </rule>\n    </filter>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"audio_file\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>audioFile</widget>\n        </row>\n      </rows>\n    </layout>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouts-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-audio-jsf-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audio/org.nuxeo.ecm.platform.audio.jsf",
      "id": "org.nuxeo.ecm.platform.audio.jsf",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Audio JSF\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.audio.jsf;singleton=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/layouts-contrib.xml,OSGI-INF/theme-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 681,
      "minResolutionOrder": 658,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-actions-jsf",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.actions",
          "org.nuxeo.ecm.actions.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions",
        "id": "grp:org.nuxeo.ecm.actions",
        "name": "org.nuxeo.ecm.actions",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.actions.jsf",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Configuration property controlling enablement of action widgets\n      optimizations, useful for backport of optimization on maintenance branches.\n\n      @since 8.2\n    \n",
              "documentationHtml": "<p>\nConfiguration property controlling enablement of action widgets\noptimizations, useful for backport of optimization on maintenance branches.\n</p><p>\n&#64;since 8.2\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf/org.nuxeo.ecm.platform.actions.actionwidgettypes/Contributions/org.nuxeo.ecm.platform.actions.actionwidgettypes--configuration",
              "id": "org.nuxeo.ecm.platform.actions.actionwidgettypes--configuration",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Configuration property controlling enablement of action widgets\n      optimizations, useful for backport of optimization on maintenance branches.\n\n      @since 8.2\n    </documentation>\n    <property name=\"nuxeo.jsf.actions.removeActionOptims\">false</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.LayoutStore--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf/org.nuxeo.ecm.platform.actions.actionwidgettypes/Contributions/org.nuxeo.ecm.platform.actions.actionwidgettypes--widgets",
              "id": "org.nuxeo.ecm.platform.actions.actionwidgettypes--widgets",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "name": "org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\">\n\n    <widget name=\"label\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action label.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>label</field>\n      </fields>\n    </widget>\n\n    <widget name=\"icon\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">icon</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action icon path. Example:\n          \"/icons/contextual_menu/share.png\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>icon</field>\n      </fields>\n    </widget>\n\n    <!-- not used as of 5.7.3 -->\n    <widget name=\"help\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">help</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action help, displayed in a tooltip.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>help</field>\n      </fields>\n    </widget>\n\n    <!-- not used as of 5.7.3 -->\n    <widget name=\"accessKey\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">accessKey</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action access key.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>accessKey</field>\n      </fields>\n    </widget>\n\n    <widget name=\"immediate\" type=\"checkbox\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Immediate</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean stating if the action is immediate (called\n          during JSF \"apply request value\" phase instead of the \"process\n          validations\" phase), useful for \"cancel\" buttons that should not issue\n          a validation error for required fields.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>immediate</field>\n      </fields>\n    </widget>\n\n    <widget name=\"ajaxReRender\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Ajax reRender</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Ajax rerender ids, separated by commas, used in\n          combination with the \"ajaxSupport\" property.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>ajaxReRender</field>\n      </fields>\n    </widget>\n\n    <widget name=\"ajaxSupport\" type=\"checkbox\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Ajax support</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean stating if the action supports ajax. Mandatory\n          for this action to be ajaxified when caller asks for an ajax form to\n          be used. Default value depends on the action type policy.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>ajaxSupport</field>\n      </fields>\n    </widget>\n\n    <widget name=\"styleClass\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action style class.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>styleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"target\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Target</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action target, for instance \"_blank\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>target</field>\n      </fields>\n    </widget>\n\n    <widget name=\"onclick\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Onclick</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Javascript code to call when clicking on the action.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>onclick</field>\n      </fields>\n    </widget>\n\n    <widget name=\"confirm\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Confirm</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Javascript confirmation code, called when clicking on\n          the action.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>confirm</field>\n      </fields>\n    </widget>\n\n    <widget name=\"confirmMessage\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Confirm message</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Alternative to the \"confirm\" property, only stating\n          the confirmation message, that can be a message to translate.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>confirmMessage</field>\n      </fields>\n    </widget>\n\n    <widget name=\"confirmMessageArgs\" type=\"list\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Confirm message arguments</label>\n      </labels>\n      <fields>\n        <field>confirmMessageArgs</field>\n      </fields>\n      <helpLabels>\n        <label mode=\"any\">\n          Confirm message arguments, referenced by the confirm\n          message translation in messages.properties files.\n        </label>\n      </helpLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"messageArg\" type=\"text\">\n          <fields>\n            <field/>\n          </fields>\n          <labels>\n            <label mode=\"any\"/>\n          </labels>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"fancybox_include\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Include</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The template path to show as the fancybox content\n          (ignored if property \"iframe\" is filled). If this template holds a\n          form, it should be using the variable \"fancyboxFormId\" as its form id\n          for the fancybox to be reopened on validation error. Example:\n          \"/incl/bulk_edit_box.xhtml\"\n        </label>\n      </helpLabels>\n      <fields>\n        <field>include</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_iframe\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Iframe</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          URL to display as the fancybox content. Example:\n          \"#{'#{'}previewActions.getCurrentDocumentPreviewPopupURL()}\"\n        </label>\n      </helpLabels>\n      <fields>\n        <field>iframe</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_width\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Width</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The fancybox width, defaults to \"90%\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>width</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_height\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Height</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The fancybox height, defaults to \"90%\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>height</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_scrolling\" type=\"selectOneListbox\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Scrolling</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The fancybox scrolling behaviour, used to create or\n          hide scrollbars. Defaults to \"auto\", also accepts 'yes' or 'no'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>scrolling</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Auto (default)\" itemValue=\"\"/>\n        <option itemLabel=\"Yes\" itemValue=\"yes\"/>\n        <option itemLabel=\"No\" itemValue=\"no\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"fancybox_autoScale\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Auto scale</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The boolean value stating if the fancybox is scaled to\n          fit in viewport. Defaults to \"true\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>autoScale</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_autoDimensions\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Auto dimensions</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The boolean value stating if the fancybox is resized\n          when the view is changed by ajax actions for instance. Defaults to\n          \"true\". The fancybox should have dimensions for this to work properly.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>autoDimensions</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_modal\" type=\"checkbox\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Modal</label>\n      </labels>\n      <fields>\n        <field>modal</field>\n      </fields>\n      <helpLabels>\n        <label mode=\"any\">\n          The boolean value stating if the fancybox is modal and\n          cannot be closed when using the escape button, for instance.\n          Defaults\n          to \"false\".\n        </label>\n      </helpLabels>\n    </widget>\n\n    <widget name=\"fancybox_centerOnScroll\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">centerOnScroll</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The boolean value stating if the fancybox is centered\n          while scrolling the page. Defaults to \"true\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>centerOnScroll</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_enableEscapeButton\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">enableEscapeButton</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The boolean value stating if the fancybox is closed\n          when pressing the escape key. Defaults to \"true\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>enableEscapeButton</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_onClosed\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">onClosed</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Javascript code to call when the fancybox is closed.\n          Available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>onClosed</field>\n      </fields>\n    </widget>\n\n    <widget name=\"rest_document_link_view\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">View</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Specific view to use for the rest document link.\n          Available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>view</field>\n      </fields>\n    </widget>\n\n    <widget name=\"rest_document_link_pattern\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Pattern</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Specific pattern to use for the rest document link.\n          Available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pattern</field>\n      </fields>\n    </widget>\n\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.LayoutStore--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf/org.nuxeo.ecm.platform.actions.actionwidgettypes/Contributions/org.nuxeo.ecm.platform.actions.actionwidgettypes--widgettypes",
              "id": "org.nuxeo.ecm.platform.actions.actionwidgettypes--widgettypes",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "name": "org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\">\n\n    <widgetType name=\"link\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Link</title>\n        <description>\n          Widget displaying a link for an action.\n          <p>\n            Configured by default not to support ajax actions.\n          </p>\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"link_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>link</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">icon</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">label</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">ajaxSupport</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">target</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n              </rows>\n              <widget name=\"link\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Link</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The action link, that can be a navigation\n                    view or a Seam action, for instance.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>link</field>\n                </fields>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/link_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/link_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"bare_link\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Bare link</title>\n        <description>\n          Widget displaying a bare/output link for an action.\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"discardSurroundingForm\">true</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"bare_link_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">label</widget>\n                </row>\n                <row>\n                  <widget>link</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">icon</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">ajaxSupport</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">target</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n              </rows>\n              <widget name=\"link\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Link</label>\n                </labels>\n                <fields>\n                  <field>link</field>\n                </fields>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The action link URL.\n                  </label>\n                </helpLabels>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/bare_link_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/bare_link_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"fancybox\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Fancybox</title>\n        <description>\n          Widget displaying a button that will open a fancybox.\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"fancybox_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">label</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_include</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_iframe</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">icon</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_width</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_height</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_scrolling</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_autoScale</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_autoDimensions</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_modal</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_centerOnScroll</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_enableEscapeButton</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/fancybox_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/fancybox_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"rest_document_link\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Document Rest Link</title>\n        <description>\n          Widget displaying a restful document link for an action (typically a\n          tab link).\n          <p>\n            Configured by default to avoid adding a form around the link if not\n            ajaxified, and to support ajax actions.\n          </p>\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"repositoryName\">#{currentServerLocation.name}</property>\n            <property name=\"discardSurroundingForm\">true</property>\n            <property name=\"disableMultiPartForm\">true</property>\n            <property name=\"supportAjax\">#{canUseAjaxTabs}</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"rest_document_link_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">label</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">icon</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">ajaxSupport</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">target</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">rest_document_link_view</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">rest_document_link_pattern</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/rest_document_link_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/rest_document_link_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"main_tab\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Main tab</title>\n        <description>\n          Widget displaying a restful link for an action used to\n          switch between different views of the application (typically a link to\n          the Document Management view, to the Admin Center view, etc...).\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"discardSurroundingForm\">true</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"main_tab_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">label</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">icon</widget>\n                </row>\n                <row>\n                  <widget>requireDocument</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">ajaxSupport</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">target</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n              </rows>\n              <widget name=\"requireDocument\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Require document</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean value stating if the rest\n                    document link needs a document to show a restful link.\n                    Defaults to \"false\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>requireDocument</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/main_tab_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/main_tab_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"widget\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Widget</title>\n        <description>\n          Widget displaying a widget for this action, useful for\n          building incremental layouts using actions filtering and ordering\n          features (typically generic document summary views).\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"widget_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>widgetName</widget>\n                </row>\n                <row>\n                  <widget>widgetCategory</widget>\n                </row>\n                <row>\n                  <widget>widgetMode</widget>\n                </row>\n                <row>\n                  <widget>displayActionLabel</widget>\n                </row>\n                <row>\n                  <widget>displayWidgetLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">target</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n              </rows>\n              <widget name=\"widgetName\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Widget name</label>\n                </labels>\n                <fields>\n                  <field>widgetName</field>\n                </fields>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The widget name.\n                  </label>\n                </helpLabels>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"widgetCategory\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Widget category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The widget category.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>widgetCategory</field>\n                </fields>\n              </widget>\n              <widget name=\"widgetMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Widget mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The widget mode, defaults to \"view\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>widgetMode</field>\n                </fields>\n              </widget>\n              <widget name=\"displayActionLabel\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Display action label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean value stating if the action\n                    label should be displayed. Defaults to \"false\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>displayActionLabel</field>\n                </fields>\n              </widget>\n              <widget name=\"displayWidgetLabel\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Display widget label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean value stating if the widget\n                    label should be displayed. Defaults to \"false\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>displayWidgetLabel</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/widget_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/widget_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"template\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Template</title>\n        <description>\n          Widget displaying a template for an action, useful for\n          custom action rendering.\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"template_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>template</widget>\n                </row>\n              </rows>\n              <widget name=\"template\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The template path.\n                  </label>\n                </helpLabels>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/template_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/template_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf/org.nuxeo.ecm.platform.actions.actionwidgettypes",
          "name": "org.nuxeo.ecm.platform.actions.actionwidgettypes",
          "requirements": [],
          "resolutionOrder": 274,
          "services": [],
          "startOrder": 254,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.actions.actionwidgettypes\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Configuration property controlling enablement of action widgets\n      optimizations, useful for backport of optimization on maintenance branches.\n\n      @since 8.2\n    </documentation>\n    <property name=\"nuxeo.jsf.actions.removeActionOptims\">false</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n    point=\"widgets\">\n\n    <widget name=\"label\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Label</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action label.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>label</field>\n      </fields>\n    </widget>\n\n    <widget name=\"icon\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">icon</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action icon path. Example:\n          \"/icons/contextual_menu/share.png\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>icon</field>\n      </fields>\n    </widget>\n\n    <!-- not used as of 5.7.3 -->\n    <widget name=\"help\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">help</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action help, displayed in a tooltip.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>help</field>\n      </fields>\n    </widget>\n\n    <!-- not used as of 5.7.3 -->\n    <widget name=\"accessKey\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">accessKey</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action access key.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>accessKey</field>\n      </fields>\n    </widget>\n\n    <widget name=\"immediate\" type=\"checkbox\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Immediate</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean stating if the action is immediate (called\n          during JSF \"apply request value\" phase instead of the \"process\n          validations\" phase), useful for \"cancel\" buttons that should not issue\n          a validation error for required fields.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>immediate</field>\n      </fields>\n    </widget>\n\n    <widget name=\"ajaxReRender\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Ajax reRender</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Ajax rerender ids, separated by commas, used in\n          combination with the \"ajaxSupport\" property.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>ajaxReRender</field>\n      </fields>\n    </widget>\n\n    <widget name=\"ajaxSupport\" type=\"checkbox\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Ajax support</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean stating if the action supports ajax. Mandatory\n          for this action to be ajaxified when caller asks for an ajax form to\n          be used. Default value depends on the action type policy.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>ajaxSupport</field>\n      </fields>\n    </widget>\n\n    <widget name=\"styleClass\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action style class.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>styleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"target\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Target</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action target, for instance \"_blank\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>target</field>\n      </fields>\n    </widget>\n\n    <widget name=\"onclick\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Onclick</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Javascript code to call when clicking on the action.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>onclick</field>\n      </fields>\n    </widget>\n\n    <widget name=\"confirm\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Confirm</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Javascript confirmation code, called when clicking on\n          the action.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>confirm</field>\n      </fields>\n    </widget>\n\n    <widget name=\"confirmMessage\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Confirm message</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Alternative to the \"confirm\" property, only stating\n          the confirmation message, that can be a message to translate.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>confirmMessage</field>\n      </fields>\n    </widget>\n\n    <widget name=\"confirmMessageArgs\" type=\"list\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Confirm message arguments</label>\n      </labels>\n      <fields>\n        <field>confirmMessageArgs</field>\n      </fields>\n      <helpLabels>\n        <label mode=\"any\">\n          Confirm message arguments, referenced by the confirm\n          message translation in messages.properties files.\n        </label>\n      </helpLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"messageArg\" type=\"text\">\n          <fields>\n            <field></field>\n          </fields>\n          <labels>\n            <label mode=\"any\"></label>\n          </labels>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"fancybox_include\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Include</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The template path to show as the fancybox content\n          (ignored if property \"iframe\" is filled). If this template holds a\n          form, it should be using the variable \"fancyboxFormId\" as its form id\n          for the fancybox to be reopened on validation error. Example:\n          \"/incl/bulk_edit_box.xhtml\"\n        </label>\n      </helpLabels>\n      <fields>\n        <field>include</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_iframe\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Iframe</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          URL to display as the fancybox content. Example:\n          \"#{'#{'}previewActions.getCurrentDocumentPreviewPopupURL()}\"\n        </label>\n      </helpLabels>\n      <fields>\n        <field>iframe</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_width\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Width</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The fancybox width, defaults to \"90%\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>width</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_height\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Height</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The fancybox height, defaults to \"90%\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>height</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_scrolling\" type=\"selectOneListbox\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Scrolling</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The fancybox scrolling behaviour, used to create or\n          hide scrollbars. Defaults to \"auto\", also accepts 'yes' or 'no'.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>scrolling</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Auto (default)\" itemValue=\"\" />\n        <option itemLabel=\"Yes\" itemValue=\"yes\" />\n        <option itemLabel=\"No\" itemValue=\"no\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"fancybox_autoScale\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Auto scale</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The boolean value stating if the fancybox is scaled to\n          fit in viewport. Defaults to \"true\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>autoScale</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_autoDimensions\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Auto dimensions</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The boolean value stating if the fancybox is resized\n          when the view is changed by ajax actions for instance. Defaults to\n          \"true\". The fancybox should have dimensions for this to work properly.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>autoDimensions</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_modal\" type=\"checkbox\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Modal</label>\n      </labels>\n      <fields>\n        <field>modal</field>\n      </fields>\n      <helpLabels>\n        <label mode=\"any\">\n          The boolean value stating if the fancybox is modal and\n          cannot be closed when using the escape button, for instance.\n          Defaults\n          to \"false\".\n        </label>\n      </helpLabels>\n    </widget>\n\n    <widget name=\"fancybox_centerOnScroll\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">centerOnScroll</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The boolean value stating if the fancybox is centered\n          while scrolling the page. Defaults to \"true\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>centerOnScroll</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_enableEscapeButton\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">enableEscapeButton</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The boolean value stating if the fancybox is closed\n          when pressing the escape key. Defaults to \"true\".\n        </label>\n      </helpLabels>\n      <fields>\n        <field>enableEscapeButton</field>\n      </fields>\n    </widget>\n\n    <widget name=\"fancybox_onClosed\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">onClosed</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Javascript code to call when the fancybox is closed.\n          Available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>onClosed</field>\n      </fields>\n    </widget>\n\n    <widget name=\"rest_document_link_view\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">View</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Specific view to use for the rest document link.\n          Available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>view</field>\n      </fields>\n    </widget>\n\n    <widget name=\"rest_document_link_pattern\" type=\"text\">\n      <categories>\n        <category>actionWidgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Pattern</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Specific pattern to use for the rest document link.\n          Available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pattern</field>\n      </fields>\n    </widget>\n\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"link\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Link</title>\n        <description>\n          Widget displaying a link for an action.\n          <p>\n            Configured by default not to support ajax actions.\n          </p>\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"link_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>link</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">icon</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">label</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">ajaxSupport</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">target</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n              </rows>\n              <widget name=\"link\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Link</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The action link, that can be a navigation\n                    view or a Seam action, for instance.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>link</field>\n                </fields>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/link_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/link_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"bare_link\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Bare link</title>\n        <description>\n          Widget displaying a bare/output link for an action.\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"discardSurroundingForm\">true</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"bare_link_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">label</widget>\n                </row>\n                <row>\n                  <widget>link</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">icon</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">immediate</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">ajaxSupport</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">target</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n              </rows>\n              <widget name=\"link\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Link</label>\n                </labels>\n                <fields>\n                  <field>link</field>\n                </fields>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The action link URL.\n                  </label>\n                </helpLabels>\n                <properties widgetMode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/bare_link_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/bare_link_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"fancybox\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Fancybox</title>\n        <description>\n          Widget displaying a button that will open a fancybox.\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"fancybox_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">label</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_include</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_iframe</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">icon</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_width</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_height</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_scrolling</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_autoScale</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_autoDimensions</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_modal</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_centerOnScroll</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">fancybox_enableEscapeButton</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/fancybox_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/fancybox_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"rest_document_link\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Document Rest Link</title>\n        <description>\n          Widget displaying a restful document link for an action (typically a\n          tab link).\n          <p>\n            Configured by default to avoid adding a form around the link if not\n            ajaxified, and to support ajax actions.\n          </p>\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"repositoryName\">#{currentServerLocation.name}</property>\n            <property name=\"discardSurroundingForm\">true</property>\n            <property name=\"disableMultiPartForm\">true</property>\n            <property name=\"supportAjax\">#{canUseAjaxTabs}</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"rest_document_link_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">label</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">icon</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">ajaxSupport</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">target</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">rest_document_link_view</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">rest_document_link_pattern</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/rest_document_link_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/rest_document_link_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"main_tab\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Main tab</title>\n        <description>\n          Widget displaying a restful link for an action used to\n          switch between different views of the application (typically a link to\n          the Document Management view, to the Admin Center view, etc...).\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"discardSurroundingForm\">true</property>\n          </defaultValues>\n          <layouts mode=\"view\">\n            <layout name=\"main_tab_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">label</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">icon</widget>\n                </row>\n                <row>\n                  <widget>requireDocument</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">ajaxSupport</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">target</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n              </rows>\n              <widget name=\"requireDocument\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Require document</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean value stating if the rest\n                    document link needs a document to show a restful link.\n                    Defaults to \"false\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>requireDocument</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/main_tab_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/main_tab_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"widget\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Widget</title>\n        <description>\n          Widget displaying a widget for this action, useful for\n          building incremental layouts using actions filtering and ordering\n          features (typically generic document summary views).\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"widget_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>widgetName</widget>\n                </row>\n                <row>\n                  <widget>widgetCategory</widget>\n                </row>\n                <row>\n                  <widget>widgetMode</widget>\n                </row>\n                <row>\n                  <widget>displayActionLabel</widget>\n                </row>\n                <row>\n                  <widget>displayWidgetLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">onclick</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">target</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirm</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessage</widget>\n                </row>\n                <row>\n                  <widget category=\"actionWidgetTypeConf\">confirmMessageArgs</widget>\n                </row>\n              </rows>\n              <widget name=\"widgetName\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Widget name</label>\n                </labels>\n                <fields>\n                  <field>widgetName</field>\n                </fields>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The widget name.\n                  </label>\n                </helpLabels>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n              <widget name=\"widgetCategory\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Widget category</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The widget category.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>widgetCategory</field>\n                </fields>\n              </widget>\n              <widget name=\"widgetMode\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Widget mode</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The widget mode, defaults to \"view\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>widgetMode</field>\n                </fields>\n              </widget>\n              <widget name=\"displayActionLabel\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Display action label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean value stating if the action\n                    label should be displayed. Defaults to \"false\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>displayActionLabel</field>\n                </fields>\n              </widget>\n              <widget name=\"displayWidgetLabel\" type=\"checkbox\">\n                <labels>\n                  <label mode=\"any\">Display widget label</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The boolean value stating if the widget\n                    label should be displayed. Defaults to \"false\".\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>displayWidgetLabel</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/widget_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/widget_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"template\">\n      <categories>\n        <category>jsfAction</category>\n      </categories>\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Template</title>\n        <description>\n          Widget displaying a template for an action, useful for\n          custom action rendering.\n        </description>\n        <categories>\n          <category>action</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"template_action_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>template</widget>\n                </row>\n              </rows>\n              <widget name=\"template\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Template</label>\n                </labels>\n                <fields>\n                  <field>template</field>\n                </fields>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The template path.\n                  </label>\n                </helpLabels>\n                <properties mode=\"any\">\n                  <property name=\"required\">true</property>\n                </properties>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.actions.facelets.ActionWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /incl/action/widgets/template_action_template.xhtml\n      </property>\n      <property name=\"compat_template\">\n        /incl/action/template_action_template.xhtml\n      </property>\n      <property name=\"dev_template\">\n        /widgets/actions/dev/action_widget_type_dev_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/action-widgettypes-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf/org.nuxeo.ecm.platform.actions.actionwidgettypes.dev/Contributions/org.nuxeo.ecm.platform.actions.actionwidgettypes.dev--layouts",
              "id": "org.nuxeo.ecm.platform.actions.actionwidgettypes.dev--layouts",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <!-- this layout is applied to an action, not a widget -->\n    <layout name=\"action_widget_type_dev_layout\" type=\"devLayout\">\n      <rows>\n        <row>\n          <widget>type</widget>\n        </row>\n        <row>\n          <widget>categories</widget>\n        </row>\n        <row>\n          <widget>label</widget>\n        </row>\n        <row>\n          <widget>order</widget>\n        </row>\n        <row>\n          <widget>icon</widget>\n        </row>\n        <row>\n          <widget>accessKey</widget>\n        </row>\n        <row>\n          <widget>confirm</widget>\n        </row>\n        <row>\n          <widget>immediate</widget>\n        </row>\n        <row>\n          <widget>link</widget>\n        </row>\n        <row>\n          <widget>properties</widget>\n        </row>\n        <row>\n          <widget>filterIds</widget>\n        </row>\n      </rows>\n      <widget name=\"type\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Type</label>\n        </labels>\n        <fields>\n          <field>type</field>\n        </fields>\n      </widget>\n      <widget name=\"categories\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Action Categories</label>\n        </labels>\n        <fields>\n          <field>categoryList</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.categoryList, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"label\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Label</label>\n        </labels>\n        <fields>\n          <field>label</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.label, 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"order\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Order</label>\n        </labels>\n        <fields>\n          <field>order</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.order, 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"icon\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Icon</label>\n        </labels>\n        <fields>\n          <field>icon</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.icon, 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"accessKey\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Access Key</label>\n        </labels>\n        <fields>\n          <field>accessKey</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.accessKey, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"confirm\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Confirm</label>\n        </labels>\n        <fields>\n          <field>confirm</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.confirm, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"immediate\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Immediate</label>\n        </labels>\n        <fields>\n          <field>immediate</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.immediate, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"link\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Link</label>\n        </labels>\n        <fields>\n          <field>link</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.link, 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"properties\" type=\"template\">\n        <labels>\n          <label mode=\"any\">Action Properties</label>\n        </labels>\n        <fields>\n          <field>properties</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.properties, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/dev/properties_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"filterIds\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Filters</label>\n        </labels>\n        <fields>\n          <field>filterIds</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.filterIds, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n    </layout>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf/org.nuxeo.ecm.platform.actions.actionwidgettypes.dev",
          "name": "org.nuxeo.ecm.platform.actions.actionwidgettypes.dev",
          "requirements": [],
          "resolutionOrder": 275,
          "services": [],
          "startOrder": 255,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.actions.actionwidgettypes.dev\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <!-- this layout is applied to an action, not a widget -->\n    <layout name=\"action_widget_type_dev_layout\" type=\"devLayout\">\n      <rows>\n        <row>\n          <widget>type</widget>\n        </row>\n        <row>\n          <widget>categories</widget>\n        </row>\n        <row>\n          <widget>label</widget>\n        </row>\n        <row>\n          <widget>order</widget>\n        </row>\n        <row>\n          <widget>icon</widget>\n        </row>\n        <row>\n          <widget>accessKey</widget>\n        </row>\n        <row>\n          <widget>confirm</widget>\n        </row>\n        <row>\n          <widget>immediate</widget>\n        </row>\n        <row>\n          <widget>link</widget>\n        </row>\n        <row>\n          <widget>properties</widget>\n        </row>\n        <row>\n          <widget>filterIds</widget>\n        </row>\n      </rows>\n      <widget name=\"type\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Type</label>\n        </labels>\n        <fields>\n          <field>type</field>\n        </fields>\n      </widget>\n      <widget name=\"categories\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Action Categories</label>\n        </labels>\n        <fields>\n          <field>categoryList</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.categoryList, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"label\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Label</label>\n        </labels>\n        <fields>\n          <field>label</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.label, 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"order\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Order</label>\n        </labels>\n        <fields>\n          <field>order</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.order, 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"icon\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Icon</label>\n        </labels>\n        <fields>\n          <field>icon</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.icon, 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"accessKey\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Access Key</label>\n        </labels>\n        <fields>\n          <field>accessKey</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.accessKey, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"confirm\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Confirm</label>\n        </labels>\n        <fields>\n          <field>confirm</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.confirm, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"immediate\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Immediate</label>\n        </labels>\n        <fields>\n          <field>immediate</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.immediate, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"link\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Link</label>\n        </labels>\n        <fields>\n          <field>link</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.link, 'hidden', mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n      <widget name=\"properties\" type=\"template\">\n        <labels>\n          <label mode=\"any\">Action Properties</label>\n        </labels>\n        <fields>\n          <field>properties</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.properties, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n        <properties mode=\"any\">\n          <property name=\"template\">\n            /widgets/dev/properties_widget_template.xhtml\n          </property>\n        </properties>\n      </widget>\n      <widget name=\"filterIds\" type=\"text\">\n        <labels>\n          <label mode=\"any\">Filters</label>\n        </labels>\n        <fields>\n          <field>filterIds</field>\n        </fields>\n        <widgetModes>\n          <mode value=\"any\">\n            #{nxu:test(empty layoutValue.filterIds, 'hidden',\n            mode)}\n          </mode>\n        </widgetModes>\n      </widget>\n    </layout>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/action-widgettypes-dev-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.LayoutStore--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf/org.nuxeo.ecm.platform.actions.widgettypes/Contributions/org.nuxeo.ecm.platform.actions.widgettypes--widgets",
              "id": "org.nuxeo.ecm.platform.actions.widgettypes--widgets",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "name": "org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\">\n\n    <widget name=\"actions_headerStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Header style class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Style class for the header, displaying this\n          widget\n          label.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>headerStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_styleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Style class for the global container div.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>styleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_actionStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Action style class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Style class for each action link.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>actionStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_addForm\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Add form</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to true, actions will be surrounded\n          by a form,\n          so there should be no other surrounding form.\n          This property is useful\n          when fancybox actions need to open a\n          popup in another form. Available\n          since 5.7, defaults to false.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>addForm</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_useAjaxForm\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Use ajax actions</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to true, actions will be performed\n          using ajax.\n          Note that sometimes, selection actions will\n          require you to reload the\n          whole page for other elements than\n          the content view to be re-rendered,\n          so using ajax will not\n          be user friendly in these cases. Available from\n          5.7, defaults to false.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>useAjaxForm</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_disableFiltered\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Disable filtered actions</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to true, actions will appear as disabled if\n          they are supposed to be filtered (instead of not being displayed at\n          all). Available from 5.7, defaults to false.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>disableFiltered</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_category\" type=\"selectOneResource\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Category</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The category of actions to use.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>category</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n      <properties mode=\"any\">\n        <property name=\"resourceName\">actionCategories</property>\n      </properties>\n    </widget>\n\n    <widget name=\"tabs_category\" type=\"selectOneResource\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Category</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The category of tabs to use.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>category</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n      <properties mode=\"any\">\n        <property name=\"resourceName\">tabCategories</property>\n      </properties>\n    </widget>\n\n    <widget name=\"actions_actionId\" type=\"selectOneResource\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Action</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action to display.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>actionId</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n      <properties mode=\"any\">\n        <property name=\"resourceName\">actions</property>\n      </properties>\n    </widget>\n\n    <widget name=\"actions_overallDisplay\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Overall display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Overall display of actions.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>overallDisplay</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Vertical block (default)\" itemValue=\"\"/>\n        <option itemLabel=\"Horizontal block\" itemValue=\"horizontal_block\"/>\n        <option itemLabel=\"Menu\" itemValue=\"menu\"/>\n        <option itemLabel=\"Rollover menu\" itemValue=\"rollover_menu\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"tabs_overallDisplay\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Overall display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Overall display of tabs.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>overallDisplay</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Horizontal block (default)\" itemValue=\"\"/>\n        <option itemLabel=\"Vertical block\" itemValue=\"vertical_block\"/>\n      </selectOptions>\n    </widget>\n\n    <widget name=\"tabs_link_pattern\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Link Pattern</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The document pattern to use for tabs links (optional). Available since 8.1.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pattern</field>\n      </fields>\n    </widget>\n\n    <widget name=\"tabs_link_view\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Link View</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The document pattern to use for tabs links (optional). Available since 8.1.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>view</field>\n      </fields>\n    </widget>\n\n    <widget name=\"tabs_hideSingleTab\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide single tab</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean stating if the tabs bar should be hidden in case there is only one tab.\n          Defaults to false, available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideSingleTab</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_maxActionsNumber\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Maximum number of actions</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Integer indicating the maximum number of\n          actions to\n          display. When this limit is reached, other\n          actions are displayed in a\n          menu.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>maxActionsNumber</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_moreMenuLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Label for the \"more\" menu</label>\n      </labels>\n      <fields>\n        <field>moreMenuLabel</field>\n      </fields>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf/org.nuxeo.ecm.platform.actions.widgettypes/Contributions/org.nuxeo.ecm.platform.actions.widgettypes--widgettypes",
              "id": "org.nuxeo.ecm.platform.actions.widgettypes--widgettypes",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"actions\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>Actions</title>\n        <description>\n          <p>This widget displays actions.</p>\n          <p>\n            It needs the list of actions as property \"actions\".\n            <br/>\n            Its bound value is used for actions with type \"widget\".\n          </p>\n        </description>\n        <categories>\n          <category>hidden</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"actions_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>actions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_moreMenuLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_addForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n              </rows>\n              <widget name=\"actions\" type=\"actions\">\n                <labels>\n                  <label mode=\"any\">Actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The list of actions to display.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>actions</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/actions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"action\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Action</title>\n        <description>\n          <p>This widget displays an action.</p>\n          <p>\n            It needs the action as property \"action\".\n            <br/>\n            Its bound value is used for actions with type \"widget\".\n            <br/>\n            It can add a form around its button to handle actions with type\n            \"fancybox\" that would need a form in their opened fancybox content.\n          </p>\n        </description>\n        <categories>\n          <category>hidden</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"action_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>action</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_addForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n              </rows>\n              <widget name=\"action\" type=\"action\">\n                <labels>\n                  <label mode=\"any\">Action</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The action to display.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>action</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/action_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"tabs\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Tabs</title>\n        <description>\n          <p>This widget displays tabs.</p>\n          <p>\n            It needs the list of actions as property \"actions\".\n            <br/>\n            Its bound value is used for actions with type \"widget\".\n          </p>\n        </description>\n        <categories>\n          <category>hidden</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field/>\n          </defaultConfiguration>\n        </fields>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">false</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"tabs_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>actions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_addForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_link_view</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_link_pattern</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_hideSingleTab</widget>\n                </row>\n              </rows>\n              <widget name=\"actions\" type=\"actions\">\n                <labels>\n                  <label mode=\"any\">Actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The list of actions to display.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>actions</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/tabs_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf/org.nuxeo.ecm.platform.actions.widgettypes",
          "name": "org.nuxeo.ecm.platform.actions.widgettypes",
          "requirements": [],
          "resolutionOrder": 276,
          "services": [],
          "startOrder": 258,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.actions.widgettypes\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n    point=\"widgets\">\n\n    <widget name=\"actions_headerStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Header style class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Style class for the header, displaying this\n          widget\n          label.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>headerStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_styleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Style class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Style class for the global container div.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>styleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_actionStyleClass\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Action style class</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Style class for each action link.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>actionStyleClass</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_addForm\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Add form</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to true, actions will be surrounded\n          by a form,\n          so there should be no other surrounding form.\n          This property is useful\n          when fancybox actions need to open a\n          popup in another form. Available\n          since 5.7, defaults to false.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>addForm</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_useAjaxForm\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Use ajax actions</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to true, actions will be performed\n          using ajax.\n          Note that sometimes, selection actions will\n          require you to reload the\n          whole page for other elements than\n          the content view to be re-rendered,\n          so using ajax will not\n          be user friendly in these cases. Available from\n          5.7, defaults to false.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>useAjaxForm</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_disableFiltered\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Disable filtered actions</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          If set to true, actions will appear as disabled if\n          they are supposed to be filtered (instead of not being displayed at\n          all). Available from 5.7, defaults to false.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>disableFiltered</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_category\" type=\"selectOneResource\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Category</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The category of actions to use.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>category</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n      <properties mode=\"any\">\n        <property name=\"resourceName\">actionCategories</property>\n      </properties>\n    </widget>\n\n    <widget name=\"tabs_category\" type=\"selectOneResource\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Category</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The category of tabs to use.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>category</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n      <properties mode=\"any\">\n        <property name=\"resourceName\">tabCategories</property>\n      </properties>\n    </widget>\n\n    <widget name=\"actions_actionId\" type=\"selectOneResource\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Action</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The action to display.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>actionId</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"edit_demo_preview\">hidden</mode>\n      </widgetModes>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n      <properties mode=\"any\">\n        <property name=\"resourceName\">actions</property>\n      </properties>\n    </widget>\n\n    <widget name=\"actions_overallDisplay\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Overall display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Overall display of actions.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>overallDisplay</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Vertical block (default)\" itemValue=\"\" />\n        <option itemLabel=\"Horizontal block\" itemValue=\"horizontal_block\" />\n        <option itemLabel=\"Menu\" itemValue=\"menu\" />\n        <option itemLabel=\"Rollover menu\" itemValue=\"rollover_menu\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"tabs_overallDisplay\" type=\"selectOneListbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Overall display</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Overall display of tabs.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>overallDisplay</field>\n      </fields>\n      <selectOptions>\n        <option itemLabel=\"Horizontal block (default)\" itemValue=\"\" />\n        <option itemLabel=\"Vertical block\" itemValue=\"vertical_block\" />\n      </selectOptions>\n    </widget>\n\n    <widget name=\"tabs_link_pattern\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Link Pattern</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The document pattern to use for tabs links (optional). Available since 8.1.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>pattern</field>\n      </fields>\n    </widget>\n\n    <widget name=\"tabs_link_view\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Link View</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          The document pattern to use for tabs links (optional). Available since 8.1.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>view</field>\n      </fields>\n    </widget>\n\n    <widget name=\"tabs_hideSingleTab\" type=\"checkbox\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Hide single tab</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Boolean stating if the tabs bar should be hidden in case there is only one tab.\n          Defaults to false, available since 6.0.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>hideSingleTab</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_maxActionsNumber\" type=\"int\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Maximum number of actions</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Integer indicating the maximum number of\n          actions to\n          display. When this limit is reached, other\n          actions are displayed in a\n          menu.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>maxActionsNumber</field>\n      </fields>\n    </widget>\n\n    <widget name=\"actions_moreMenuLabel\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Label for the \"more\" menu</label>\n      </labels>\n      <fields>\n        <field>moreMenuLabel</field>\n      </fields>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"actions\">\n      <configuration>\n        <sinceVersion>5.6</sinceVersion>\n        <title>Actions</title>\n        <description>\n          <p>This widget displays actions.</p>\n          <p>\n            It needs the list of actions as property \"actions\".\n            <br />\n            Its bound value is used for actions with type \"widget\".\n          </p>\n        </description>\n        <categories>\n          <category>hidden</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"actions_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>actions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_maxActionsNumber</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_moreMenuLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_addForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n              </rows>\n              <widget name=\"actions\" type=\"actions\">\n                <labels>\n                  <label mode=\"any\">Actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The list of actions to display.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>actions</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/actions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"action\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Action</title>\n        <description>\n          <p>This widget displays an action.</p>\n          <p>\n            It needs the action as property \"action\".\n            <br />\n            Its bound value is used for actions with type \"widget\".\n            <br />\n            It can add a form around its button to handle actions with type\n            \"fancybox\" that would need a form in their opened fancybox content.\n          </p>\n        </description>\n        <categories>\n          <category>hidden</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"action_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>action</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_addForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n              </rows>\n              <widget name=\"action\" type=\"action\">\n                <labels>\n                  <label mode=\"any\">Action</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The action to display.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>action</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/action_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"tabs\">\n      <configuration>\n        <sinceVersion>5.7</sinceVersion>\n        <title>Tabs</title>\n        <description>\n          <p>This widget displays tabs.</p>\n          <p>\n            It needs the list of actions as property \"actions\".\n            <br />\n            Its bound value is used for actions with type \"widget\".\n          </p>\n        </description>\n        <categories>\n          <category>hidden</category>\n        </categories>\n        <fields>\n          <defaultConfiguration>\n            <field></field>\n          </defaultConfiguration>\n        </fields>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"trackCurrentAction\">false</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"tabs_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget>actions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_addForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_useAjaxForm</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actionsDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">actions_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_overallDisplay</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_link_view</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_link_pattern</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">tabs_hideSingleTab</widget>\n                </row>\n              </rows>\n              <widget name=\"actions\" type=\"actions\">\n                <labels>\n                  <label mode=\"any\">Actions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The list of actions to display.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>actions</field>\n                </fields>\n                <widgetModes>\n                  <mode value=\"edit_demo_preview\">hidden</mode>\n                </widgetModes>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/actions/tabs_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/widgettypes-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.el.service--elContextFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf/org.nuxeo.ecm.platform.actions.jsf.elservice.contrib/Contributions/org.nuxeo.ecm.platform.actions.jsf.elservice.contrib--elContextFactory",
              "id": "org.nuxeo.ecm.platform.actions.jsf.elservice.contrib--elContextFactory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.el.service",
                "name": "org.nuxeo.ecm.platform.el.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"elContextFactory\" target=\"org.nuxeo.ecm.platform.el.service\">\n    <factory class=\"org.nuxeo.ecm.platform.actions.seam.SeamELContextFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf/org.nuxeo.ecm.platform.actions.jsf.elservice.contrib",
          "name": "org.nuxeo.ecm.platform.actions.jsf.elservice.contrib",
          "requirements": [],
          "resolutionOrder": 277,
          "services": [],
          "startOrder": 256,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.actions.jsf.elservice.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.el.service\" point=\"elContextFactory\">\n    <factory class=\"org.nuxeo.ecm.platform.actions.seam.SeamELContextFactory\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/el-service-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-actions-jsf-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.actions/org.nuxeo.ecm.actions.jsf",
      "id": "org.nuxeo.ecm.actions.jsf",
      "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: 0.0.0.SNAPSHOT\r\nBundle-Name: Nuxeo ECM Actions JSF\r\nBundle-SymbolicName: org.nuxeo.ecm.actions.jsf;singleton:=true\r\nBundle-Localization: bundle\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/action-widgettypes-contrib.xml,OSGI-INF/action\r\n -widgettypes-dev-contrib.xml,OSGI-INF/widgettypes-contrib.xml,OSGI-INF/\r\n el-service-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 277,
      "minResolutionOrder": 274,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": null,
      "artifactVersion": null,
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.config",
          "org.nuxeo.osgi.app"
        ],
        "hierarchyPath": "/grp:org.nuxeo.misc",
        "id": "grp:org.nuxeo.misc",
        "name": "org.nuxeo.misc",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.osgi.app",
      "components": [],
      "fileName": "nxserver",
      "groupId": "grp:org.nuxeo.misc",
      "hierarchyPath": "/grp:org.nuxeo.misc/org.nuxeo.osgi.app",
      "id": "org.nuxeo.osgi.app",
      "location": "",
      "manifest": "No MANIFEST.MF",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": null
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-relations-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.relations",
          "org.nuxeo.ecm.relations.api",
          "org.nuxeo.ecm.relations.core.listener",
          "org.nuxeo.ecm.relations.default.config",
          "org.nuxeo.ecm.relations.io",
          "org.nuxeo.ecm.relations.jena",
          "org.nuxeo.ecm.relations.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations",
        "id": "grp:org.nuxeo.ecm.relations",
        "name": "org.nuxeo.ecm.relations",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.relations.api",
      "components": [],
      "fileName": "nuxeo-platform-relations-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations.api",
      "id": "org.nuxeo.ecm.relations.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.relations.api,org.nuxeo.ecm.platf\r\n orm.relations.api.ejb,org.nuxeo.ecm.platform.relations.api.event,org.nu\r\n xeo.ecm.platform.relations.api.exceptions,org.nuxeo.ecm.platform.relati\r\n ons.api.impl,org.nuxeo.ecm.platform.relations.api.util\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: runtime\r\nBundle-Name: Nuxeo ECM Relations API\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nImport-Package: javax.annotation;version=\"1.0\",org.apache.commons.loggin\r\n g,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,org.nux\r\n eo.ecm.core.api.impl,org.nuxeo.ecm.directory;api=split,org.nuxeo.runtim\r\n e.api\r\nBundle-SymbolicName: org.nuxeo.ecm.relations.api;singleton:=true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-video-jsf",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.video",
          "org.nuxeo.ecm.platform.video.jsf",
          "org.nuxeo.ecm.platform.video.rest"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video",
        "id": "grp:org.nuxeo.ecm.platform.video",
        "name": "org.nuxeo.ecm.platform.video",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.video.jsf",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--bundles",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.ecm.platform.video.theme/Contributions/org.nuxeo.ecm.platform.video.theme--bundles",
              "id": "org.nuxeo.ecm.platform.video.theme--bundles",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bundles\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>video-js.css</resource>\n        <resource>video-js.nx.css</resource>\n        <resource>videojs.thumbnails.css</resource>\n        <resource>video-js.js</resource>\n        <resource>video-player-util.js</resource>\n        <resource>videojs.thumbnails.js</resource>\n        <resource>platform_video.css</resource>\n      </resources>\n    </bundle>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.ecm.platform.video.theme/Contributions/org.nuxeo.ecm.platform.video.theme--resources",
              "id": "org.nuxeo.ecm.platform.video.theme--resources",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <resource name=\"popup-utils.js\">\n      <uri>/scripts/popup-utils.js</uri>\n    </resource>\n    <resource name=\"video-js.css\">\n      <uri>/css/video-js.css</uri>\n    </resource>\n    <resource name=\"video-js.nx.css\">\n      <uri>/css/video-js.nx.css</uri>\n      <require>video-js.css</require>\n    </resource>\n    <resource name=\"videojs.thumbnails.css\">\n      <uri>/css/videojs.thumbnails.css</uri>\n    </resource>\n\n    <resource name=\"video-js.js\">\n      <uri>/scripts/video.js</uri>\n    </resource>\n    <resource name=\"video-player-util.js\">\n      <uri>/scripts/video-player-util.js</uri>\n      <require>video-js.js</require>\n    </resource>\n    <resource name=\"videojs.thumbnails.js\">\n      <uri>/scripts/videojs.thumbnails.js</uri>\n      <require>video-js.js</require>\n    </resource>\n\n    <resource name=\"platform_video.css\">\n      <path>themes/css/platform_video.css</path>\n    </resource>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.ecm.platform.video.theme",
          "name": "org.nuxeo.ecm.platform.video.theme",
          "requirements": [
            "org.nuxeo.theme.nuxeo.webapp"
          ],
          "resolutionOrder": 662,
          "services": [],
          "startOrder": 569,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.video.theme\">\n\n  <require>org.nuxeo.theme.nuxeo.webapp</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"bundles\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>video-js.css</resource>\n        <resource>video-js.nx.css</resource>\n        <resource>videojs.thumbnails.css</resource>\n        <resource>video-js.js</resource>\n        <resource>video-player-util.js</resource>\n        <resource>videojs.thumbnails.js</resource>\n        <resource>platform_video.css</resource>\n      </resources>\n    </bundle>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\n    <resource name=\"popup-utils.js\">\n      <uri>/scripts/popup-utils.js</uri>\n    </resource>\n    <resource name=\"video-js.css\">\n      <uri>/css/video-js.css</uri>\n    </resource>\n    <resource name=\"video-js.nx.css\">\n      <uri>/css/video-js.nx.css</uri>\n      <require>video-js.css</require>\n    </resource>\n    <resource name=\"videojs.thumbnails.css\">\n      <uri>/css/videojs.thumbnails.css</uri>\n    </resource>\n\n    <resource name=\"video-js.js\">\n      <uri>/scripts/video.js</uri>\n    </resource>\n    <resource name=\"video-player-util.js\">\n      <uri>/scripts/video-player-util.js</uri>\n      <require>video-js.js</require>\n    </resource>\n    <resource name=\"videojs.thumbnails.js\">\n      <uri>/scripts/videojs.thumbnails.js</uri>\n      <require>video-js.js</require>\n    </resource>\n\n    <resource name=\"platform_video.css\">\n      <path>themes/css/platform_video.css</path>\n    </resource>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/theme-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.ecm.platform.video.layouts/Contributions/org.nuxeo.ecm.platform.video.layouts--widgettypes",
              "id": "org.nuxeo.ecm.platform.video.layouts--widgettypes",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"video_player\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Video player</title>\n        <description>\n          <p>\n            This widget displays a HTML5 video player for browsers\n            supporting\n            it, and fallback on a Flash player for others.\n            It uses the WebM or\n            MP4 conversion (in 480p) of\n            a document having the facet 'Video'.\n          </p>\n          <p>\n            It requires the following fields configuration: first field maps\n            the document model.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"video_player_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>width</widget>\n                </row>\n                <row>\n                  <widget>height</widget>\n                </row>\n              </rows>\n              <widget name=\"width\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Width</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The width attribute of the Video player, eg. 100%, 550px or 450.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>width</field>\n                </fields>\n              </widget>\n              <widget name=\"height\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Height</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The height attribute of the Video player, eg. 550px, 450.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>height</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/video_player_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"video_storyboard\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Video storyboard</title>\n        <description>\n          <p>\n            This widget displays the story board of\n            a document having the facet\n            'Video'.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/video_storyboard_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"video_conversions\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Video conversions</title>\n        <description>\n          <p>\n            This widget displays the list of available\n            video conversions for the\n            given Video document.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/video_conversions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"video_info\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Video info</title>\n        <description>\n          <p>\n            This widget displays the information of the main video of\n            a document\n            having the facet 'Video'.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/video_info_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"video_file\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Video File</title>\n        <description>\n          <p>\n            The video widget displays a file uploader/editor in create or edit\n            mode, with additional message tag for errors.\n          </p>\n        </description>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"video_file_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget>acceptedExtensions</widget>\n                </row>\n              </rows>\n              <widget name=\"acceptedExtensions\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Accepted extensions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    A comma separated list of supported file\n                    extensions. Default value: '.mpg, .mpe, .mpeg, .wmv, .swf,\n                    .ogg, .ogv, .mkv, .mov, .qt, .avi, .mp4, .m4v, .flv, .fla'.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>acceptedExtensions</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>blob</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/video_file_widget_template.xhtml</property>\n    </widgetType>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.ecm.platform.video.layouts/Contributions/org.nuxeo.ecm.platform.video.layouts--widgets",
              "id": "org.nuxeo.ecm.platform.video.layouts--widgets",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"summary_video_player\" type=\"video_player\">\n      <properties widgetMode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"height\">380</property>\n      </properties>\n    </widget>\n\n    <widget name=\"summary_video_storyboard\" type=\"video_storyboard\">\n      <labels>\n        <label mode=\"any\">heading.storyboard</label>\n      </labels>\n      <translated>true</translated>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <widgetModes>\n        <mode value=\"any\">#{not empty currentDocumentAsBlobHolder.blob ? 'view' : 'hidden'}</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"summary_video_conversions\" type=\"video_conversions\">\n      <labels>\n        <label mode=\"any\">heading.videoConversions</label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <widgetModes>\n        <mode value=\"any\">#{not empty  currentDocumentAsBlobHolder.blob ? 'view' : 'hidden'}</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"summary_video_info\" type=\"video_info\">\n      <labels>\n        <label mode=\"any\">heading.video.info</label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"video_info_duration\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.video.duration</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/duration</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"video_info_width\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.widget.video.width</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/width</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"video_info_height\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.widget.video.height</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/height</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"video_info_format\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.video.format</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/format</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"video_info_frameRate\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.video.frameRate</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/frameRate</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"video_info_streams\" type=\"list\">\n      <labels>\n        <label mode=\"any\">label.widget.video.streams</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/streams</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"listItem\" type=\"text\">\n          <fields>\n            <field>streamInfo</field>\n          </fields>\n          <labels>\n            <label mode=\"any\"/>\n          </labels>\n          <widgetModes>\n            <mode value=\"any\">view</mode>\n          </widgetModes>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"videoFile\" type=\"video_file\">\n      <labels>\n        <label mode=\"any\">label.file.content</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>file:content</field>\n        <field>file:content/name</field>\n      </fields>\n    </widget>\n\n    <widget name=\"infoViewVideoPlayer\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewDocContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"videoPlayer\" type=\"video_player\">\n          <properties widgetMode=\"any\">\n            <property name=\"width\">100%</property>\n            <property name=\"height\">600</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.ecm.platform.video.layouts/Contributions/org.nuxeo.ecm.platform.video.layouts--actions",
              "id": "org.nuxeo.ecm.platform.video.layouts--actions",
              "registrationOrder": 36,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"summary_video_player\" order=\"50\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_video_player</property>\n      </properties>\n      <filter-id>hasVideo</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_view\">\n      <filter-id>notHasVideo</filter-id>\n    </action>\n\n    <action id=\"summary_video_conversions\" order=\"300\" type=\"widget\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_video_conversions</property>\n      </properties>\n      <filter-id>hasVideo</filter-id>\n    </action>\n\n    <action id=\"summary_video_storyboard\" order=\"340\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_video_storyboard</property>\n      </properties>\n      <filter-id>hasVideo</filter-id>\n    </action>\n\n    <action id=\"summary_video_info\" order=\"350\" type=\"widget\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_video_info</property>\n      </properties>\n      <filter-id>hasVideo</filter-id>\n    </action>\n\n    <action id=\"infoViewVideoPlayer\" order=\"100\" type=\"widget\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewVideoPlayer</property>\n      </properties>\n      <filter-id>hasVideo</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.ecm.platform.video.layouts/Contributions/org.nuxeo.ecm.platform.video.layouts--filters",
              "id": "org.nuxeo.ecm.platform.video.layouts--filters",
              "registrationOrder": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"notHasVideo\">\n      <rule grant=\"false\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n    <filter append=\"true\" id=\"denyInfoViewPreview\">\n      <rule grant=\"false\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--layouts",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.ecm.platform.video.layouts/Contributions/org.nuxeo.ecm.platform.video.layouts--layouts",
              "id": "org.nuxeo.ecm.platform.video.layouts--layouts",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"layouts\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <layout name=\"video_file\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>videoFile</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <!-- deprecated since 5.6, here for compat -->\n    <layout name=\"video_summary_layout\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_summary_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>summary_video_player</widget>\n          <widget>summary_current_document_files</widget>\n          <widget>summary_video_conversions</widget>\n          <widget>summary_current_document_comments</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_description</widget>\n          <widget>summary_current_document_states</widget>\n          <widget>summary_current_document_contributors</widget>\n          <widget>summary_video_storyboard</widget>\n          <widget>summary_video_info</widget>\n          <widget>summary_current_document_tagging</widget>\n          <widget>summary_current_document_relations</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_publications</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_single_tasks</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"video_info\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>video_info_format</widget>\n        </row>\n        <row>\n          <widget>video_info_duration</widget>\n        </row>\n        <row>\n          <widget>video_info_width</widget>\n        </row>\n        <row>\n          <widget>video_info_height</widget>\n        </row>\n        <row>\n          <widget>video_info_frameRate</widget>\n        </row>\n      </rows>\n    </layout>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.ecm.platform.video.layouts",
          "name": "org.nuxeo.ecm.platform.video.layouts",
          "requirements": [
            "org.nuxeo.ecm.platform.forms.layouts.webapp.summary"
          ],
          "resolutionOrder": 684,
          "services": [],
          "startOrder": 567,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.video.layouts\">\n\n  <require>org.nuxeo.ecm.platform.forms.layouts.webapp.summary</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"video_player\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Video player</title>\n        <description>\n          <p>\n            This widget displays a HTML5 video player for browsers\n            supporting\n            it, and fallback on a Flash player for others.\n            It uses the WebM or\n            MP4 conversion (in 480p) of\n            a document having the facet 'Video'.\n          </p>\n          <p>\n            It requires the following fields configuration: first field maps\n            the document model.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"video_player_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget>width</widget>\n                </row>\n                <row>\n                  <widget>height</widget>\n                </row>\n              </rows>\n              <widget name=\"width\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Width</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The width attribute of the Video player, eg. 100%, 550px or 450.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>width</field>\n                </fields>\n              </widget>\n              <widget name=\"height\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Height</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    The height attribute of the Video player, eg. 550px, 450.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>height</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/video_player_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"video_storyboard\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Video storyboard</title>\n        <description>\n          <p>\n            This widget displays the story board of\n            a document having the facet\n            'Video'.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/video_storyboard_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"video_conversions\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Video conversions</title>\n        <description>\n          <p>\n            This widget displays the list of available\n            video conversions for the\n            given Video document.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/video_conversions_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"video_info\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Video info</title>\n        <description>\n          <p>\n            This widget displays the information of the main video of\n            a document\n            having the facet 'Video'.\n          </p>\n        </description>\n        <handlingLabels>true</handlingLabels>\n        <categories>\n          <category>summary</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <!-- no configurable properties -->\n      </configuration>\n\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/video_info_widget_template.xhtml\n      </property>\n    </widgetType>\n\n    <widgetType name=\"video_file\">\n      <configuration>\n        <sinceVersion>5.7.2</sinceVersion>\n        <title>Video File</title>\n        <description>\n          <p>\n            The video widget displays a file uploader/editor in create or edit\n            mode, with additional message tag for errors.\n          </p>\n        </description>\n        <properties>\n          <layouts mode=\"edit\">\n            <layout name=\"video_file_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget>acceptedExtensions</widget>\n                </row>\n              </rows>\n              <widget name=\"acceptedExtensions\" type=\"text\">\n                <labels>\n                  <label mode=\"any\">Accepted extensions</label>\n                </labels>\n                <helpLabels>\n                  <label mode=\"any\">\n                    A comma separated list of supported file\n                    extensions. Default value: '.mpg, .mpe, .mpeg, .wmv, .swf,\n                    .ogg, .ogv, .mkv, .mov, .qt, .avi, .mp4, .m4v, .flv, .fla'.\n                  </label>\n                </helpLabels>\n                <fields>\n                  <field>acceptedExtensions</field>\n                </fields>\n              </widget>\n            </layout>\n          </layouts>\n        </properties>\n        <categories>\n          <category>document</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n          <mode>view</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>blob</type>\n          </supportedTypes>\n        </fields>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/video_file_widget_template.xhtml</property>\n    </widgetType>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"summary_video_player\" type=\"video_player\">\n      <properties widgetMode=\"any\">\n        <property name=\"width\">100%</property>\n        <property name=\"height\">380</property>\n      </properties>\n    </widget>\n\n    <widget name=\"summary_video_storyboard\" type=\"video_storyboard\">\n      <labels>\n        <label mode=\"any\">heading.storyboard</label>\n      </labels>\n      <translated>true</translated>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <widgetModes>\n        <mode value=\"any\">#{not empty currentDocumentAsBlobHolder.blob ? 'view' : 'hidden'}</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"summary_video_conversions\" type=\"video_conversions\">\n      <labels>\n        <label mode=\"any\">heading.videoConversions</label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"requireSurroundingForm\">true</control>\n        <control name=\"handleLabels\">true</control>\n      </controls>\n      <widgetModes>\n        <mode value=\"any\">#{not empty  currentDocumentAsBlobHolder.blob ? 'view' : 'hidden'}</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"summary_video_info\" type=\"video_info\">\n      <labels>\n        <label mode=\"any\">heading.video.info</label>\n      </labels>\n      <controls mode=\"any\">\n        <control name=\"handleLabels\">true</control>\n      </controls>\n    </widget>\n\n    <widget name=\"video_info_duration\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.video.duration</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/duration</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"video_info_width\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.widget.video.width</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/width</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"video_info_height\" type=\"int\">\n      <labels>\n        <label mode=\"any\">label.widget.video.height</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/height</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"video_info_format\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.video.format</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/format</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"video_info_frameRate\" type=\"text\">\n      <labels>\n        <label mode=\"any\">label.widget.video.frameRate</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/frameRate</field>\n      </fields>\n      <widgetModes>\n        <mode value=\"any\">view</mode>\n      </widgetModes>\n    </widget>\n\n    <widget name=\"video_info_streams\" type=\"list\">\n      <labels>\n        <label mode=\"any\">label.widget.video.streams</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>vid:info/streams</field>\n      </fields>\n      <properties widgetMode=\"edit\">\n        <property name=\"required\">true</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"listItem\" type=\"text\">\n          <fields>\n            <field>streamInfo</field>\n          </fields>\n          <labels>\n            <label mode=\"any\"></label>\n          </labels>\n          <widgetModes>\n            <mode value=\"any\">view</mode>\n          </widgetModes>\n        </widget>\n      </subWidgets>\n    </widget>\n\n    <widget name=\"videoFile\" type=\"video_file\">\n      <labels>\n        <label mode=\"any\">label.file.content</label>\n      </labels>\n      <translated>true</translated>\n      <fields>\n        <field>file:content</field>\n        <field>file:content/name</field>\n      </fields>\n    </widget>\n\n    <widget name=\"infoViewVideoPlayer\" type=\"container\">\n      <handlingLabels>false</handlingLabels>\n      <properties widgetMode=\"any\">\n        <property name=\"hideSubLabels\">true</property>\n        <property name=\"styleClass\">infoViewDocContainer</property>\n        <property name=\"display\">block_top</property>\n      </properties>\n      <subWidgets>\n        <widget name=\"videoPlayer\" type=\"video_player\">\n          <properties widgetMode=\"any\">\n            <property name=\"width\">100%</property>\n            <property name=\"height\">600</property>\n          </properties>\n        </widget>\n      </subWidgets>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"summary_video_player\" type=\"widget\" order=\"50\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_video_player</property>\n      </properties>\n      <filter-id>hasVideo</filter-id>\n    </action>\n\n    <action id=\"summary_current_document_view\">\n      <filter-id>notHasVideo</filter-id>\n    </action>\n\n    <action id=\"summary_video_conversions\" type=\"widget\" order=\"300\">\n      <category>SUMMARY_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">summary_video_conversions</property>\n      </properties>\n      <filter-id>hasVideo</filter-id>\n    </action>\n\n    <action id=\"summary_video_storyboard\" type=\"widget\" order=\"340\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_video_storyboard</property>\n      </properties>\n      <filter-id>hasVideo</filter-id>\n    </action>\n\n    <action id=\"summary_video_info\" type=\"widget\" order=\"350\">\n      <category>SUMMARY_PANEL_RIGHT</category>\n      <properties>\n        <property name=\"widgetName\">summary_video_info</property>\n      </properties>\n      <filter-id>hasVideo</filter-id>\n    </action>\n\n    <action id=\"infoViewVideoPlayer\" type=\"widget\" order=\"100\">\n      <category>INFO_VIEW_PANEL_LEFT</category>\n      <properties>\n        <property name=\"widgetName\">infoViewVideoPlayer</property>\n      </properties>\n      <filter-id>hasVideo</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"notHasVideo\">\n      <rule grant=\"false\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"denyInfoViewPreview\" append=\"true\">\n      <rule grant=\"false\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"layouts\">\n\n    <layout name=\"video_file\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>videoFile</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <!-- deprecated since 5.6, here for compat -->\n    <layout name=\"video_summary_layout\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_summary_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>summary_video_player</widget>\n          <widget>summary_current_document_files</widget>\n          <widget>summary_video_conversions</widget>\n          <widget>summary_current_document_comments</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_description</widget>\n          <widget>summary_current_document_states</widget>\n          <widget>summary_current_document_contributors</widget>\n          <widget>summary_video_storyboard</widget>\n          <widget>summary_video_info</widget>\n          <widget>summary_current_document_tagging</widget>\n          <widget>summary_current_document_relations</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_publications</widget>\n        </row>\n        <row>\n          <widget>summary_current_document_single_tasks</widget>\n        </row>\n      </rows>\n    </layout>\n\n    <layout name=\"video_info\">\n      <templates>\n        <template mode=\"any\">/layouts/layout_default_template.xhtml</template>\n      </templates>\n      <rows>\n        <row>\n          <widget>video_info_format</widget>\n        </row>\n        <row>\n          <widget>video_info_duration</widget>\n        </row>\n        <row>\n          <widget>video_info_width</widget>\n        </row>\n        <row>\n          <widget>video_info_height</widget>\n        </row>\n        <row>\n          <widget>video_info_frameRate</widget>\n        </row>\n      </rows>\n    </layout>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouts-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent--MimeTypePreviewer",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.platform.video.core.previewer/Contributions/org.nuxeo.platform.video.core.previewer--MimeTypePreviewer",
              "id": "org.nuxeo.platform.video.core.previewer--MimeTypePreviewer",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "name": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"MimeTypePreviewer\" target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\">\n    <previewer class=\"org.nuxeo.ecm.platform.video.VideoDocumentPreviewer\">\n      <pattern>video.*</pattern>\n    </previewer>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.platform.video.core.previewer",
          "name": "org.nuxeo.platform.video.core.previewer",
          "requirements": [
            "org.nuxeo.ecm.platform.preview.adapter.contrib"
          ],
          "resolutionOrder": 697,
          "services": [],
          "startOrder": 706,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.platform.video.core.previewer\">\n  <require>org.nuxeo.ecm.platform.preview.adapter.contrib</require>\n  <extension target=\"org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent\"\n             point=\"MimeTypePreviewer\">\n    <previewer class=\"org.nuxeo.ecm.platform.video.VideoDocumentPreviewer\">\n      <pattern>video.*</pattern>\n    </previewer>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/preview-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.ecm.platform.video.jsf.actions/Contributions/org.nuxeo.ecm.platform.video.jsf.actions--filters",
              "id": "org.nuxeo.ecm.platform.video.jsf.actions--filters",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter append=\"true\" id=\"view_preview\">\n      <rule grant=\"false\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n    <filter append=\"true\" id=\"popup_view_preview\">\n      <rule grant=\"false\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf/org.nuxeo.ecm.platform.video.jsf.actions",
          "name": "org.nuxeo.ecm.platform.video.jsf.actions",
          "requirements": [
            "org.nuxeo.ecm.platform.preview.actions"
          ],
          "resolutionOrder": 706,
          "services": [],
          "startOrder": 565,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.video.jsf.actions\">\n\n  <require>org.nuxeo.ecm.platform.preview.actions</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"view_preview\" append=\"true\">\n      <rule grant=\"false\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"popup_view_preview\" append=\"true\">\n      <rule grant=\"false\">\n        <facet>Video</facet>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-video-jsf-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.jsf",
      "id": "org.nuxeo.ecm.platform.video.jsf",
      "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: 1\r\nBundle-Version: 1.0.0\r\nRequire-Bundle: org.nuxeo.ecm.platform.video.core\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: true\r\nBundle-Category: web,stateless\r\nBundle-Name: Nuxeo Picture Video JSF\r\nNuxeo-Component: OSGI-INF/layouts-contrib.xml,OSGI-INF/actions-contrib.x\r\n ml,OSGI-INF/theme-contrib.xml,OSGI-INF/preview-adapter-contrib.xml\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.video.jsf;singleton:=true\r\nNuxeo-Require: org.nuxeo.ecm.platform.video.core\r\n\r\n",
      "maxResolutionOrder": 706,
      "minResolutionOrder": 662,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.video.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-drive-elasticsearch",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.drive.core",
          "org.nuxeo.drive.elasticsearch",
          "org.nuxeo.drive.mongodb",
          "org.nuxeo.drive.operations",
          "org.nuxeo.drive.rest.api"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive",
        "id": "grp:org.nuxeo.drive",
        "name": "org.nuxeo.drive",
        "parentIds": [
          "grp:org.nuxeo.ecm"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Drive Server\n\nAddon needed for [Nuxeo Drive](https://github.com/nuxeo/nuxeo-drive) to work against a Nuxeo Platform instance.\n\n# Building\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Drive Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-drive).\nOr manually copy the built artifacts into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\nYou should then have the 'Nuxeo Drive' tab in your Home allowing you to download the Nuxeo Drive client for your favorite OS :-)\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "306b3963ae3cd8b8df650083c958429f",
            "encoding": "UTF-8",
            "length": 1224,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.drive.elasticsearch",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl--changeFinder",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.elasticsearch/org.nuxeo.drive.elasticsearch.change.finder/Contributions/org.nuxeo.drive.elasticsearch.change.finder--changeFinder",
              "id": "org.nuxeo.drive.elasticsearch.change.finder--changeFinder",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl",
                "name": "org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"changeFinder\" target=\"org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl\">\n    <changeFinder class=\"org.nuxeo.drive.elasticsearch.ESAuditChangeFinder\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.elasticsearch/org.nuxeo.drive.elasticsearch.change.finder",
          "name": "org.nuxeo.drive.elasticsearch.change.finder",
          "requirements": [
            "org.nuxeo.drive.change.finder",
            "org.nuxeo.elasticsearch.audit.contrib"
          ],
          "resolutionOrder": 813,
          "services": [],
          "startOrder": 73,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.elasticsearch.change.finder\" version=\"1.0\">\n\n  <require>org.nuxeo.drive.change.finder</require>\n  <require>org.nuxeo.elasticsearch.audit.contrib</require>\n\n  <extension target=\"org.nuxeo.drive.service.impl.NuxeoDriveManagerImpl\" point=\"changeFinder\">\n    <changeFinder class=\"org.nuxeo.drive.elasticsearch.ESAuditChangeFinder\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-elasticsearch-change-finder-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.elasticsearch/org.nuxeo.drive.elasticsearch.operations/Contributions/org.nuxeo.drive.elasticsearch.operations--operations",
              "id": "org.nuxeo.drive.elasticsearch.operations--operations",
              "registrationOrder": 34,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <!-- For test purpose -->\n    <operation class=\"org.nuxeo.drive.elasticsearch.operations.test.NuxeoDriveWaitForElasticsearchCompletion\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.elasticsearch/org.nuxeo.drive.elasticsearch.operations",
          "name": "org.nuxeo.drive.elasticsearch.operations",
          "requirements": [
            "org.nuxeo.elasticsearch.audit.contrib"
          ],
          "resolutionOrder": 814,
          "services": [],
          "startOrder": 74,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.drive.elasticsearch.operations\">\n\n  <require>org.nuxeo.elasticsearch.audit.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <!-- For test purpose -->\n    <operation class=\"org.nuxeo.drive.elasticsearch.operations.test.NuxeoDriveWaitForElasticsearchCompletion\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-elasticsearch-operations.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.automation.server.AutomationServer--bindings",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.elasticsearch/org.nuxeo.drive.elasticsearch.automation.server.bindings/Contributions/org.nuxeo.drive.elasticsearch.automation.server.bindings--bindings",
              "id": "org.nuxeo.drive.elasticsearch.automation.server.bindings--bindings",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bindings\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <!-- Protect Nuxeo Drive integration test operations -->\n    <binding name=\"NuxeoDrive.WaitForElasticsearchCompletion\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.elasticsearch/org.nuxeo.drive.elasticsearch.automation.server.bindings",
          "name": "org.nuxeo.drive.elasticsearch.automation.server.bindings",
          "requirements": [
            "org.nuxeo.elasticsearch.audit.contrib"
          ],
          "resolutionOrder": 815,
          "services": [],
          "startOrder": 72,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.elasticsearch.automation.server.bindings\" version=\"1.0\">\n\n  <require>org.nuxeo.elasticsearch.audit.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.automation.server.AutomationServer\" point=\"bindings\">\n    <!-- Protect Nuxeo Drive integration test operations -->\n    <binding name=\"NuxeoDrive.WaitForElasticsearchCompletion\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-elasticsearch-automation-bindings-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-drive-elasticsearch-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm",
      "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.elasticsearch",
      "id": "org.nuxeo.drive.elasticsearch",
      "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: 2023.7.9-t20240130-153935\r\nBundle-Vendor: Nuxeo\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.drive.elasticsearch\r\nNuxeo-Component: OSGI-INF/nuxeodrive-elasticsearch-change-finder-contrib\r\n .xml,OSGI-INF/nuxeodrive-elasticsearch-operations.xml,OSGI-INF/nuxeodri\r\n ve-elasticsearch-automation-bindings-contrib.xml\r\nBundle-SymbolicName: org.nuxeo.drive.elasticsearch;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 815,
      "minResolutionOrder": 813,
      "packages": [
        "nuxeo-drive"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Drive Server\n\nAddon needed for [Nuxeo Drive](https://github.com/nuxeo/nuxeo-drive) to work against a Nuxeo Platform instance.\n\n# Building\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Drive Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-drive).\nOr manually copy the built artifacts into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\nYou should then have the 'Nuxeo Drive' tab in your Home allowing you to download the Nuxeo Drive client for your favorite OS :-)\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "306b3963ae3cd8b8df650083c958429f",
        "encoding": "UTF-8",
        "length": 1224,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-arender-rest-api",
      "artifactVersion": "2023.0.5",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "com.nuxeo.ecm.annotation.arender.core",
          "com.nuxeo.ecm.annotation.arender.restapi",
          "com.nuxeo.ecm.annotation.arender.web.ui"
        ],
        "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender",
        "id": "grp:com.nuxeo.ecm.annotation.arender",
        "name": "com.nuxeo.ecm.annotation.arender",
        "parentIds": [
          "grp:com.nuxeo.arender"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "com.nuxeo.ecm.annotation.arender.restapi",
      "components": [],
      "fileName": "nuxeo-arender-rest-api-2023.0.5.jar",
      "groupId": "com.nuxeo.arender",
      "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.restapi",
      "id": "com.nuxeo.ecm.annotation.arender.restapi",
      "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.7\r\nBundle-ManifestVersion: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: nuxeo-arender-rest-api\r\nBundle-SymbolicName: com.nuxeo.ecm.annotation.arender.restapi;singleton:\r\n =true\r\nFragment-Host: org.nuxeo.ecm.platform.restapi.server\r\nBundle-Vendor: Nuxeo\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [
        "nuxeo-arender"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.0.5"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-webapp-types",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.web.common",
          "org.nuxeo.ecm.platform.webapp.types"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web",
        "id": "grp:org.nuxeo.ecm.platform.web",
        "name": "org.nuxeo.ecm.platform.web",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.webapp.types",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.webapp.types/org.nuxeo.ecm.platform.webapp.schemas/Contributions/org.nuxeo.ecm.platform.webapp.schemas--schema",
              "id": "org.nuxeo.ecm.platform.webapp.schemas--schema",
              "registrationOrder": 43,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"advanced_search\" prefix=\"search\" src=\"schemas/advanced_search.xsd\"/>\n    <schema name=\"advanced_content\" prefix=\"advanced_content\" src=\"schemas/advanced_content.xsd\"/>\n    <schema name=\"content_view_display\" prefix=\"cvd\" src=\"schemas/content_view_display.xsd\"/>\n    <schema name=\"expired_search\" prefix=\"expired_search\" src=\"schemas/expired_search.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.webapp.types/org.nuxeo.ecm.platform.webapp.schemas/Contributions/org.nuxeo.ecm.platform.webapp.schemas--doctype",
              "id": "org.nuxeo.ecm.platform.webapp.schemas--doctype",
              "registrationOrder": 41,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"ContentViewDisplay\">\n      <schema name=\"content_view_display\"/>\n    </facet>\n\n    <doctype extends=\"Document\" name=\"AdvancedSearch\">\n      <schema name=\"advanced_search\"/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"AdvancedContent\">\n      <schema name=\"advanced_content\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.webapp.types/org.nuxeo.ecm.platform.webapp.schemas",
          "name": "org.nuxeo.ecm.platform.webapp.schemas",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 692,
          "services": [],
          "startOrder": 580,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.webapp.schemas\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"advanced_search\" src=\"schemas/advanced_search.xsd\"\n      prefix=\"search\" />\n    <schema name=\"advanced_content\" src=\"schemas/advanced_content.xsd\"\n      prefix=\"advanced_content\" />\n    <schema name=\"content_view_display\" src=\"schemas/content_view_display.xsd\"\n      prefix=\"cvd\" />\n    <schema name=\"expired_search\" src=\"schemas/expired_search.xsd\"\n      prefix=\"expired_search\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <facet name=\"ContentViewDisplay\">\n      <schema name=\"content_view_display\" />\n    </facet>\n\n    <doctype name=\"AdvancedSearch\" extends=\"Document\">\n      <schema name=\"advanced_search\" />\n    </doctype>\n\n    <doctype name=\"AdvancedContent\" extends=\"Document\">\n      <schema name=\"advanced_content\" />\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/ecm-schemas-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.webapp.types/org.nuxeo.ecm.platform.types/Contributions/org.nuxeo.ecm.platform.types--types",
              "id": "org.nuxeo.ecm.platform.types--types",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n\n    <type id=\"Root\">\n      <label>Server Root</label>\n      <icon>/icons/folder.gif</icon>\n      <bigIcon>/icons/folder_100.png</bigIcon>\n      <description>serverRoot.description</description>\n      <category>SuperDocument</category>\n      <default-view>view_domains</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Domain\">\n      <label>Domain</label>\n      <icon>/icons/domain.gif</icon>\n      <bigIcon>/icons/domain.gif</bigIcon>\n      <category>SuperDocument</category>\n      <description>Domain.description</description>\n      <default-view>view_documents</default-view>\n      <create-view>create_domain</create-view>\n      <views>\n        <view id=\"user_dashboard\" value=\"user_dashboard\"/>\n      </views>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"WorkspaceRoot\">\n      <label>WorkspaceRoot</label>\n      <icon>/icons/workspace.gif</icon>\n      <bigIcon>/icons/workspace_100.png</bigIcon>\n      <category>SuperDocument</category>\n      <description>WorkspaceRoot.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"TemplateRoot\">\n      <label>TemplateRoot</label>\n      <icon>/icons/folder_template.gif</icon>\n      <bigIcon>/icons/template_100.png</bigIcon>\n      <category>SuperDocument</category>\n      <description>TemplateRoot.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Workspace\">\n      <label>Workspace</label>\n      <icon>/icons/workspace.gif</icon>\n      <bigIcon>/icons/workspace_100.png</bigIcon>\n      <category>Collaborative</category>\n      <description>Workspace.description</description>\n      <default-view>view_documents</default-view>\n      <create-view>create_workspace</create-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <!--<layout>file</layout> -->\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <!--<layout>file</layout> -->\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"SectionRoot\">\n      <label>SectionRoot</label>\n      <icon>/icons/section.png</icon>\n      <bigIcon>/icons/section_100.png</bigIcon>\n      <category>SuperDocument</category>\n      <description>SectionRoot.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>section_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Section\">\n      <label>Section</label>\n      <icon>/icons/section.png</icon>\n      <bigIcon>/icons/section_100.png</bigIcon>\n      <category>Collaborative</category>\n      <description>Section.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>section_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Folder\">\n      <label>Folder</label>\n      <icon>/icons/folder.gif</icon>\n      <bigIcon>/icons/folder_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      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"OrderedFolder\">\n      <label>OrderedFolder</label>\n      <icon>/icons/ordered_folder.png</icon>\n      <bigIcon>/icons/ordered_folder_100.png</bigIcon>\n      <category>Collaborative</category>\n      <description>OrderedFolder.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>orderable_document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"File\">\n      <label>File</label>\n      <icon>/icons/file.gif</icon>\n      <bigIcon>/icons/file_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <description>File.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>file</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>file</layout>\n        <layout>dublincore</layout>\n      </layouts>\n    </type>\n\n    <type id=\"Note\">\n      <label>Note</label>\n      <icon>/icons/note.gif</icon>\n      <bigIcon>/icons/note_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <description>Note.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>note</layout>\n      </layouts>\n      <!-- no more needed since 5.6: use the default summary grid layout -->\n      <!--\n        <layouts mode=\"summary\">\n        <layout>note_summary_layout</layout>\n        </layouts>\n      -->\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>note</layout>\n        <layout>dublincore</layout>\n      </layouts>\n    </type>\n\n    <type id=\"AdvancedSearch\">\n      <label>Advanced Search</label>\n      <icon>/icons/advanced_search.gif</icon>\n      <bigIcon>/icons/folder_100.png</bigIcon>\n      <default-view>view_documents</default-view>\n    </type>\n\n    <type id=\"Collections\">\n      <label>Collections</label>\n      <description/>\n      <default-view>view_documents</default-view>\n      <icon>/icons/collection.png</icon>\n      <bigIcon>/icons/collection_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      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Collection\">\n      <label>Collection</label>\n      <description/>\n      <default-view>view_documents</default-view>\n      <icon>/icons/collection.png</icon>\n      <bigIcon>/icons/collection_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      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"collectionContent\">\n        <contentView showInExportView=\"false\">collection_content_contentview</contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Favorites\">\n      <label>Favorites</label>\n      <description/>\n      <default-view>view_documents</default-view>\n      <icon>/icons/pin.png</icon>\n      <bigIcon>/icons/pin_100.png</bigIcon>\n      <description>Folder.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"collectionContent\">\n        <contentView showInExportView=\"false\">collection_content_contentview</contentView>\n      </contentViews>\n    </type>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.webapp.types/org.nuxeo.ecm.platform.types",
          "name": "org.nuxeo.ecm.platform.types",
          "requirements": [],
          "resolutionOrder": 693,
          "services": [],
          "startOrder": 519,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<component name=\"org.nuxeo.ecm.platform.types\">\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n\n    <type id=\"Root\">\n      <label>Server Root</label>\n      <icon>/icons/folder.gif</icon>\n      <bigIcon>/icons/folder_100.png</bigIcon>\n      <description>serverRoot.description</description>\n      <category>SuperDocument</category>\n      <default-view>view_domains</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Domain\">\n      <label>Domain</label>\n      <icon>/icons/domain.gif</icon>\n      <bigIcon>/icons/domain.gif</bigIcon>\n      <category>SuperDocument</category>\n      <description>Domain.description</description>\n      <default-view>view_documents</default-view>\n      <create-view>create_domain</create-view>\n      <views>\n        <view id=\"user_dashboard\" value=\"user_dashboard\" />\n      </views>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"WorkspaceRoot\">\n      <label>WorkspaceRoot</label>\n      <icon>/icons/workspace.gif</icon>\n      <bigIcon>/icons/workspace_100.png</bigIcon>\n      <category>SuperDocument</category>\n      <description>WorkspaceRoot.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"TemplateRoot\">\n      <label>TemplateRoot</label>\n      <icon>/icons/folder_template.gif</icon>\n      <bigIcon>/icons/template_100.png</bigIcon>\n      <category>SuperDocument</category>\n      <description>TemplateRoot.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Workspace\">\n      <label>Workspace</label>\n      <icon>/icons/workspace.gif</icon>\n      <bigIcon>/icons/workspace_100.png</bigIcon>\n      <category>Collaborative</category>\n      <description>Workspace.description</description>\n      <default-view>view_documents</default-view>\n      <create-view>create_workspace</create-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <!--<layout>file</layout> -->\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <!--<layout>file</layout> -->\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"SectionRoot\">\n      <label>SectionRoot</label>\n      <icon>/icons/section.png</icon>\n      <bigIcon>/icons/section_100.png</bigIcon>\n      <category>SuperDocument</category>\n      <description>SectionRoot.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>section_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Section\">\n      <label>Section</label>\n      <icon>/icons/section.png</icon>\n      <bigIcon>/icons/section_100.png</bigIcon>\n      <category>Collaborative</category>\n      <description>Section.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>section_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Folder\">\n      <label>Folder</label>\n      <icon>/icons/folder.gif</icon>\n      <bigIcon>/icons/folder_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      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"OrderedFolder\">\n      <label>OrderedFolder</label>\n      <icon>/icons/ordered_folder.png</icon>\n      <bigIcon>/icons/ordered_folder_100.png</bigIcon>\n      <category>Collaborative</category>\n      <description>OrderedFolder.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>orderable_document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"File\">\n      <label>File</label>\n      <icon>/icons/file.gif</icon>\n      <bigIcon>/icons/file_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <description>File.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>file</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>file</layout>\n        <layout>dublincore</layout>\n      </layouts>\n    </type>\n\n    <type id=\"Note\">\n      <label>Note</label>\n      <icon>/icons/note.gif</icon>\n      <bigIcon>/icons/note_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <description>Note.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>note</layout>\n      </layouts>\n      <!-- no more needed since 5.6: use the default summary grid layout -->\n      <!--\n        <layouts mode=\"summary\">\n        <layout>note_summary_layout</layout>\n        </layouts>\n      -->\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>note</layout>\n        <layout>dublincore</layout>\n      </layouts>\n    </type>\n\n    <type id=\"AdvancedSearch\">\n      <label>Advanced Search</label>\n      <icon>/icons/advanced_search.gif</icon>\n      <bigIcon>/icons/folder_100.png</bigIcon>\n      <default-view>view_documents</default-view>\n    </type>\n\n    <type id=\"Collections\">\n      <label>Collections</label>\n      <description></description>\n      <default-view>view_documents</default-view>\n      <icon>/icons/collection.png</icon>\n      <bigIcon>/icons/collection_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      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"content\">\n        <contentView>document_content</contentView>\n      </contentViews>\n      <contentViews category=\"trash_content\">\n        <contentView showInExportView=\"false\">\n          document_trash_content\n        </contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Collection\">\n      <label>Collection</label>\n      <description></description>\n      <default-view>view_documents</default-view>\n      <icon>/icons/collection.png</icon>\n      <bigIcon>/icons/collection_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      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"collectionContent\">\n        <contentView showInExportView=\"false\">collection_content_contentview</contentView>\n      </contentViews>\n    </type>\n\n    <type id=\"Favorites\">\n      <label>Favorites</label>\n      <description></description>\n      <default-view>view_documents</default-view>\n      <icon>/icons/pin.png</icon>\n      <bigIcon>/icons/pin_100.png</bigIcon>\n      <description>Folder.description</description>\n      <default-view>view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n      </layouts>\n      <layouts mode=\"edit\">\n        <layout>heading</layout>\n        <layout>dublincore</layout>\n      </layouts>\n      <contentViews category=\"collectionContent\">\n        <contentView showInExportView=\"false\">collection_content_contentview</contentView>\n      </contentViews>\n    </type>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/ecm-types-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-webapp-types-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.web/org.nuxeo.ecm.platform.webapp.types",
      "id": "org.nuxeo.ecm.platform.webapp.types",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240130-104817\r\nBundle-Name: Nuxeo ECM Webapp types contributions\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.webapp.types;singleton=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: core\r\nNuxeo-Component: OSGI-INF/ecm-schemas-contrib.xml,OSGI-INF/ecm-types-con\r\n trib.xml\r\nRequire-Bundle: org.nuxeo.ecm.core.schema, org.nuxeo.ecm.core\r\n\r\n",
      "maxResolutionOrder": 693,
      "minResolutionOrder": 692,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.schema",
        "org.nuxeo.ecm.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-comment-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.comment",
          "org.nuxeo.ecm.platform.comment.api",
          "org.nuxeo.ecm.platform.comment.core",
          "org.nuxeo.ecm.platform.comment.restapi",
          "org.nuxeo.ecm.platform.comment.web",
          "org.nuxeo.ecm.platform.comment.workflow"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment",
        "id": "grp:org.nuxeo.ecm.platform.comment",
        "name": "org.nuxeo.ecm.platform.comment",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.comment.api",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Defines Commentable document adapter\n  \n",
          "documentationHtml": "<p>\nDefines Commentable document adapter\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.api/org.nuxeo.ecm.platform.comment.api.Adapter/Contributions/org.nuxeo.ecm.platform.comment.api.Adapter--adapters",
              "id": "org.nuxeo.ecm.platform.comment.api.Adapter--adapters",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.platform.comment.api.CommentableDocument\" factory=\"org.nuxeo.ecm.platform.comment.impl.CommentableAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.api/org.nuxeo.ecm.platform.comment.api.Adapter",
          "name": "org.nuxeo.ecm.platform.comment.api.Adapter",
          "requirements": [],
          "resolutionOrder": 322,
          "services": [],
          "startOrder": 284,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.api.Adapter\">\n\n  <documentation>\n    Defines Commentable document adapter\n  </documentation>\n\n  <!-- Commentable Document Adapter -->\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.platform.comment.api.CommentableDocument\"\n      factory=\"org.nuxeo.ecm.platform.comment.impl.CommentableAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/CommentableAdapter.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.api/org.nuxeo.ecm.comment.adapter/Contributions/org.nuxeo.ecm.comment.adapter--adapters",
              "id": "org.nuxeo.ecm.comment.adapter--adapters",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.platform.comment.api.Annotation\" factory=\"org.nuxeo.ecm.platform.comment.api.CommentAdapterFactory\"/>\n    <adapter class=\"org.nuxeo.ecm.platform.comment.api.Comment\" factory=\"org.nuxeo.ecm.platform.comment.api.CommentAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.api/org.nuxeo.ecm.comment.adapter",
          "name": "org.nuxeo.ecm.comment.adapter",
          "requirements": [],
          "resolutionOrder": 323,
          "services": [],
          "startOrder": 109,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.comment.adapter\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\" point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.platform.comment.api.Annotation\"\n             factory=\"org.nuxeo.ecm.platform.comment.api.CommentAdapterFactory\" />\n    <adapter class=\"org.nuxeo.ecm.platform.comment.api.Comment\"\n             factory=\"org.nuxeo.ecm.platform.comment.api.CommentAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-adapter-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-comment-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.api",
      "id": "org.nuxeo.ecm.platform.comment.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.comment.api,org.nuxeo.ecm.platfor\r\n m.comment.impl,org.nuxeo.ecm.platform.comment.workflow.services,org.nux\r\n eo.ecm.platform.comment.workflow.utils\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo Comment API project\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/CommentableAdapter.xml,OSGI-INF/comment-adapte\r\n r-contrib.xml\r\nImport-Package: javax.annotation;version=\"1.0\",org.nuxeo.ecm.core;api=sp\r\n lit,org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.adapter,org\r\n .nuxeo.ecm.directory;api=split,org.nuxeo.ecm.platform.relations.api,org\r\n .nuxeo.runtime.api\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.comment.api;singleton=true\r\n\r\n",
      "maxResolutionOrder": 323,
      "minResolutionOrder": 322,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-aspera-web",
      "artifactVersion": "2023.3.3",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "com.nuxeo.aspera.connector.nuxeo-aspera-core",
          "nuxeo-aspera-web",
          "org.nuxeo.ecm.restapi.jaxrs.aspera"
        ],
        "hierarchyPath": "/grp:com.nuxeo.aspera.connector",
        "id": "grp:com.nuxeo.aspera.connector",
        "name": "com.nuxeo.aspera.connector",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=aspera%2Fnuxeo-aspera-connector%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector/job/lts-2023/)\n# Nuxeo Aspera Connector\n\nThe Nuxeo Aspera connector enables users to upload/download binaries with the Aspera Connect client.\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/n/Kvd)\n\n## Context\n\nNuxeo Aspera Connector is an addon that can be plugged to Nuxeo.\nThis repository contains the backend and frontend contributions for the [Nuxeo Platform](https://github.com/nuxeo/nuxeo) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\nNuxeo Aspera Connector code is bundled as a [marketplace package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) that includes all the backend and frontend contributions.\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Nuxeo Aspera Connector pipeline\n- **nuxeo-aspera-core**: Backend contribution for Nuxeo Platform\n- **nuxeo-aspera-package**: Builder for [nuxeo-aspera](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) marketplace package. This package will install all the necessary mechanisms to integrate Aspera Connector capabilities into Nuxeo\n- **nuxeo-aspera-rest**: REST APIs\n- **nuxeo-aspera-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip`_ file for the package.\n\n### Frontend Contributions\n\n`nuxeo-aspera-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Unit Tests\n\n```shell script\nnpm run test\n```\n\n[Web Test Runner](https://modern-web.dev/docs/test-runner/overview/) is the test runner used to run this contribution unit tests.\nThe tests run against bundled versions of Chromium, Firefox and Webkit, using [Playwright](https://www.npmjs.com/package/playwright)\n\n#### Functional tests\n\nTo test Aspera functionality we use `nuxeo-web-ui-ftest` helpers. To run them, we use the command: \n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.1.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `lts/dubnium`, i.e., `v14`.\n\n## Developer Workflow\n\n### Backend\n\n```shell script\nmvn clean install\n```\n\nThat will generate an aspera zip file in the target area, which you can manually install in your server instance.\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Aspera Management UI, it is assumed that there is a Nuxeo server running with Nuxeo Aspera Management package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui#readme).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\nNot being perfect, the suggested way of integration is to create a _symlink_ inside addons folder, under your checkout of Web UI repo and then serve it with `nuxeo-aspera` package/addon.\n\n***Creating the Symlink***\n\n```shell script\ncd ${yourWebUiCheckout}/addons\nln -s ~/${yourAsperaManagementCheckout}/nuxeo-aspera/nuxeo-aspera-web nuxeo-aspera\n```\n\n***Serving Web UI with Aspera Management***\n\n```shell script\nNUXEO_PACKAGES=\"nuxeo-aspera\" npm run start\n```\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Aspera Connector integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector) for each reference branch, and also for each opened PR.\n\nThe following features are available:\n\n- Possibility of having a dedicated preview environment for a PR by using the tag GitHub PR tag `preview`\n- Each PR merge to reference branch will generate a \"release candidate\" package\n\n### Localization Management\n\nTranslations are managed with [Crowdin](https://crowdin.com/).\n\nThe reference file [message.json](./nuxeo-aspera-web/i18n/messages.json) contains the labels and the English values.\n\nTranslations for other languages are managed in the [nuxeo-aspera](https://crowdin.com/project/nuxeo-aspera) Crowdin project, e.g. [French](https://crowdin.com/translate/nuxeo-aspera/4/en-fr).\n\nThe Crowdin GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).\n",
            "digest": "930cbe858f83a0b6985cd093f9462127",
            "encoding": "UTF-8",
            "length": 7878,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "nuxeo-aspera-web",
      "components": [],
      "fileName": "nuxeo-aspera-web-2023.3.3.jar",
      "groupId": "com.nuxeo.aspera.connector",
      "hierarchyPath": "/grp:com.nuxeo.aspera.connector/nuxeo-aspera-web",
      "id": "nuxeo-aspera-web",
      "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.8.1\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.0\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: nuxeo-aspera-web\r\nBundle-SymbolicName: nuxeo-aspera-web;singleton=true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [
        "nuxeo-aspera"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=aspera%2Fnuxeo-aspera-connector%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector/job/lts-2023/)\n# Nuxeo Aspera Connector\n\nThe Nuxeo Aspera connector enables users to upload/download binaries with the Aspera Connect client.\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/n/Kvd)\n\n## Context\n\nNuxeo Aspera Connector is an addon that can be plugged to Nuxeo.\nThis repository contains the backend and frontend contributions for the [Nuxeo Platform](https://github.com/nuxeo/nuxeo) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\nNuxeo Aspera Connector code is bundled as a [marketplace package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) that includes all the backend and frontend contributions.\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Nuxeo Aspera Connector pipeline\n- **nuxeo-aspera-core**: Backend contribution for Nuxeo Platform\n- **nuxeo-aspera-package**: Builder for [nuxeo-aspera](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) marketplace package. This package will install all the necessary mechanisms to integrate Aspera Connector capabilities into Nuxeo\n- **nuxeo-aspera-rest**: REST APIs\n- **nuxeo-aspera-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip`_ file for the package.\n\n### Frontend Contributions\n\n`nuxeo-aspera-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Unit Tests\n\n```shell script\nnpm run test\n```\n\n[Web Test Runner](https://modern-web.dev/docs/test-runner/overview/) is the test runner used to run this contribution unit tests.\nThe tests run against bundled versions of Chromium, Firefox and Webkit, using [Playwright](https://www.npmjs.com/package/playwright)\n\n#### Functional tests\n\nTo test Aspera functionality we use `nuxeo-web-ui-ftest` helpers. To run them, we use the command: \n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.1.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `lts/dubnium`, i.e., `v14`.\n\n## Developer Workflow\n\n### Backend\n\n```shell script\nmvn clean install\n```\n\nThat will generate an aspera zip file in the target area, which you can manually install in your server instance.\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Aspera Management UI, it is assumed that there is a Nuxeo server running with Nuxeo Aspera Management package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui#readme).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\nNot being perfect, the suggested way of integration is to create a _symlink_ inside addons folder, under your checkout of Web UI repo and then serve it with `nuxeo-aspera` package/addon.\n\n***Creating the Symlink***\n\n```shell script\ncd ${yourWebUiCheckout}/addons\nln -s ~/${yourAsperaManagementCheckout}/nuxeo-aspera/nuxeo-aspera-web nuxeo-aspera\n```\n\n***Serving Web UI with Aspera Management***\n\n```shell script\nNUXEO_PACKAGES=\"nuxeo-aspera\" npm run start\n```\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Aspera Connector integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector) for each reference branch, and also for each opened PR.\n\nThe following features are available:\n\n- Possibility of having a dedicated preview environment for a PR by using the tag GitHub PR tag `preview`\n- Each PR merge to reference branch will generate a \"release candidate\" package\n\n### Localization Management\n\nTranslations are managed with [Crowdin](https://crowdin.com/).\n\nThe reference file [message.json](./nuxeo-aspera-web/i18n/messages.json) contains the labels and the English values.\n\nTranslations for other languages are managed in the [nuxeo-aspera](https://crowdin.com/project/nuxeo-aspera) Crowdin project, e.g. [French](https://crowdin.com/translate/nuxeo-aspera/4/en-fr).\n\nThe Crowdin GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).\n",
        "digest": "930cbe858f83a0b6985cd093f9462127",
        "encoding": "UTF-8",
        "length": 7878,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.3.3"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-userworkspace-web",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.platform.userworkspace.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace",
        "id": "grp:org.nuxeo.ecm.platform.userworkspace",
        "name": "org.nuxeo.ecm.platform.userworkspace",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.userworkspace.web",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.web/org.nuxeo.ecm.platform.userworkspace.actions/Contributions/org.nuxeo.ecm.platform.userworkspace.actions--actions",
              "id": "org.nuxeo.ecm.platform.userworkspace.actions--actions",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n    <action enabled=\"true\" icon=\"/icons/go_to_repository.gif\" id=\"SHOW_REPOSITORY\" label=\"command.user.return.to.repository\" link=\"#{userWorkspaceManagerActions.navigateToOverallWorkspace}\" order=\"60\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>isInsidePersonalWorkspace</filter-id>\n    </action>\n\n    <action enabled=\"true\" icon=\"/icons/show_personal_workspace.gif\" id=\"SHOW_PERSONAL_WORKSPACE\" label=\"command.user.personal.workspace\" link=\"#{userWorkspaceManagerActions.navigateToCurrentUserPersonalWorkspace}\" order=\"61\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>not_anonymous</filter-id>\n      <filter-id>not_transient_user</filter-id>\n      <filter-id>canAccessPersonalWorkspace</filter-id>\n    </action>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.web/org.nuxeo.ecm.platform.userworkspace.actions/Contributions/org.nuxeo.ecm.platform.userworkspace.actions--filters",
              "id": "org.nuxeo.ecm.platform.userworkspace.actions--filters",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"isInsidePersonalWorkspace\">\n      <rule grant=\"true\">\n        <condition>#{isInsidePersonalWorkspace}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canAccessPersonalWorkspace\">\n      <rule grant=\"false\">\n        <condition>#{isInsidePersonalWorkspace}</condition>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.web/org.nuxeo.ecm.platform.userworkspace.actions",
          "name": "org.nuxeo.ecm.platform.userworkspace.actions",
          "requirements": [],
          "resolutionOrder": 583,
          "services": [],
          "startOrder": 555,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<component name=\"org.nuxeo.ecm.platform.userworkspace.actions\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n    <action id=\"SHOW_REPOSITORY\"\n      link=\"#{userWorkspaceManagerActions.navigateToOverallWorkspace}\"\n      enabled=\"true\" label=\"command.user.return.to.repository\"\n      icon=\"/icons/go_to_repository.gif\" order=\"60\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>isInsidePersonalWorkspace</filter-id>\n    </action>\n\n    <action id=\"SHOW_PERSONAL_WORKSPACE\"\n      link=\"#{userWorkspaceManagerActions.navigateToCurrentUserPersonalWorkspace}\"\n      enabled=\"true\" label=\"command.user.personal.workspace\"\n      icon=\"/icons/show_personal_workspace.gif\" order=\"61\">\n      <category>USER_MENU_ACTIONS</category>\n      <filter-id>not_anonymous</filter-id>\n      <filter-id>not_transient_user</filter-id>\n      <filter-id>canAccessPersonalWorkspace</filter-id>\n    </action>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"isInsidePersonalWorkspace\">\n      <rule grant=\"true\">\n        <condition>#{isInsidePersonalWorkspace}</condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canAccessPersonalWorkspace\">\n      <rule grant=\"false\">\n        <condition>#{isInsidePersonalWorkspace}</condition>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/userworkspace-actions-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-userworkspace-web-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.web",
      "id": "org.nuxeo.ecm.platform.userworkspace.web",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM User Workspace Web Fragment\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.userworkspace.web;singleton:\r\n =true\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: stateless\r\nEclipse-LazyStart: false\r\nNuxeo-Component: OSGI-INF/userworkspace-actions-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 583,
      "minResolutionOrder": 583,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-coldstorage",
      "artifactVersion": "2023.2.3",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "nuxeo-coldstorage-web",
          "org.nuxeo.coldstorage"
        ],
        "hierarchyPath": "/grp:org.nuxeo.coldstorage",
        "id": "grp:org.nuxeo.coldstorage",
        "name": "org.nuxeo.coldstorage",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=coldstorage%2Fnuxeo-coldstorage%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/job/lts-2023/)\n\n# Nuxeo Cold Storage\n\nThe Nuxeo Cold Storage addon allows the storage of the document main content in a cold storage. This can be needed for archiving, compliance, etc.\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-coldstorage/).\n\n## Context\nNuxeo Cold Storage is an addon that can be plugged to Nuxeo.\n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Cold Storage pipeline\n- **nuxeo-coldstorage**: Backend contribution for Nuxeo Platform\n- **nuxeo-coldstorage-package**: Builder for [nuxeo-coldstorage](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-coldstorage) marketplace package. This package will install all the necessary mechanisms to integrate Cold Storage capabilities into Nuxeo\n- **nuxeo-coldstorage-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n## DB configuration\n\nCreate the following db indexes for an optimal functioning of the addon:\n - `coldstorage:beingRetrieved`\n - `coldstorage:coldContent/digest`\n - `file:content/digest`\n - `ecm:mixinTypes`\n\n Typically on MongoDB:\n ```\n db.default.createIndex(\n    { \"coldstorage:beingRetrieved\": 1 },\n    { partialFilterExpression: { \"coldstorage:beingRetrieved\": true } }\n );\n\n db.default.createIndex(\n    { \"content.digest\": 1 }\n );\n\n db.default.createIndex(\n    { \"coldstorage:coldContent.digest\": 1 }\n );\n\n db.default.createIndex(\n   { \"ecm:mixinTypes\": 1 }\n);\n ```\n\n## Configuration properties\n\n - `nuxeo.coldstorage.check.retrieve.state.cronExpression` :  cron expression to define the frequency of the execution of the process to check if a document has been retrieved. Default value is `0 7 * ? * * *` i.e. every hour at the 7th minute.\n - `nuxeo.bulk.action.checkColdStorageAvailability.scroller` : scroller implementation to be used to query documents being retrieved. `elastic` value can be set to relieve the regular back-end.\n - `nuxeo.coldstorage.numberOfDaysOfAvailability.value.default` : number of days a document remains available once it has been retrieved. Default value is `1`.\n - `nuxeo.coldstorage.thumbnailPreviewRequired` : is a thumbnail required to be used as a place holder to send a document to Cold Storage. Default value is `true`.\n\n### Frontend Contribution\n\n`nuxeo-coldstorage-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\nA couple of unit test classes are designed to run with a blob provider using a real s3 bucket. In order to run them locally, you must define the following system properties:\n - `nuxeo.s3storage.awsid` : your AWS_ACCESS_KEY_ID\n - `nuxeo.s3storage.awssecret` : your AWS_SECRET_ACCESS_KEY\n - `nuxeo.test.s3storage.awstoken` : optional depending on your aws credentials type\n - `nuxeo.test.s3storage.region`: your AWS_REGION\n - `nuxeo.s3storage.bucket` : the name of the S3 bucket\n\n### Frontend Contribution\n\n#### Unit Tests\n\n```shell script\nnpm run test\n```\n\n[Web Test Runner](https://modern-web.dev/docs/test-runner/overview/) is the test runner used to run this contribution unit tests.\nThe tests run against bundled versions of Chromium, Firefox and Webkit, using [Playwright](https://www.npmjs.com/package/playwright)\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `lts/dubnium`, i.e., `v10`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Cold Storage UI, it is assumed that there is a Nuxeo server running with Nuxeo Cold Storage package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available.\n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Cold Storage integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/) for each maintenance branch, for _LTS_ (fast track) and also for each opened PR.\n\nThe following features are available:\n- Each PR merge to _10.10_/_lts-2021_/_lts-2023_ branches will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Cold Storage manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).\n",
            "digest": "39f7ca370031a727e5ab6de2f97880f9",
            "encoding": "UTF-8",
            "length": 8567,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.coldstorage",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.audit/Contributions/org.nuxeo.coldstorage.audit--event",
              "id": "org.nuxeo.coldstorage.audit--event",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <event name=\"coldStorageContentMoved\"/>\n    <event name=\"coldStorageContentToRetrieve\"/>\n    <event name=\"coldStorageContentAvailable\"/>\n    <event name=\"coldStorageContentToRestore\"/>\n    <event name=\"coldStorageContentRestored\"/>\n    <event name=\"coldStorageDownload\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.audit",
          "name": "org.nuxeo.coldstorage.audit",
          "requirements": [],
          "resolutionOrder": 76,
          "services": [],
          "startOrder": 48,
          "version": "2023.2.3",
          "xmlFileContent": "<component name=\"org.nuxeo.coldstorage.audit\" version=\"1.0\">\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"event\">\n    <event name=\"coldStorageContentMoved\" />\n    <event name=\"coldStorageContentToRetrieve\" />\n    <event name=\"coldStorageContentAvailable\" />\n    <event name=\"coldStorageContentToRestore\" />\n    <event name=\"coldStorageContentRestored\" />\n    <event name=\"coldStorageDownload\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/coldstorage-audit.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.operations.contrib/Contributions/org.nuxeo.coldstorage.operations.contrib--operations",
              "id": "org.nuxeo.coldstorage.operations.contrib--operations",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.coldstorage.operations.MoveToColdStorage\"/>\n    <operation class=\"org.nuxeo.coldstorage.operations.RequestRetrievalFromColdStorage\"/>\n    <operation class=\"org.nuxeo.coldstorage.operations.RestoreFromColdStorage\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.operations.contrib",
          "name": "org.nuxeo.coldstorage.operations.contrib",
          "requirements": [],
          "resolutionOrder": 77,
          "services": [],
          "startOrder": 51,
          "version": "2023.2.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.coldstorage.operations.contrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.coldstorage.operations.MoveToColdStorage\" />\n    <operation class=\"org.nuxeo.coldstorage.operations.RequestRetrievalFromColdStorage\" />\n    <operation class=\"org.nuxeo.coldstorage.operations.RestoreFromColdStorage\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/coldstorage-operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scheduler.SchedulerService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.events.contrib/Contributions/org.nuxeo.coldstorage.events.contrib--schedule",
              "id": "org.nuxeo.coldstorage.events.contrib--schedule",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scheduler.SchedulerService",
                "name": "org.nuxeo.ecm.core.scheduler.SchedulerService",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\">\n    <schedule id=\"checkAvailabilityOfBlobsBeingRetrieved\">\n      <cronExpression>${nuxeo.coldstorage.check.retrieve.state.cronExpression}</cronExpression>\n      <event>checkColdStorageContentAvailability</event>\n    </schedule>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.events.contrib/Contributions/org.nuxeo.coldstorage.events.contrib--listener",
              "id": "org.nuxeo.coldstorage.events.contrib--listener",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.coldstorage.events.CheckColdStorageContentAvailabilityListener\" name=\"checkColdStorageContentAvailability\">\n      <event>checkColdStorageContentAvailability</event>\n    </listener>\n    <listener class=\"org.nuxeo.coldstorage.events.PreventColdStorageUpdateListener\" name=\"preventColdStorageUpdateListener\" priority=\"0\">\n      <event>beforeDocumentModification</event>\n    </listener>\n    <!-- StreamAuditEventListener has a priority of 500, less allows to be evaluated earlier -->\n    <listener class=\"org.nuxeo.coldstorage.events.DownloadColdDocumentListener\" name=\"downloadColdDocumentListener\" priority=\"400\">\n      <event>download</event>\n    </listener>\n    <!-- UpdateThumbnailListener has a priority of 999, more allows to be evaluated later -->\n    <listener class=\"org.nuxeo.coldstorage.events.CheckAlreadyInColdStorageListener\" name=\"checkAlreadyInColdStorageListener\" priority=\"900\">\n      <event>documentModified</event>\n      <event>documentCreated</event>\n    </listener>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--notifications",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.events.contrib/Contributions/org.nuxeo.coldstorage.events.contrib--notifications",
              "id": "org.nuxeo.coldstorage.events.contrib--notifications",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"notifications\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n    <notification availableIn=\"*\" channel=\"email\" label=\"label.document.download\" name=\"ColdStorageContentAvailable\" subject=\"Archive content available on '${docTitle}'\" template=\"coldStorageContentAvailable\">\n      <event name=\"coldStorageContentAvailable\"/>\n    </notification>\n    <notification availableIn=\"*\" channel=\"email\" label=\"label.document.download\" name=\"ColdStorageContentRestored\" subject=\"Main content '${docTitle}' restored\" template=\"coldStorageContentRestored\">\n      <event name=\"coldStorageContentRestored\"/>\n    </notification>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService--templates",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.events.contrib/Contributions/org.nuxeo.coldstorage.events.contrib--templates",
              "id": "org.nuxeo.coldstorage.events.contrib--templates",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"templates\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n    <template name=\"coldStorageContentAvailable\" src=\"templates/coldStorageContentAvailable.ftl\"/>\n    <template name=\"coldStorageContentRestored\" src=\"templates/coldStorageContentRestored.ftl\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.events.contrib",
          "name": "org.nuxeo.coldstorage.events.contrib",
          "requirements": [],
          "resolutionOrder": 78,
          "services": [],
          "startOrder": 50,
          "version": "2023.2.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.coldstorage.events.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\" point=\"schedule\">\n    <schedule id=\"checkAvailabilityOfBlobsBeingRetrieved\">\n      <cronExpression>${nuxeo.coldstorage.check.retrieve.state.cronExpression}</cronExpression>\n      <event>checkColdStorageContentAvailability</event>\n    </schedule>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"checkColdStorageContentAvailability\" async=\"true\"\n              class=\"org.nuxeo.coldstorage.events.CheckColdStorageContentAvailabilityListener\">\n      <event>checkColdStorageContentAvailability</event>\n    </listener>\n    <listener name=\"preventColdStorageUpdateListener\" priority=\"0\"\n              class=\"org.nuxeo.coldstorage.events.PreventColdStorageUpdateListener\">\n      <event>beforeDocumentModification</event>\n    </listener>\n    <!-- StreamAuditEventListener has a priority of 500, less allows to be evaluated earlier -->\n    <listener name=\"downloadColdDocumentListener\" priority=\"400\"\n              class=\"org.nuxeo.coldstorage.events.DownloadColdDocumentListener\">\n      <event>download</event>\n    </listener>\n    <!-- UpdateThumbnailListener has a priority of 999, more allows to be evaluated later -->\n    <listener name=\"checkAlreadyInColdStorageListener\" priority=\"900\"\n      class=\"org.nuxeo.coldstorage.events.CheckAlreadyInColdStorageListener\">\n      <event>documentModified</event>\n      <event>documentCreated</event>\n    </listener>\n  </extension>\n\n  <extension\n          target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\" point=\"notifications\">\n    <notification name=\"ColdStorageContentAvailable\" channel=\"email\" availableIn=\"*\"\n                  subject=\"Archive content available on '${docTitle}'\" template=\"coldStorageContentAvailable\"\n                  label=\"label.document.download\">\n      <event name=\"coldStorageContentAvailable\" />\n    </notification>\n    <notification name=\"ColdStorageContentRestored\" channel=\"email\" availableIn=\"*\"\n                  subject=\"Main content '${docTitle}' restored\" template=\"coldStorageContentRestored\"\n                  label=\"label.document.download\">\n      <event name=\"coldStorageContentRestored\" />\n    </notification>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\" point=\"templates\">\n    <template name=\"coldStorageContentAvailable\" src=\"templates/coldStorageContentAvailable.ftl\" />\n    <template name=\"coldStorageContentRestored\" src=\"templates/coldStorageContentRestored.ftl\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/coldstorage-events-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.bulk.contrib/Contributions/org.nuxeo.coldstorage.bulk.contrib--actions",
              "id": "org.nuxeo.coldstorage.bulk.contrib--actions",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"20\" bucketSize=\"100\" httpEnabled=\"true\" inputStream=\"bulk/moveToColdStorage\" name=\"moveToColdStorage\"/>\n    <action batchSize=\"20\" bucketSize=\"100\" httpEnabled=\"false\" inputStream=\"bulk/propagateMoveToColdStorage\" name=\"propagateMoveToColdStorage\"/>\n    <action batchSize=\"20\" bucketSize=\"100\" httpEnabled=\"false\" inputStream=\"bulk/propagateRestoreFromColdStorage\" name=\"propagateRestoreFromColdStorage\"/>\n    <action batchSize=\"20\" bucketSize=\"100\" httpEnabled=\"false\" inputStream=\"bulk/checkColdStorageAvailability\" name=\"checkColdStorageAvailability\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.bulk.contrib/Contributions/org.nuxeo.coldstorage.bulk.contrib--streamProcessor",
              "id": "org.nuxeo.coldstorage.bulk.contrib--streamProcessor",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.coldstorage.action.MoveToColdStorageContentAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"moveToColdStorage\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.coldstorage.action.PropagateMoveToColdStorageContentAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"propagateMoveToColdStorage\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.coldstorage.action.PropagateRestoreFromColdStorageContentAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"propagateRestoreFromColdStorage\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.coldstorage.action.CheckColdStorageAvailabilityAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" defaultScroller=\"default\" name=\"checkColdStorageAvailability\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.bulk.contrib",
          "name": "org.nuxeo.coldstorage.bulk.contrib",
          "requirements": [],
          "resolutionOrder": 79,
          "services": [],
          "startOrder": 49,
          "version": "2023.2.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.coldstorage.bulk.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"moveToColdStorage\" inputStream=\"bulk/moveToColdStorage\"\n      bucketSize=\"100\" batchSize=\"20\" httpEnabled=\"true\" />\n    <action name=\"propagateMoveToColdStorage\" inputStream=\"bulk/propagateMoveToColdStorage\"\n      bucketSize=\"100\" batchSize=\"20\" httpEnabled=\"false\" />\n    <action name=\"propagateRestoreFromColdStorage\" inputStream=\"bulk/propagateRestoreFromColdStorage\"\n      bucketSize=\"100\" batchSize=\"20\" httpEnabled=\"false\" />\n    <action name=\"checkColdStorageAvailability\" inputStream=\"bulk/checkColdStorageAvailability\"\n      bucketSize=\"100\" batchSize=\"20\" httpEnabled=\"false\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"moveToColdStorage\"\n      class=\"org.nuxeo.coldstorage.action.MoveToColdStorageContentAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.moveToColdStorage.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.moveToColdStorage.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"propagateMoveToColdStorage\"\n      class=\"org.nuxeo.coldstorage.action.PropagateMoveToColdStorageContentAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.propagateMoveToColdStorage.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.propagateMoveToColdStorage.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"propagateRestoreFromColdStorage\"\n      class=\"org.nuxeo.coldstorage.action.PropagateRestoreFromColdStorageContentAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.propagateRestoreFromColdStorage.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.propagateRestoreFromColdStorage.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n    <streamProcessor name=\"checkColdStorageAvailability\"\n      class=\"org.nuxeo.coldstorage.action.CheckColdStorageAvailabilityAction\"\n      defaultScroller=\"${nuxeo.bulk.action.checkColdStorageAvailability.scroller:=default}\"\n      defaultConcurrency=\"${nuxeo.bulk.action.checkColdStorageAvailability.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.checkColdStorageAvailability.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/coldstorage-bulk-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.coldstorage.service.ColdStorageService--coldStorageRendition",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.rendition.contrib/Contributions/org.nuxeo.coldstorage.rendition.contrib--coldStorageRendition",
              "id": "org.nuxeo.coldstorage.rendition.contrib--coldStorageRendition",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.coldstorage.service.ColdStorageService",
                "name": "org.nuxeo.coldstorage.service.ColdStorageService",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"coldStorageRendition\" target=\"org.nuxeo.coldstorage.service.ColdStorageService\">\n    <coldStorageRendition name=\"defaultRendition\" renditionName=\"thumbnail\"/>\n    <coldStorageRendition docType=\"Picture\" facet=\"Picture\" name=\"pictureRendition\" renditionName=\"Small\"/>\n    <coldStorageRendition docType=\"Video\" facet=\"Video\" name=\"videoRendition\" renditionName=\"MP4 480p\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.rendition.contrib",
          "name": "org.nuxeo.coldstorage.rendition.contrib",
          "requirements": [],
          "resolutionOrder": 80,
          "services": [],
          "startOrder": 52,
          "version": "2023.2.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.coldstorage.rendition.contrib\">\n\n  <extension target=\"org.nuxeo.coldstorage.service.ColdStorageService\"  point=\"coldStorageRendition\" >\n    <coldStorageRendition name=\"defaultRendition\" renditionName=\"thumbnail\" />\n    <coldStorageRendition name=\"pictureRendition\" docType=\"Picture\" facet=\"Picture\" renditionName=\"Small\" />\n    <coldStorageRendition name=\"videoRendition\" docType=\"Video\" facet=\"Video\" renditionName=\"MP4 480p\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/coldstorage-rendition-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.types/Contributions/org.nuxeo.coldstorage.types--schema",
              "id": "org.nuxeo.coldstorage.types--schema",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"coldstorage\" prefix=\"coldstorage\" src=\"schemas/coldstorage.xsd\"/>\n\n    <property indexOrder=\"ascending\" name=\"content/digest\" schema=\"file\"/>\n    <property indexOrder=\"ascending\" name=\"beingRetrieved\" schema=\"coldstorage\"/>\n    <property indexOrder=\"ascending\" name=\"coldContent/digest\" schema=\"coldstorage\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.types/Contributions/org.nuxeo.coldstorage.types--doctype",
              "id": "org.nuxeo.coldstorage.types--doctype",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"ColdStorage\">\n      <schema name=\"coldstorage\"/>\n    </facet>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.types",
          "name": "org.nuxeo.coldstorage.types",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 87,
          "services": [],
          "startOrder": 54,
          "version": "2023.2.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.coldstorage.types\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"coldstorage\" prefix=\"coldstorage\" src=\"schemas/coldstorage.xsd\" />\n\n    <property schema=\"file\" name=\"content/digest\" indexOrder=\"ascending\" />\n    <property schema=\"coldstorage\" name=\"beingRetrieved\" indexOrder=\"ascending\" />\n    <property schema=\"coldstorage\" name=\"coldContent/digest\" indexOrder=\"ascending\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n             point=\"doctype\">\n    <facet name=\"ColdStorage\">\n      <schema name=\"coldstorage\" />\n    </facet>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/coldstorage-core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissions",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.security/Contributions/org.nuxeo.coldstorage.security--permissions",
              "id": "org.nuxeo.coldstorage.security--permissions",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"permissions\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n        <permission name=\"WriteColdStorage\">\n            <include>ReadWrite</include>\n            <include>WriteColdStorage</include>\n        </permission>\n    </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.security/Contributions/org.nuxeo.coldstorage.security--permissionsVisibility",
              "id": "org.nuxeo.coldstorage.security--permissionsVisibility",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2023.2.3",
              "xml": "<extension point=\"permissionsVisibility\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n        <visibility>\n            <item order=\"80\" show=\"true\">WriteColdStorage</item>\n        </visibility>\n\n    </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.security",
          "name": "org.nuxeo.coldstorage.security",
          "requirements": [
            "org.nuxeo.ecm.core.security.defaultPermissions"
          ],
          "resolutionOrder": 93,
          "services": [],
          "startOrder": 53,
          "version": "2023.2.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.coldstorage.security\">\n    <require>org.nuxeo.ecm.core.security.defaultPermissions</require>\n    <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n               point=\"permissions\">\n        <permission name=\"WriteColdStorage\">\n            <include>ReadWrite</include>\n            <include>WriteColdStorage</include>\n        </permission>\n    </extension>\n\n    <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n               point=\"permissionsVisibility\">\n\n        <visibility>\n            <item show=\"true\" order=\"80\">WriteColdStorage</item>\n        </visibility>\n\n    </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/coldstorage-security.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.coldstorage.service.ColdStorageServiceImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.coldstorage.service.ColdStorageService",
              "descriptors": [
                "org.nuxeo.coldstorage.ColdStorageRenditionDescriptor"
              ],
              "documentation": "\n            @author Abdoul BA (aba@nuxeo.com)\n            This extension provides renditions according to the type, facet and default one.\n            <code>\n    <coldStorageRendition name=\"defaultRendition\" renditionName=\"Thumbnail\"/>\n    <coldStorageRendition docType=\"Picture\" facet=\"Picture\"\n        name=\"pictureRendition\" renditionName=\"Small\"/>\n</code>\n",
              "documentationHtml": "<p>\nThis extension provides renditions according to the type, facet and default one.\n</p><p></p><pre><code>    &lt;coldStorageRendition name&#61;&#34;defaultRendition&#34; renditionName&#61;&#34;Thumbnail&#34;/&gt;\n    &lt;coldStorageRendition docType&#61;&#34;Picture&#34; facet&#61;&#34;Picture&#34;\n        name&#61;&#34;pictureRendition&#34; renditionName&#61;&#34;Small&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.service.ColdStorageService/ExtensionPoints/org.nuxeo.coldstorage.service.ColdStorageService--coldStorageRendition",
              "id": "org.nuxeo.coldstorage.service.ColdStorageService--coldStorageRendition",
              "label": "coldStorageRendition (org.nuxeo.coldstorage.service.ColdStorageService)",
              "name": "coldStorageRendition",
              "version": "2023.2.3"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.service.ColdStorageService",
          "name": "org.nuxeo.coldstorage.service.ColdStorageService",
          "requirements": [
            "org.nuxeo.ecm.platform.rendition.service.RenditionService"
          ],
          "resolutionOrder": 476,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.coldstorage.service.ColdStorageService",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.service.ColdStorageService/Services/org.nuxeo.coldstorage.service.ColdStorageService",
              "id": "org.nuxeo.coldstorage.service.ColdStorageService",
              "overriden": false,
              "version": "2023.2.3"
            }
          ],
          "startOrder": 780,
          "version": "2023.2.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.coldstorage.service.ColdStorageService\">\n\n    <require>org.nuxeo.ecm.platform.rendition.service.RenditionService</require>\n\n    <implementation class=\"org.nuxeo.coldstorage.service.ColdStorageServiceImpl\" />\n\n    <service>\n        <provide interface=\"org.nuxeo.coldstorage.service.ColdStorageService\" />\n    </service>\n\n    <extension-point name=\"coldStorageRendition\">\n        <documentation>\n            @author Abdoul BA (aba@nuxeo.com)\n            This extension provides renditions according to the type, facet and default one.\n            <code>\n                <coldStorageRendition name=\"defaultRendition\" renditionName=\"Thumbnail\" />\n                <coldStorageRendition name=\"pictureRendition\" docType=\"Picture\" facet=\"Picture\" renditionName=\"Small\" />\n            </code>\n        </documentation>\n        <object class=\"org.nuxeo.coldstorage.ColdStorageRenditionDescriptor\" />\n    </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/coldstorage-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-coldstorage-2023.2.3.jar",
      "groupId": "org.nuxeo.coldstorage",
      "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage",
      "id": "org.nuxeo.coldstorage",
      "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: 2023.2.3-t20231211-155439\r\nBundle-Name: Nuxeo Cold Storage\r\nBundle-SymbolicName: org.nuxeo.coldstorage;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Localization: bundle\r\nEclipse-LazyStart: true\r\nNuxeo-Component: OSGI-INF/coldstorage-core-types-contrib.xml,OSGI-INF/co\r\n ldstorage-audit.xml,OSGI-INF/coldstorage-operations-contrib.xml,OSGI-IN\r\n F/coldstorage-events-contrib.xml,OSGI-INF/coldstorage-security.xml,OSGI\r\n -INF/coldstorage-bulk-contrib.xml,OSGI-INF/coldstorage-service.xml,OSGI\r\n -INF/coldstorage-rendition-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 476,
      "minResolutionOrder": 76,
      "packages": [
        "nuxeo-coldstorage"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=coldstorage%2Fnuxeo-coldstorage%2Flts-2023)](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/job/lts-2023/)\n\n# Nuxeo Cold Storage\n\nThe Nuxeo Cold Storage addon allows the storage of the document main content in a cold storage. This can be needed for archiving, compliance, etc.\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/nxdoc/nuxeo-coldstorage/).\n\n## Context\nNuxeo Cold Storage is an addon that can be plugged to Nuxeo.\n\nIt is bundled as a marketplace package that includes all the backend and frontend contributions needed for [Nuxeo Platform](https://github.com/nuxeo/nuxeo) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Cold Storage pipeline\n- **nuxeo-coldstorage**: Backend contribution for Nuxeo Platform\n- **nuxeo-coldstorage-package**: Builder for [nuxeo-coldstorage](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-coldstorage) marketplace package. This package will install all the necessary mechanisms to integrate Cold Storage capabilities into Nuxeo\n- **nuxeo-coldstorage-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip_ file for the package.\n\n## DB configuration\n\nCreate the following db indexes for an optimal functioning of the addon:\n - `coldstorage:beingRetrieved`\n - `coldstorage:coldContent/digest`\n - `file:content/digest`\n - `ecm:mixinTypes`\n\n Typically on MongoDB:\n ```\n db.default.createIndex(\n    { \"coldstorage:beingRetrieved\": 1 },\n    { partialFilterExpression: { \"coldstorage:beingRetrieved\": true } }\n );\n\n db.default.createIndex(\n    { \"content.digest\": 1 }\n );\n\n db.default.createIndex(\n    { \"coldstorage:coldContent.digest\": 1 }\n );\n\n db.default.createIndex(\n   { \"ecm:mixinTypes\": 1 }\n);\n ```\n\n## Configuration properties\n\n - `nuxeo.coldstorage.check.retrieve.state.cronExpression` :  cron expression to define the frequency of the execution of the process to check if a document has been retrieved. Default value is `0 7 * ? * * *` i.e. every hour at the 7th minute.\n - `nuxeo.bulk.action.checkColdStorageAvailability.scroller` : scroller implementation to be used to query documents being retrieved. `elastic` value can be set to relieve the regular back-end.\n - `nuxeo.coldstorage.numberOfDaysOfAvailability.value.default` : number of days a document remains available once it has been retrieved. Default value is `1`.\n - `nuxeo.coldstorage.thumbnailPreviewRequired` : is a thumbnail required to be used as a place holder to send a document to Cold Storage. Default value is `true`.\n\n### Frontend Contribution\n\n`nuxeo-coldstorage-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\nA couple of unit test classes are designed to run with a blob provider using a real s3 bucket. In order to run them locally, you must define the following system properties:\n - `nuxeo.s3storage.awsid` : your AWS_ACCESS_KEY_ID\n - `nuxeo.s3storage.awssecret` : your AWS_SECRET_ACCESS_KEY\n - `nuxeo.test.s3storage.awstoken` : optional depending on your aws credentials type\n - `nuxeo.test.s3storage.region`: your AWS_REGION\n - `nuxeo.s3storage.bucket` : the name of the S3 bucket\n\n### Frontend Contribution\n\n#### Unit Tests\n\n```shell script\nnpm run test\n```\n\n[Web Test Runner](https://modern-web.dev/docs/test-runner/overview/) is the test runner used to run this contribution unit tests.\nThe tests run against bundled versions of Chromium, Firefox and Webkit, using [Playwright](https://www.npmjs.com/package/playwright)\n\n#### Functional Tests\n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `lts/dubnium`, i.e., `v10`.\n\n## Development Workflow\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Cold Storage UI, it is assumed that there is a Nuxeo server running with Nuxeo Cold Storage package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available.\n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.0.x).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Cold Storage integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/) for each maintenance branch, for _LTS_ (fast track) and also for each opened PR.\n\nThe following features are available:\n- Each PR merge to _10.10_/_lts-2021_/_lts-2023_ branches will generate a \"release candidate\" package\n\n### Localization Management\n\nNuxeo Cold Storage manages multilingual content with a [Crowdin](https://crowdin.com/) integration.\n\nThe [Crowdin](.github/workflows/crowdin.yml) GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).\n",
        "digest": "39f7ca370031a727e5ab6de2f97880f9",
        "encoding": "UTF-8",
        "length": 8567,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.2.3"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-directory-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.directory",
          "org.nuxeo.ecm.directory.api",
          "org.nuxeo.ecm.directory.ldap",
          "org.nuxeo.ecm.directory.multi",
          "org.nuxeo.ecm.directory.sql",
          "org.nuxeo.ecm.directory.types.contrib",
          "org.nuxeo.ecm.directory.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory",
        "id": "grp:org.nuxeo.ecm.directory",
        "name": "org.nuxeo.ecm.directory",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.directory.api",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.api/org.nuxeo.ecm.platform.directory.pageproviders/Contributions/org.nuxeo.ecm.platform.directory.pageproviders--providers",
              "id": "org.nuxeo.ecm.platform.directory.pageproviders--providers",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.ecm.directory.providers.DirectoryEntryPageProvider\" name=\"nuxeo_directory_entry_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.api/org.nuxeo.ecm.platform.directory.pageproviders",
          "name": "org.nuxeo.ecm.platform.directory.pageproviders",
          "requirements": [],
          "resolutionOrder": 353,
          "services": [],
          "startOrder": 316,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.directory.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n             point=\"providers\">\n\n    <genericPageProvider name=\"nuxeo_directory_entry_listing\"\n                         class=\"org.nuxeo.ecm.directory.providers.DirectoryEntryPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageproviders-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-directory-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.api",
      "id": "org.nuxeo.ecm.directory.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.directory;mandatory:=api;api=split,org.nux\r\n eo.ecm.directory.impl;mandatory:=api;api=split,org.nuxeo.ecm.directory.\r\n api;mandatory=api;api=split\r\nIgnore-Package: org.nuxeo.ecm.core.api\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Localization: bundle\r\nBundle-Name: Nuxeo Directory API\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nRequire-Bundle: org.nuxeo.ecm.core\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: true\r\nImport-Package: org.apache.commons.logging,org.nuxeo.common.collections,\r\n org.nuxeo.common.utils,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.core.a\r\n pi.model,org.nuxeo.runtime.api,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.directory.api;singleton:=true\r\nNuxeo-Component: OSGI-INF/pageproviders-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 353,
      "minResolutionOrder": 353,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-versioning-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.versioning",
          "org.nuxeo.ecm.platform.versioning.api"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.versioning",
        "id": "grp:org.nuxeo.ecm.platform.versioning",
        "name": "org.nuxeo.ecm.platform.versioning",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.versioning.api",
      "components": [],
      "fileName": "nuxeo-platform-versioning-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.versioning/org.nuxeo.ecm.platform.versioning.api",
      "id": "org.nuxeo.ecm.platform.versioning.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.versioning.api,org.nuxeo.ecm.plat\r\n form.versioning.facet\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: runtime\r\nBundle-Name: Nuxeo Versioning API\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: false\r\nImport-Package: javax.annotation;version=\"1.0\",org.apache.commons.loggin\r\n g,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,org.nux\r\n eo.ecm.core.api.adapter,org.nuxeo.ecm.core.api.facet,org.nuxeo.ecm.core\r\n .api.repository,org.nuxeo.ecm.core.utils,org.nuxeo.ecm.directory;api=sp\r\n lit,org.nuxeo.runtime.api\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.versioning.api\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-contentview-jsf",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.content.template",
          "org.nuxeo.ecm.platform.contentview.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content",
        "id": "grp:org.nuxeo.ecm.platform.content",
        "name": "org.nuxeo.ecm.platform.content",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.contentview.jsf",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.contentview.jsf/org.nuxeo.ecm.platform.contentview.jsf.widgettypes/Contributions/org.nuxeo.ecm.platform.contentview.jsf.widgettypes--widgettypes",
              "id": "org.nuxeo.ecm.platform.contentview.jsf.widgettypes--widgettypes",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"selectManyCheckboxAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Checkbox</title>\n        <description>\n          A widget to display aggregate result with checkboxes.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n          <category>aggregates_significant_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout_page_default</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Select</title>\n        <description>\n          A widget to display aggregate result with select2.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n          <category>aggregates_significant_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyListboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxDirectoryAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Directory Checkbox</title>\n        <description>\n          A widget to display aggregate result with checkboxes.\n          The display label is resolved from a given directory.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"selectManyCheckboxDirectoryAggregate_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxDirectoryAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout_page_default</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">\n                    directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxDirectoryAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxDirectoryAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Directory Select</title>\n        <description>\n          A widget to display aggregate result with select2.\n          The display label is resolved from a given directory.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout name=\"selectManyListboxDirectoryAggregate_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyListboxDirectoryAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">\n                    directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxDirectoryAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxDocumentAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Document Checkbox</title>\n        <description>Select Many Checkbox Document Aggregate</description>\n        <description>\n          A widget to display aggregate result with checkboxes.\n          The display label the is title of the document.\n          It is resolved according to a document id.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"itemLabel\">#{nxd:titleFromId(item.key)}</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout_page_default</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxDocumentAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Document Select</title>\n        <description>Select2 Document Aggregate Widget</description>\n        <description>\n          A widget to display aggregate result with select2.\n          The display label the is title of the document.\n          It is resolved according to a document id.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"itemLabel\">#{nxd:titleFromId(item.key)}</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxUserAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>User Checkbox</title>\n        <description>Select Many Checkbox User Aggregate</description>\n        <description>\n          A widget to display aggregate result with checkboxes.\n          The display label is resolved from user directory.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"itemLabel\">#{nxu:userDisplayName(itemId, itemEntry.user.firstName, itemEntry.user.lastName)}</property>\n            <property name=\"directoryName\">#{userManager.userDirectoryName}</property>\n            <property name=\"groupItemLabel\">#{nxu:groupDisplayName(itemId, itemEntry.group.grouplabel)}</property>\n            <property name=\"groupDirectoryName\">#{userManager.groupDirectoryName}</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxUserAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout_page_default</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxUserAndGroupAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxUserAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>User Select</title>\n        <description>Select2 User Aggregate Widget</description>\n        <description>\n          A widget to display aggregate result with select2.\n          The display label is resolved from user directory.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"itemLabel\">#{nxu:userDisplayName(itemId, itemEntry.user.firstName, itemEntry.user.lastName)}</property>\n            <property name=\"directoryName\">#{userManager.userDirectoryName}</property>\n            <property name=\"groupItemLabel\">#{nxu:groupDisplayName(itemId, itemEntry.group.grouplabel)}</property>\n            <property name=\"groupDirectoryName\">#{userManager.groupDirectoryName}</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyListboxUserAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxUserAndGroupAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxHistogramAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Histogram Checkbox</title>\n        <description>\n          A widget to display histogram aggregate result with checkboxes.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_histogram</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n            <property name=\"order\">key desc</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxHistogramAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Histogram Select</title>\n        <description>\n          A widget to display histogram aggregate result with select2.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_histogram</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n            <property name=\"order\">key desc</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxDateHistogramAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Date Histogram Checkbox</title>\n        <description>\n          A widget to display date histogram aggregate result with checkboxes.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_date_histogram</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n            <property name=\"order\">key desc</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxDateHistogramAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Date Histogram Select</title>\n        <description>\n          A widget to display date histogram aggregate result with select2.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_date_histogram</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n            <property name=\"order\">key desc</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxDateRangeAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Date Range Checkbox</title>\n        <description>\n          A widget to display date range aggregate result with checkboxes.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_date_range</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxDateRangeAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Date Range Select</title>\n        <description>\n          A widget to display date range aggregate result with select2.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_date_range</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxRangeAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Range Checkbox</title>\n        <description>\n          A widget to display range aggregate result with checkboxes.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_range</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxRangeAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Range Select</title>\n        <description>\n          A widget to display date range aggregate result with select2.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_range</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.contentview.jsf/org.nuxeo.ecm.platform.contentview.jsf.widgettypes",
          "name": "org.nuxeo.ecm.platform.contentview.jsf.widgettypes",
          "requirements": [],
          "resolutionOrder": 336,
          "services": [],
          "startOrder": 306,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.contentview.jsf.widgettypes\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"selectManyCheckboxAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Checkbox</title>\n        <description>\n          A widget to display aggregate result with checkboxes.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n          <category>aggregates_significant_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout_page_default</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Select</title>\n        <description>\n          A widget to display aggregate result with select2.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n          <category>aggregates_significant_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyListboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxDirectoryAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Directory Checkbox</title>\n        <description>\n          A widget to display aggregate result with checkboxes.\n          The display label is resolved from a given directory.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout\n              name=\"selectManyCheckboxDirectoryAggregate_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout\n              name=\"selectManyCheckboxDirectoryAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout_page_default</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">\n                    directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxDirectoryAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxDirectoryAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Directory Select</title>\n        <description>\n          A widget to display aggregate result with select2.\n          The display label is resolved from a given directory.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n          </defaultValues>\n          <layouts mode=\"any\">\n            <layout\n              name=\"selectManyListboxDirectoryAggregate_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryName</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directoryNameDemoPreview</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout\n              name=\"selectManyListboxDirectoryAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_dbl10n</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_displayIdAndLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">\n                    directory_notDisplayDefaultOption\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxDirectoryAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxDocumentAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Document Checkbox</title>\n        <description>Select Many Checkbox Document Aggregate</description>\n        <description>\n          A widget to display aggregate result with checkboxes.\n          The display label the is title of the document.\n          It is resolved according to a document id.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"itemLabel\">#{nxd:titleFromId(item.key)}</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout_page_default</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxDocumentAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Document Select</title>\n        <description>Select2 Document Aggregate Widget</description>\n        <description>\n          A widget to display aggregate result with select2.\n          The display label the is title of the document.\n          It is resolved according to a document id.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"itemLabel\">#{nxd:titleFromId(item.key)}</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxUserAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>User Checkbox</title>\n        <description>Select Many Checkbox User Aggregate</description>\n        <description>\n          A widget to display aggregate result with checkboxes.\n          The display label is resolved from user directory.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"itemLabel\">#{nxu:userDisplayName(itemId, itemEntry.user.firstName, itemEntry.user.lastName)}</property>\n            <property name=\"directoryName\">#{userManager.userDirectoryName}</property>\n            <property name=\"groupItemLabel\">#{nxu:groupDisplayName(itemId, itemEntry.group.grouplabel)}</property>\n            <property name=\"groupDirectoryName\">#{userManager.groupDirectoryName}</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxUserAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout_page_default</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxUserAndGroupAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxUserAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>User Select</title>\n        <description>Select2 User Aggregate Widget</description>\n        <description>\n          A widget to display aggregate result with select2.\n          The display label is resolved from user directory.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_terms</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"itemLabel\">#{nxu:userDisplayName(itemId, itemEntry.user.firstName, itemEntry.user.lastName)}</property>\n            <property name=\"directoryName\">#{userManager.userDirectoryName}</property>\n            <property name=\"groupItemLabel\">#{nxu:groupDisplayName(itemId, itemEntry.group.grouplabel)}</property>\n            <property name=\"groupDirectoryName\">#{userManager.groupDirectoryName}</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyListboxUserAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxUserAndGroupAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxHistogramAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Histogram Checkbox</title>\n        <description>\n          A widget to display histogram aggregate result with checkboxes.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_histogram</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n            <property name=\"order\">key desc</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxHistogramAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Histogram Select</title>\n        <description>\n          A widget to display histogram aggregate result with select2.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_histogram</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n            <property name=\"order\">key desc</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxDateHistogramAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Date Histogram Checkbox</title>\n        <description>\n          A widget to display date histogram aggregate result with checkboxes.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_date_histogram</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n            <property name=\"order\">key desc</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxDateHistogramAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Date Histogram Select</title>\n        <description>\n          A widget to display date histogram aggregate result with select2.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_date_histogram</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n            <property name=\"order\">key desc</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxDateRangeAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Date Range Checkbox</title>\n        <description>\n          A widget to display date range aggregate result with checkboxes.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_date_range</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxDateRangeAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Date Range Select</title>\n        <description>\n          A widget to display date range aggregate result with select2.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_date_range</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyCheckboxRangeAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Range Checkbox</title>\n        <description>\n          A widget to display range aggregate result with checkboxes.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_range</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"edit\">\n            <property name=\"layout\">pageDirection</property>\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"moreLessLimit\">6</property>\n            <property name=\"emptyChoiceMessage\">label.aggregate.emptyChoice</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_layout</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyCheckboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n    <widgetType name=\"selectManyListboxRangeAggregate\">\n      <configuration>\n        <sinceVersion>6.0</sinceVersion>\n        <title>Range Select</title>\n        <description>\n          A widget to display date range aggregate result with select2.\n        </description>\n        <categories>\n          <category>aggregates</category>\n          <category>aggregates_range</category>\n        </categories>\n        <supportedModes>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <defaultValues mode=\"any\">\n            <property name=\"width\">100%</property>\n          </defaultValues>\n          <defaultValues mode=\"edit\">\n            <property name=\"notDisplayDefaultOption\">true</property>\n            <property name=\"var\">item</property>\n            <property name=\"itemValue\">#{item.key}</property>\n            <property name=\"itemCount\">(#{item.docCount})</property>\n            <property name=\"placeholder\">#{messages['label.vocabulary.selectValue']}</property>\n          </defaultValues>\n          <layouts mode=\"edit\">\n            <layout name=\"selectManyCheckboxAggregate_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_localize</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select_selectOptions</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_style</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">directory_styleClass</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.contentview.jsf.facelets.plugins.SelectManyListboxAggregateWidgetTypeHandler\n      </handler-class>\n    </widgetType>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/widgettypes-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.contentview.jsf/org.nuxeo.ecm.platform.contentview.jsf.layouts/Contributions/org.nuxeo.ecm.platform.contentview.jsf.layouts--widgets",
              "id": "org.nuxeo.ecm.platform.contentview.jsf.layouts--widgets",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widget name=\"contentViewActions\" type=\"template\">\n      <properties mode=\"view\">\n        <property name=\"template\">\n          /widgets/actions/content_view_actions_widget_template.xhtml\n        </property>\n        <property name=\"category\">\n          CONTENT_VIEW_ACTIONS CONTENT_VIEW_EXPORT_ACTIONS\n        </property>\n        <property name=\"styleClass\">contentViewUpperActions</property>\n        <property name=\"containerStyleClass\">contentViewUpperAction</property>\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"maxActionsNumber\">10</property>\n      </properties>\n    </widget>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.contentview.jsf/org.nuxeo.ecm.platform.contentview.jsf.layouts",
          "name": "org.nuxeo.ecm.platform.contentview.jsf.layouts",
          "requirements": [],
          "resolutionOrder": 337,
          "services": [],
          "startOrder": 305,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.contentview.jsf.layouts\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgets\">\n\n    <widget name=\"contentViewActions\" type=\"template\">\n      <properties mode=\"view\">\n        <property name=\"template\">\n          /widgets/actions/content_view_actions_widget_template.xhtml\n        </property>\n        <property name=\"category\">\n          CONTENT_VIEW_ACTIONS CONTENT_VIEW_EXPORT_ACTIONS\n        </property>\n        <property name=\"styleClass\">contentViewUpperActions</property>\n        <property name=\"containerStyleClass\">contentViewUpperAction</property>\n        <property name=\"actionsDisplay\">icons</property>\n        <property name=\"overallDisplay\">horizontal_block</property>\n        <property name=\"maxActionsNumber\">10</property>\n      </properties>\n    </widget>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/layouts-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.contentview.jsf/org.nuxeo.ecm.platform.contentview.jsf.actions/Contributions/org.nuxeo.ecm.platform.contentview.jsf.actions--actions",
              "id": "org.nuxeo.ecm.platform.contentview.jsf.actions--actions",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"selectContentViewPageSize\" order=\"0\" type=\"template\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_page_size_selector.xhtml\n        </property>\n        <property name=\"addForm\">false</property>\n      </properties>\n      <filter-id>contentViewShowPageSizeSelector</filter-id>\n    </action>\n\n    <action id=\"selectContentViewResultLayout\" order=\"10\" type=\"template\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_result_layout_actions.xhtml\n        </property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">true</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action icon=\"/icons/refresh.png\" id=\"refreshContentView\" label=\"label.refresh\" order=\"20\" type=\"link\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"link\">\n          #{contentView.refreshAndRewindPageProvider()}\n        </property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">true</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n      <filter-id>contentViewShowRefreshCommand</filter-id>\n    </action>\n\n    <action icon=\"/icons/xls_export.png\" id=\"contentViewCSVExport\" label=\"label.contentview.export.xl\" order=\"30\" type=\"template\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_export.xhtml\n        </property>\n        <property name=\"view\">xl</property>\n      </properties>\n      <filter-id>contentViewShowCSVExport</filter-id>\n    </action>\n\n    <action icon=\"/icons/pdf_export.png\" id=\"contentViewPDFExport\" label=\"label.contentview.export.pdf\" order=\"40\" type=\"template\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_export.xhtml\n        </property>\n        <property name=\"view\">content_view_pdf</property>\n      </properties>\n      <filter-id>contentViewShowPDFExport</filter-id>\n    </action>\n\n    <action id=\"contentViewRSSExport\" label=\"label.syndication.rss\" order=\"50\" type=\"template\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_export.xhtml\n        </property>\n        <property name=\"view\">rss</property>\n      </properties>\n      <filter-id>contentViewShowSyndicationLinks</filter-id>\n    </action>\n\n    <action id=\"contentViewATOMExport\" label=\"label.syndication.atom\" order=\"60\" type=\"template\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_export.xhtml\n        </property>\n        <property name=\"view\">atom</property>\n      </properties>\n      <filter-id>contentViewShowSyndicationLinks</filter-id>\n    </action>\n\n    <action icon=\"/icons/edit_columns.png\" id=\"contentViewEditColumns\" label=\"label.contentview.edit.columns\" order=\"80\" type=\"fancybox\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"include\">\n          /incl/action/content_view_edit_columns.xhtml\n        </property>\n        <property name=\"addForm\">true</property>\n        <property name=\"ajaxSupport\">true</property>\n        <property name=\"modal\">true</property>\n      </properties>\n      <filter-id>contentViewShowEditColumns</filter-id>\n    </action>\n\n    <action icon=\"/icons/edit_columns.png\" id=\"contentViewEditRows\" label=\"label.contentview.edit.rows\" order=\"80\" type=\"fancybox\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"include\">\n          /incl/action/content_view_edit_rows.xhtml\n        </property>\n        <property name=\"addForm\">true</property>\n        <property name=\"ajaxSupport\">true</property>\n        <property name=\"modal\">true</property>\n      </properties>\n      <filter-id>contentViewShowEditRows</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.contentview.jsf/org.nuxeo.ecm.platform.contentview.jsf.actions/Contributions/org.nuxeo.ecm.platform.contentview.jsf.actions--filters",
              "id": "org.nuxeo.ecm.platform.contentview.jsf.actions--filters",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"contentViewShowPageSizeSelector\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showPageSizeSelector,\n          contentView.showPageSizeSelector,\n          showPageSizeSelector)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowRefreshCommand\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showRefreshCommand,\n          contentView.showRefreshCommand, showRefreshCommand)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowCSVExport\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showCSVExport,\n          contentView.currentResultLayout.showCSVExport, showCSVExport)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowPDFExport\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showPDFExport,\n          contentView.currentResultLayout.showPDFExport, showPDFExport)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowSyndicationLinks\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showSyndicationLinks,\n          contentView.currentResultLayout.showSyndicationLinks,\n          showSyndicationLinks)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowEditColumns\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showEditColumns,\n          contentView.currentResultLayout.showEditColumns,\n          showEditColumns)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowEditRows\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showEditRows,\n          contentView.currentResultLayout.showEditRows,\n          showEditRows)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowSpreadsheet\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showSpreadsheet,\n          contentView.currentResultLayout.showSpreadsheet,\n          showSpreadsheet)}\n        </condition>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.contentview.jsf/org.nuxeo.ecm.platform.contentview.jsf.actions",
          "name": "org.nuxeo.ecm.platform.contentview.jsf.actions",
          "requirements": [],
          "resolutionOrder": 338,
          "services": [],
          "startOrder": 304,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.contentview.jsf.actions\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"selectContentViewPageSize\" order=\"0\" type=\"template\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_page_size_selector.xhtml\n        </property>\n        <property name=\"addForm\">false</property>\n      </properties>\n      <filter-id>contentViewShowPageSizeSelector</filter-id>\n    </action>\n\n    <action id=\"selectContentViewResultLayout\" order=\"10\" type=\"template\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_result_layout_actions.xhtml\n        </property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">true</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n    <action id=\"refreshContentView\" order=\"20\" type=\"link\" label=\"label.refresh\"\n      icon=\"/icons/refresh.png\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"link\">\n          #{contentView.refreshAndRewindPageProvider()}\n        </property>\n        <property name=\"addForm\">true</property>\n        <property name=\"useAjaxForm\">true</property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n      <filter-id>contentViewShowRefreshCommand</filter-id>\n    </action>\n\n    <action id=\"contentViewCSVExport\" order=\"30\" type=\"template\"\n      label=\"label.contentview.export.xl\" icon=\"/icons/xls_export.png\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_export.xhtml\n        </property>\n        <property name=\"view\">xl</property>\n      </properties>\n      <filter-id>contentViewShowCSVExport</filter-id>\n    </action>\n\n    <action id=\"contentViewPDFExport\" order=\"40\" type=\"template\"\n      label=\"label.contentview.export.pdf\" icon=\"/icons/pdf_export.png\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_export.xhtml\n        </property>\n        <property name=\"view\">content_view_pdf</property>\n      </properties>\n      <filter-id>contentViewShowPDFExport</filter-id>\n    </action>\n\n    <action id=\"contentViewRSSExport\" order=\"50\" type=\"template\"\n      label=\"label.syndication.rss\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_export.xhtml\n        </property>\n        <property name=\"view\">rss</property>\n      </properties>\n      <filter-id>contentViewShowSyndicationLinks</filter-id>\n    </action>\n\n    <action id=\"contentViewATOMExport\" order=\"60\" type=\"template\"\n      label=\"label.syndication.atom\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"template\">\n          /incl/action/content_view_export.xhtml\n        </property>\n        <property name=\"view\">atom</property>\n      </properties>\n      <filter-id>contentViewShowSyndicationLinks</filter-id>\n    </action>\n\n    <action id=\"contentViewEditColumns\" order=\"80\"\n      label=\"label.contentview.edit.columns\" type=\"fancybox\" icon=\"/icons/edit_columns.png\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"include\">\n          /incl/action/content_view_edit_columns.xhtml\n        </property>\n        <property name=\"addForm\">true</property>\n        <property name=\"ajaxSupport\">true</property>\n        <property name=\"modal\">true</property>\n      </properties>\n      <filter-id>contentViewShowEditColumns</filter-id>\n    </action>\n\n    <action id=\"contentViewEditRows\" order=\"80\"\n      label=\"label.contentview.edit.rows\" type=\"fancybox\" icon=\"/icons/edit_columns.png\">\n      <category>CONTENT_VIEW_ACTIONS</category>\n      <properties>\n        <property name=\"include\">\n          /incl/action/content_view_edit_rows.xhtml\n        </property>\n        <property name=\"addForm\">true</property>\n        <property name=\"ajaxSupport\">true</property>\n        <property name=\"modal\">true</property>\n      </properties>\n      <filter-id>contentViewShowEditRows</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"contentViewShowPageSizeSelector\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showPageSizeSelector,\n          contentView.showPageSizeSelector,\n          showPageSizeSelector)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowRefreshCommand\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showRefreshCommand,\n          contentView.showRefreshCommand, showRefreshCommand)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowCSVExport\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showCSVExport,\n          contentView.currentResultLayout.showCSVExport, showCSVExport)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowPDFExport\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showPDFExport,\n          contentView.currentResultLayout.showPDFExport, showPDFExport)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowSyndicationLinks\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showSyndicationLinks,\n          contentView.currentResultLayout.showSyndicationLinks,\n          showSyndicationLinks)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowEditColumns\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showEditColumns,\n          contentView.currentResultLayout.showEditColumns,\n          showEditColumns)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowEditRows\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showEditRows,\n          contentView.currentResultLayout.showEditRows,\n          showEditRows)}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"contentViewShowSpreadsheet\">\n      <rule grant=\"true\">\n        <condition>\n          #{nxu:test(empty showSpreadsheet,\n          contentView.currentResultLayout.showSpreadsheet,\n          showSpreadsheet)}\n        </condition>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.contentview.jsf.ContentViewServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The Content View service provides extension points for content view\n    registration.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe Content View service provides extension points for content view\nregistration.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.ui.web.ContentViewService",
              "descriptors": [
                "org.nuxeo.ecm.platform.contentview.jsf.ContentViewDescriptor"
              ],
              "documentation": "\n      Content Views are referencing resources that will help build a listing on\n      the UI.\n    \n",
              "documentationHtml": "<p>\nContent Views are referencing resources that will help build a listing on\nthe UI.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.contentview.jsf/org.nuxeo.ecm.platform.ui.web.ContentViewService/ExtensionPoints/org.nuxeo.ecm.platform.ui.web.ContentViewService--contentViews",
              "id": "org.nuxeo.ecm.platform.ui.web.ContentViewService--contentViews",
              "label": "contentViews (org.nuxeo.ecm.platform.ui.web.ContentViewService)",
              "name": "contentViews",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.contentview.jsf/org.nuxeo.ecm.platform.ui.web.ContentViewService",
          "name": "org.nuxeo.ecm.platform.ui.web.ContentViewService",
          "requirements": [
            "org.nuxeo.ecm.platform.query.api.PageProviderService"
          ],
          "resolutionOrder": 462,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.ui.web.ContentViewService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.contentview.jsf/org.nuxeo.ecm.platform.ui.web.ContentViewService/Services/org.nuxeo.ecm.platform.contentview.jsf.ContentViewService",
              "id": "org.nuxeo.ecm.platform.contentview.jsf.ContentViewService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 883,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\">\n  <require>org.nuxeo.ecm.platform.query.api.PageProviderService</require>\n  <documentation>\n    The Content View service provides extension points for content view\n    registration.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.contentview.jsf.ContentViewServiceImpl\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.contentview.jsf.ContentViewService\" />\n  </service>\n\n  <extension-point name=\"contentViews\">\n    <documentation>\n      Content Views are referencing resources that will help build a listing on\n      the UI.\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.contentview.jsf.ContentViewDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/contentview-framework.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-contentview-jsf-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.content/org.nuxeo.ecm.platform.contentview.jsf",
      "id": "org.nuxeo.ecm.platform.contentview.jsf",
      "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: 2023.7.9-t20240205-104831\r\nBundle-Name: Nuxeo Platform Content View JSF Fragment\r\nNuxeo-Component: OSGI-INF/contentview-framework.xml, OSGI-INF/widgettype\r\n s-contrib.xml, OSGI-INF/layouts-contrib.xml, OSGI-INF/actions-contrib.x\r\n ml\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.contentview.jsf;singleton:=t\r\n rue\r\n\r\n",
      "maxResolutionOrder": 462,
      "minResolutionOrder": 336,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-convert-api",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.convert",
          "org.nuxeo.ecm.core.convert.api",
          "org.nuxeo.ecm.core.convert.plugins"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert",
        "id": "grp:org.nuxeo.ecm.core.convert",
        "name": "org.nuxeo.ecm.core.convert",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.convert.api",
      "components": [],
      "fileName": "nuxeo-core-convert-api-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.api",
      "id": "org.nuxeo.ecm.core.convert.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 5.4.2.qualifier\r\nExport-Package: org.nuxeo.ecm.core.convert.api\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: NXCore Covert API\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nImport-Package: org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=\r\n split,org.nuxeo.ecm.core.api.blobholder\r\nBundle-SymbolicName: org.nuxeo.ecm.core.convert.api\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-routing-core",
      "artifactVersion": "2023.7.9",
      "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.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.routing.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "declaredStartOrder": null,
          "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.7.9"
            }
          ],
          "startOrder": 871,
          "version": "2023.7.9",
          "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",
          "declaredStartOrder": null,
          "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.7.9"
            },
            {
              "@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.7.9"
            }
          ],
          "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.7.9"
            }
          ],
          "startOrder": 872,
          "version": "2023.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "declaredStartOrder": null,
          "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.7.9"
            }
          ],
          "startOrder": 458,
          "version": "2023.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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",
              "documentation": null,
              "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.7.9",
              "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",
              "documentation": null,
              "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.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"100\" exclusive=\"true\" inputStream=\"bulk/documentRoutingEscalation\" name=\"documentRoutingEscalation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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=\"100\"\n      batchSize=\"25\" 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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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",
              "documentation": null,
              "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.7.9",
              "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",
              "documentation": null,
              "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.7.9",
              "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",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Core IO registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO registered marshallers set.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "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.7.9",
              "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.7.9",
          "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.7.9.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": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-login-cas2",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.login",
          "org.nuxeo.ecm.platform.login.cas2",
          "org.nuxeo.ecm.platform.login.digest",
          "org.nuxeo.ecm.platform.login.shibboleth",
          "org.nuxeo.ecm.platform.login.token",
          "org.nuxeo.ecm.platform.login.token.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login",
        "id": "grp:org.nuxeo.ecm.platform.login",
        "name": "org.nuxeo.ecm.platform.login",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.login.cas2",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "<pre>\n       CAS2 Authentication Plugin\n       Parameters include :\n        - ticketKey : name of the ticket parameter in the URL\n        - appURL : url used to connect to nuxeo when CAS auth is done\n          ( can be $NUXEO to let Nuxeo compute the URL)\n        - serviceLoginURL : CAS url for login form\n          ( can use $CASSERVER to let nuxeo define url according to CasServer header)\n        - serviceValidateURL : CAS url for ticket validation\n          ( can use $CASSERVER to let nuxeo define url according to CasServer header)\n        - serviceKey : name of the service parameter in the URL\n     - excludePromptURL : if requested url starts with this value, there will be no CAS authentication\n       (you can add multiple exclude path by adding different suffix to the parameter name)\n   </pre>\n",
          "documentationHtml": "<p>\n</p><pre>\nCAS2 Authentication Plugin\nParameters include :\n- ticketKey : name of the ticket parameter in the URL\n- appURL : url used to connect to nuxeo when CAS auth is done\n( can be $NUXEO to let Nuxeo compute the URL)\n- serviceLoginURL : CAS url for login form\n( can use $CASSERVER to let nuxeo define url according to CasServer header)\n- serviceValidateURL : CAS url for ticket validation\n( can use $CASSERVER to let nuxeo define url according to CasServer header)\n- serviceKey : name of the service parameter in the URL\n- excludePromptURL : if requested url starts with this value, there will be no CAS authentication\n(you can add multiple exclude path by adding different suffix to the parameter name)\n</pre>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--authenticators",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.cas2/org.nuxeo.ecm.platform.login.Cas2SSO/Contributions/org.nuxeo.ecm.platform.login.Cas2SSO--authenticators",
              "id": "org.nuxeo.ecm.platform.login.Cas2SSO--authenticators",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"authenticators\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n      <authenticationPlugin class=\"org.nuxeo.ecm.platform.ui.web.auth.cas2.Cas2Authenticator\" enabled=\"true\" name=\"CAS2_AUTH\">\n       <needStartingURLSaving>true</needStartingURLSaving>\n       <parameters>\n         <parameter name=\"ticketKey\">ticket</parameter>\n         <parameter name=\"ticketKey\">proxy</parameter>\n         <parameter name=\"appURL\">http://127.0.0.1:8080/nuxeo/nxstartup.faces</parameter>\n         <parameter name=\"serviceLoginURL\">http://127.0.0.1:8080/cas/login</parameter>\n         <parameter name=\"serviceValidateURL\">http://127.0.0.1:8080/cas/serviceValidate</parameter>\n         <parameter name=\"proxyValidateURL\">http://127.0.0.1:8080/cas/proxyValidate</parameter>\n         <parameter name=\"serviceKey\">service</parameter>\n       </parameters>\n      </authenticationPlugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.cas2/org.nuxeo.ecm.platform.login.Cas2SSO",
          "name": "org.nuxeo.ecm.platform.login.Cas2SSO",
          "requirements": [],
          "resolutionOrder": 401,
          "services": [],
          "startOrder": 342,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.login.Cas2SSO\">\n   <documentation><pre>\n       CAS2 Authentication Plugin\n       Parameters include :\n        - ticketKey : name of the ticket parameter in the URL\n        - appURL : url used to connect to nuxeo when CAS auth is done\n          ( can be $NUXEO to let Nuxeo compute the URL)\n        - serviceLoginURL : CAS url for login form\n          ( can use $CASSERVER to let nuxeo define url according to CasServer header)\n        - serviceValidateURL : CAS url for ticket validation\n          ( can use $CASSERVER to let nuxeo define url according to CasServer header)\n        - serviceKey : name of the service parameter in the URL\n     - excludePromptURL : if requested url starts with this value, there will be no CAS authentication\n       (you can add multiple exclude path by adding different suffix to the parameter name)\n   </pre>\n   </documentation>\n   <extension\n      target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n      point=\"authenticators\">\n      <authenticationPlugin\n              name=\"CAS2_AUTH\"\n              enabled=\"true\"\n              class=\"org.nuxeo.ecm.platform.ui.web.auth.cas2.Cas2Authenticator\">\n       <needStartingURLSaving>true</needStartingURLSaving>\n       <parameters>\n         <parameter name=\"ticketKey\">ticket</parameter>\n         <parameter name=\"ticketKey\">proxy</parameter>\n         <parameter name=\"appURL\">http://127.0.0.1:8080/nuxeo/nxstartup.faces</parameter>\n         <parameter name=\"serviceLoginURL\">http://127.0.0.1:8080/cas/login</parameter>\n         <parameter name=\"serviceValidateURL\">http://127.0.0.1:8080/cas/serviceValidate</parameter>\n         <parameter name=\"proxyValidateURL\">http://127.0.0.1:8080/cas/proxyValidate</parameter>\n         <parameter name=\"serviceKey\">service</parameter>\n       </parameters>\n      </authenticationPlugin>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/CAS2-authenticator-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService--exceptionhandler",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.cas2/org.nuxeo.ecm.platform.login.Cas2SSO.ExceptionHandlingContrib/Contributions/org.nuxeo.ecm.platform.login.Cas2SSO.ExceptionHandlingContrib--exceptionhandler",
              "id": "org.nuxeo.ecm.platform.login.Cas2SSO.ExceptionHandlingContrib--exceptionhandler",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "name": "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"exceptionhandler\" target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\">\n    <exceptionHandler class=\"org.nuxeo.ecm.platform.ui.web.auth.cas2.SecurityExceptionHandler\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.cas2/org.nuxeo.ecm.platform.login.Cas2SSO.ExceptionHandlingContrib",
          "name": "org.nuxeo.ecm.platform.login.Cas2SSO.ExceptionHandlingContrib",
          "requirements": [
            "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib"
          ],
          "resolutionOrder": 615,
          "services": [],
          "startOrder": 343,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n    name=\"org.nuxeo.ecm.platform.login.Cas2SSO.ExceptionHandlingContrib\">\n\n  <require>org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib</require>\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\"\n      point=\"exceptionhandler\">\n    <exceptionHandler\n        class=\"org.nuxeo.ecm.platform.ui.web.auth.cas2.SecurityExceptionHandler\"/>\n  </extension>\n\n    <!--extension\n      target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\"\n      point=\"errorhandlers\">\n    <errorHandlers bundle=\"messages\" loggerName=\"nuxeo-debug-log\"  defaultpage=\"/cas2_security_exception.jsp\">\n      <handlers>\n        <handler error=\".*SecurityException\" message=\"Error.Insuffisant.Rights\" page=\"/cas2_security_exception.jsp\"/>\n      </handlers>\n    </errorHandlers>\n  </extension-->\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/exception-handling-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-login-cas2-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.cas2",
      "id": "org.nuxeo.ecm.platform.login.cas2",
      "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: 1\r\nBundle-Version: ${eclipseVersion}-r${buildNumber}\r\nBundle-Name: Nuxeo CAS2 extension\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.login.cas2;singleton:=true\r\nRequire-Bundle: org.nuxeo.ecm.platform.login,org.nuxeo.ecm.platform.web.\r\n common\r\nNuxeo-Component: OSGI-INF/CAS2-authenticator-contrib.xml,OSGI-INF/except\r\n ion-handling-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 615,
      "minResolutionOrder": 401,
      "packages": [
        "cas2-authentication"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.login",
        "org.nuxeo.ecm.platform.web.common"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-virtualnavigation-web",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.platform.virtualnavigation.types",
          "org.nuxeo.platform.virtualnavigation.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.platform.virtualnavigation",
        "id": "grp:org.nuxeo.platform.virtualnavigation",
        "name": "org.nuxeo.platform.virtualnavigation",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.platform.virtualnavigation.web",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.webapp.directory.DirectoryTreeService--trees",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.platform.virtualnavigation/org.nuxeo.platform.virtualnavigation.web/org.nuxeo.ecm.virtualnavigation.directory.DirectoryTreeService.contrib/Contributions/org.nuxeo.ecm.virtualnavigation.directory.DirectoryTreeService.contrib--trees",
              "id": "org.nuxeo.ecm.virtualnavigation.directory.DirectoryTreeService.contrib--trees",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.webapp.directory.DirectoryTreeService",
                "name": "org.nuxeo.ecm.webapp.directory.DirectoryTreeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"trees\" target=\"org.nuxeo.ecm.webapp.directory.DirectoryTreeService\">\n\n    <directoryTree contentView=\"bySubjectsContentView\" field=\"subjects\" label=\"base.navigation.subjects\" name=\"bySubjectsNavigation\" outcome=\"subjects_virtual_navigation\" schema=\"querynav\">\n      <directory>topic</directory>\n      <directory>subtopic</directory>\n    </directoryTree>\n\n    <directoryTree contentView=\"byCoverageContentView\" field=\"coverage\" label=\"base.navigation.coverage\" name=\"byCoverageNavigation\" outcome=\"coverage_virtual_navigation\" schema=\"querynav\">\n      <directory>continent</directory>\n      <directory>country</directory>\n    </directoryTree>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.platform.virtualnavigation/org.nuxeo.platform.virtualnavigation.web/org.nuxeo.ecm.virtualnavigation.directory.DirectoryTreeService.contrib",
          "name": "org.nuxeo.ecm.virtualnavigation.directory.DirectoryTreeService.contrib",
          "requirements": [],
          "resolutionOrder": 604,
          "services": [],
          "startOrder": 638,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component\n  name=\"org.nuxeo.ecm.virtualnavigation.directory.DirectoryTreeService.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.webapp.directory.DirectoryTreeService\"\n    point=\"trees\">\n\n    <directoryTree name=\"bySubjectsNavigation\" label=\"base.navigation.subjects\"\n      contentView=\"bySubjectsContentView\" field=\"subjects\" schema=\"querynav\"\n      outcome=\"subjects_virtual_navigation\">\n      <directory>topic</directory>\n      <directory>subtopic</directory>\n    </directoryTree>\n\n    <directoryTree name=\"byCoverageNavigation\" label=\"base.navigation.coverage\"\n      contentView=\"byCoverageContentView\" field=\"coverage\" schema=\"querynav\"\n      outcome=\"coverage_virtual_navigation\">\n      <directory>continent</directory>\n      <directory>country</directory>\n    </directoryTree>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/directorytreemanager-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.ContentViewService--contentViews",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.platform.virtualnavigation/org.nuxeo.platform.virtualnavigation.web/org.nuxeo.ecm.virtualnavigation.contentviews.contrib/Contributions/org.nuxeo.ecm.virtualnavigation.contentviews.contrib--contentViews",
              "id": "org.nuxeo.ecm.virtualnavigation.contentviews.contrib--contentViews",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "name": "org.nuxeo.ecm.platform.ui.web.ContentViewService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"contentViews\" target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\">\n\n    <contentView name=\"bySubjectsContentView\">\n      <title>label.virtualnavigation.subjects</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>true</showTitle>\n      <emptySentence>label.content.empty.search</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <!-- search doc maintained here -->\n        <searchDocumentType>QueryNav</searchDocumentType>\n        <whereClause>\n          <predicate operator=\"STARTSWITH\" parameter=\"dc:subjects\">\n            <field name=\"subjects\" schema=\"querynav\"/>\n          </predicate>\n          <fixedPart>\n            ecm:mixinType != 'HiddenInNavigation' AND\n            ecm:isTrashed = 0 AND\n            ecm:isVersion = 0\n          </fixedPart>\n        </whereClause>\n        <sort ascending=\"true\" column=\"dc:title\"/>\n        <pageSize>10</pageSize>\n      </coreQueryPageProvider>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n\n      <resultLayouts>\n        <layout iconPath=\"/icons/document_listing_icon_2_columns_icon.png\" name=\"document_listing_thumbnail\" showEditRows=\"true\" showSlideshow=\"true\" title=\"document_thumbnail_listing\" translateTitle=\"true\"/>\n        <layout iconPath=\"/icons/document_listing_icon.png\" name=\"document_listing_table\" showCSVExport=\"true\" showEditColumns=\"true\" showSpreadsheet=\"true\" title=\"document_listing\" translateTitle=\"true\"/>\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION</selectionList>\n      <actions category=\"CURRENT_SELECTION_LIST\"/>\n\n    </contentView>\n\n    <contentView name=\"byCoverageContentView\">\n      <title>label.virtualnavigation.coverage</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>true</showTitle>\n      <emptySentence>label.content.empty.search</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <!-- search doc maintained here -->\n        <searchDocumentType>QueryNav</searchDocumentType>\n        <whereClause>\n          <predicate operator=\"STARTSWITH\" parameter=\"dc:coverage\">\n            <field name=\"coverage\" schema=\"querynav\"/>\n          </predicate>\n          <fixedPart>\n            ecm:mixinType != 'HiddenInNavigation' AND\n            ecm:isTrashed = 0 AND\n            ecm:isVersion = 0\n          </fixedPart>\n        </whereClause>\n        <sort ascending=\"true\" column=\"dc:title\"/>\n        <pageSize>10</pageSize>\n      </coreQueryPageProvider>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n\n      <resultLayouts>\n        <layout iconPath=\"/icons/document_listing_icon_2_columns_icon.png\" name=\"document_listing_thumbnail\" showEditRows=\"true\" showSlideshow=\"true\" title=\"document_thumbnail_listing\" translateTitle=\"true\"/>\n        <layout iconPath=\"/icons/document_listing_icon.png\" name=\"document_listing_table\" showCSVExport=\"true\" showEditColumns=\"true\" showSpreadsheet=\"true\" title=\"document_listing\" translateTitle=\"true\"/>\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION</selectionList>\n      <actions category=\"CURRENT_SELECTION_LIST\"/>\n\n    </contentView>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.platform.virtualnavigation/org.nuxeo.platform.virtualnavigation.web/org.nuxeo.ecm.virtualnavigation.contentviews.contrib",
          "name": "org.nuxeo.ecm.virtualnavigation.contentviews.contrib",
          "requirements": [],
          "resolutionOrder": 605,
          "services": [],
          "startOrder": 637,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.virtualnavigation.contentviews.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.ContentViewService\"\n    point=\"contentViews\">\n\n    <contentView name=\"bySubjectsContentView\">\n      <title>label.virtualnavigation.subjects</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>true</showTitle>\n      <emptySentence>label.content.empty.search</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <!-- search doc maintained here -->\n        <searchDocumentType>QueryNav</searchDocumentType>\n        <whereClause>\n          <predicate parameter=\"dc:subjects\" operator=\"STARTSWITH\">\n            <field schema=\"querynav\" name=\"subjects\" />\n          </predicate>\n          <fixedPart>\n            ecm:mixinType != 'HiddenInNavigation' AND\n            ecm:isTrashed = 0 AND\n            ecm:isVersion = 0\n          </fixedPart>\n        </whereClause>\n        <sort column=\"dc:title\" ascending=\"true\" />\n        <pageSize>10</pageSize>\n      </coreQueryPageProvider>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n\n      <resultLayouts>\n        <layout name=\"document_listing_thumbnail\" title=\"document_thumbnail_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon_2_columns_icon.png\"\n          showSlideshow=\"true\" showEditRows=\"true\" />\n        <layout name=\"document_listing_table\" title=\"document_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon.png\"\n          showCSVExport=\"true\" showSpreadsheet=\"true\" showEditColumns=\"true\" />\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION</selectionList>\n      <actions category=\"CURRENT_SELECTION_LIST\" />\n\n    </contentView>\n\n    <contentView name=\"byCoverageContentView\">\n      <title>label.virtualnavigation.coverage</title>\n      <translateTitle>true</translateTitle>\n      <showTitle>true</showTitle>\n      <emptySentence>label.content.empty.search</emptySentence>\n      <translateEmptySentence>true</translateEmptySentence>\n\n      <coreQueryPageProvider>\n        <property name=\"coreSession\">#{documentManager}</property>\n        <!-- search doc maintained here -->\n        <searchDocumentType>QueryNav</searchDocumentType>\n        <whereClause>\n          <predicate parameter=\"dc:coverage\" operator=\"STARTSWITH\">\n            <field schema=\"querynav\" name=\"coverage\" />\n          </predicate>\n          <fixedPart>\n            ecm:mixinType != 'HiddenInNavigation' AND\n            ecm:isTrashed = 0 AND\n            ecm:isVersion = 0\n          </fixedPart>\n        </whereClause>\n        <sort column=\"dc:title\" ascending=\"true\" />\n        <pageSize>10</pageSize>\n      </coreQueryPageProvider>\n\n      <showPageSizeSelector>true</showPageSizeSelector>\n      <useGlobalPageSize>true</useGlobalPageSize>\n      <refresh>\n        <event>documentChildrenChanged</event>\n      </refresh>\n      <cacheKey>only_one_cache</cacheKey>\n      <cacheSize>1</cacheSize>\n\n      <resultLayouts>\n        <layout name=\"document_listing_thumbnail\" title=\"document_thumbnail_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon_2_columns_icon.png\"\n          showSlideshow=\"true\" showEditRows=\"true\" />\n        <layout name=\"document_listing_table\" title=\"document_listing\"\n          translateTitle=\"true\" iconPath=\"/icons/document_listing_icon.png\"\n          showCSVExport=\"true\" showSpreadsheet=\"true\" showEditColumns=\"true\" />\n      </resultLayouts>\n\n      <selectionList>CURRENT_SELECTION</selectionList>\n      <actions category=\"CURRENT_SELECTION_LIST\" />\n\n    </contentView>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/contentviews-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-virtualnavigation-web-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.platform.virtualnavigation/org.nuxeo.platform.virtualnavigation.web",
      "id": "org.nuxeo.platform.virtualnavigation.web",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: nuxeo-platform-virtualnavigation-web\r\nBundle-SymbolicName: org.nuxeo.platform.virtualnavigation.web;singleton:\r\n =true\r\nBundle-Vendor: Nuxeo\r\nProvide-Package: org.nuxeo.platform.virtualnavigation\r\nRequire-Bundle: org.nuxeo.runtime,org.nuxeo.ecm.core.api,org.nuxeo.ecm.w\r\n ebapp.core,org.nuxeo.ecm.webapp.ui\r\nBundle-Category: web,stateless\r\nNuxeo-Component: OSGI-INF/directorytreemanager-contrib.xml,OSGI-INF/cont\r\n entviews-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 605,
      "minResolutionOrder": 604,
      "packages": [
        "nuxeo-virtualnavigation"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.runtime",
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.webapp.core",
        "org.nuxeo.ecm.webapp.ui"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-search-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.search.api",
          "org.nuxeo.ecm.platform.search.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search",
        "id": "grp:org.nuxeo.ecm.platform.search",
        "name": "org.nuxeo.ecm.platform.search",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.search.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.search.core.SavedSearchServiceImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.service",
          "name": "org.nuxeo.ecm.platform.search.service",
          "requirements": [],
          "resolutionOrder": 842,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.search.service",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.service/Services/org.nuxeo.ecm.platform.search.core.SavedSearchService",
              "id": "org.nuxeo.ecm.platform.search.core.SavedSearchService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 478,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.search.service\">\n\n  <implementation\n      class=\"org.nuxeo.ecm.platform.search.core.SavedSearchServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.search.core.SavedSearchService\" />\n  </service>\n\n</component>",
          "xmlFileName": "/OSGI-INF/savedsearch-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.CoreExtensions/Contributions/org.nuxeo.ecm.platform.search.CoreExtensions--schema",
              "id": "org.nuxeo.ecm.platform.search.CoreExtensions--schema",
              "registrationOrder": 51,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"saved_search\" prefix=\"saved\" src=\"schemas/saved_search.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.CoreExtensions/Contributions/org.nuxeo.ecm.platform.search.CoreExtensions--doctype",
              "id": "org.nuxeo.ecm.platform.search.CoreExtensions--doctype",
              "registrationOrder": 48,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"SavedSearch\" perDocumentQuery=\"false\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"saved_search\"/>\n    </facet>\n\n    <doctype extends=\"Document\" name=\"SavedSearch\">\n      <facet name=\"SavedSearch\"/>\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.CoreExtensions",
          "name": "org.nuxeo.ecm.platform.search.CoreExtensions",
          "requirements": [
            "org.nuxeo.ecm.core.schema.TypeService",
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 843,
          "services": [],
          "startOrder": 472,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.search.CoreExtensions\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <require>org.nuxeo.ecm.core.schema.TypeService</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n             point=\"schema\">\n    <schema name=\"saved_search\" src=\"schemas/saved_search.xsd\" prefix=\"saved\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n             point=\"doctype\">\n\n    <facet name=\"SavedSearch\" perDocumentQuery=\"false\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"uid\" />\n      <schema name=\"saved_search\"/>\n    </facet>\n\n    <doctype name=\"SavedSearch\" extends=\"Document\">\n      <facet name=\"SavedSearch\" />\n      <facet name=\"HiddenInNavigation\" />\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/savedsearch-core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.adapter/Contributions/org.nuxeo.ecm.platform.search.adapter--adapters",
              "id": "org.nuxeo.ecm.platform.search.adapter--adapters",
              "registrationOrder": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n\n    <adapter class=\"org.nuxeo.ecm.platform.search.core.SavedSearch\" factory=\"org.nuxeo.ecm.platform.search.core.SavedSearchAdapterFactory\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.adapter",
          "name": "org.nuxeo.ecm.platform.search.adapter",
          "requirements": [],
          "resolutionOrder": 844,
          "services": [],
          "startOrder": 473,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.search.adapter\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n             point=\"adapters\">\n\n    <adapter class=\"org.nuxeo.ecm.platform.search.core.SavedSearch\"\n             factory=\"org.nuxeo.ecm.platform.search.core.SavedSearchAdapterFactory\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/savedsearch-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.pageproviders/Contributions/org.nuxeo.ecm.platform.search.pageproviders--providers",
              "id": "org.nuxeo.ecm.platform.search.pageproviders--providers",
              "registrationOrder": 31,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"SAVED_SEARCHES_ALL\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'SavedSearch'\n        AND ((saved:query IS NOT NULL AND saved:queryLanguage IS NOT NULL)\n              OR saved:providerName IS NOT NULL)\n        AND ecm:isProxy = 0\n        AND ecm:isVersion = 0\n        AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"SAVED_SEARCHES_ALL_PAGE_PROVIDER\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'SavedSearch'\n        AND ((saved:query IS NOT NULL AND saved:queryLanguage IS NOT NULL)\n              OR saved:providerName IS NOT NULL)\n        AND ecm:isProxy = 0\n        AND ecm:isVersion = 0\n        AND ecm:isTrashed = 0\n        AND saved:providerName = :pageProvider\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"SAVED_SEARCHES\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'SavedSearch'\n        AND cvd:contentViewName IS NOT NULL\n        AND dc:creator = ? AND ecm:isProxy = 0\n        AND ecm:isVersion = 0\n        AND ecm:isTrashed = 0\n        AND SORTED_COLUMN IS NOT NULL\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"SHARED_SAVED_SEARCHES\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'SavedSearch'\n        AND cvd:contentViewName IS NOT NULL\n        AND dc:creator != ? AND ecm:isProxy = 0\n        AND ecm:isVersion = 0\n        AND ecm:isTrashed = 0\n        AND SORTED_COLUMN IS NOT NULL\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.pageproviders",
          "name": "org.nuxeo.ecm.platform.search.pageproviders",
          "requirements": [],
          "resolutionOrder": 845,
          "services": [],
          "startOrder": 477,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.search.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n             point=\"providers\">\n\n    <coreQueryPageProvider name=\"SAVED_SEARCHES_ALL\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'SavedSearch'\n        AND ((saved:query IS NOT NULL AND saved:queryLanguage IS NOT NULL)\n              OR saved:providerName IS NOT NULL)\n        AND ecm:isProxy = 0\n        AND ecm:isVersion = 0\n        AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"SAVED_SEARCHES_ALL_PAGE_PROVIDER\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'SavedSearch'\n        AND ((saved:query IS NOT NULL AND saved:queryLanguage IS NOT NULL)\n              OR saved:providerName IS NOT NULL)\n        AND ecm:isProxy = 0\n        AND ecm:isVersion = 0\n        AND ecm:isTrashed = 0\n        AND saved:providerName = :pageProvider\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"SAVED_SEARCHES\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'SavedSearch'\n        AND cvd:contentViewName IS NOT NULL\n        AND dc:creator = ? AND ecm:isProxy = 0\n        AND ecm:isVersion = 0\n        AND ecm:isTrashed = 0\n        AND SORTED_COLUMN IS NOT NULL\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"SHARED_SAVED_SEARCHES\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'SavedSearch'\n        AND cvd:contentViewName IS NOT NULL\n        AND dc:creator != ? AND ecm:isProxy = 0\n        AND ecm:isVersion = 0\n        AND ecm:isTrashed = 0\n        AND SORTED_COLUMN IS NOT NULL\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/savedsearch-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.default.types/Contributions/org.nuxeo.ecm.platform.search.default.types--schema",
              "id": "org.nuxeo.ecm.platform.search.default.types--schema",
              "registrationOrder": 52,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"default_search\" prefix=\"defaults\" src=\"schemas/default_search.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.default.types/Contributions/org.nuxeo.ecm.platform.search.default.types--doctype",
              "id": "org.nuxeo.ecm.platform.search.default.types--doctype",
              "registrationOrder": 49,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <!-- For default search -->\n    <doctype extends=\"SavedSearch\" name=\"DefaultSearch\">\n      <facet name=\"ContentViewDisplay\"/>\n      <schema name=\"default_search\"/>\n    </doctype>\n\n    <doctype extends=\"SavedSearch\" name=\"ExpiredSearch\">\n      <schema name=\"expired_search\"/>\n    </doctype>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.default.types/Contributions/org.nuxeo.ecm.platform.search.default.types--types",
              "id": "org.nuxeo.ecm.platform.search.default.types--types",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"DefaultSearch\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.default.types",
          "name": "org.nuxeo.ecm.platform.search.default.types",
          "requirements": [
            "org.nuxeo.ecm.platform.search.CoreExtensions",
            "org.nuxeo.ecm.core.schema.TypeService",
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 846,
          "services": [],
          "startOrder": 475,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.search.default.types\">\n\n  <require>org.nuxeo.ecm.core.schema.TypeService</require>\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <require>org.nuxeo.ecm.platform.search.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"default_search\" prefix=\"defaults\" src=\"schemas/default_search.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <!-- For default search -->\n    <doctype name=\"DefaultSearch\" extends=\"SavedSearch\">\n      <facet name=\"ContentViewDisplay\" />\n      <schema name=\"default_search\" />\n    </doctype>\n\n    <doctype name=\"ExpiredSearch\" extends=\"SavedSearch\">\n      <schema name=\"expired_search\" />\n    </doctype>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" point=\"types\">\n    <types>\n      <type name=\"DefaultSearch\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/search-core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.search.ui.types/Contributions/org.nuxeo.search.ui.types--types",
              "id": "org.nuxeo.search.ui.types--types",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n\n    <type id=\"DefaultSearch\">\n      <label>DefaultSearch</label>\n      <icon>/icons/search.png</icon>\n      <bigIcon>/icons/search_100.png</bigIcon>\n      <description>DefaultSearch.description</description>\n      <default-view>home_view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>default_search_layout</layout>\n        <layout>content_view_display</layout>\n      </layouts>\n    </type>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.search.ui.types",
          "name": "org.nuxeo.search.ui.types",
          "requirements": [],
          "resolutionOrder": 847,
          "services": [],
          "startOrder": 739,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.search.ui.types\">\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n\n    <type id=\"DefaultSearch\">\n      <label>DefaultSearch</label>\n      <icon>/icons/search.png</icon>\n      <bigIcon>/icons/search_100.png</bigIcon>\n      <description>DefaultSearch.description</description>\n      <default-view>home_view_documents</default-view>\n      <layouts mode=\"any\">\n        <layout>heading</layout>\n        <layout>default_search_layout</layout>\n        <layout>content_view_display</layout>\n      </layouts>\n    </type>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/search-ui-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.default.pageproviders/Contributions/org.nuxeo.ecm.platform.search.default.pageproviders--providers",
              "id": "org.nuxeo.ecm.platform.search.default.pageproviders--providers",
              "registrationOrder": 32,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"default_search\">\n      <trackUsage>true</trackUsage>\n      <searchDocumentType>DefaultSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          ecm:primaryType NOT IN ('Domain', 'SectionRoot', 'TemplateRoot', 'WorkspaceRoot', 'Favorites')\n          AND ecm:mixinType != 'HiddenInNavigation'\n          AND NOT (ecm:mixinType = 'Collection' AND ecm:name = 'Locally Edited')\n          AND ecm:isVersion = 0\n          AND ecm:isTrashed = 0\n          AND ecm:parentId IS NOT NULL\n          AND SORTED_COLUMN IS NOT NULL\n        </fixedPart>\n        <predicate operator=\"FULLTEXT\" parameter=\"ecm:fulltext\">\n          <field name=\"ecm_fulltext\" schema=\"default_search\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"dc:creator\">\n          <field name=\"dc_creator\" schema=\"default_search\"/>\n        </predicate>\n        <predicate operator=\"BETWEEN\" parameter=\"dc:created\">\n          <field name=\"dc_created_min\" schema=\"default_search\"/>\n          <field name=\"dc_created_max\" schema=\"default_search\"/>\n        </predicate>\n        <predicate operator=\"BETWEEN\" parameter=\"dc:modified\">\n          <field name=\"dc_modified_min\" schema=\"default_search\"/>\n          <field name=\"dc_modified_max\" schema=\"default_search\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"dc:nature\">\n          <field name=\"dc_nature\" schema=\"default_search\"/>\n        </predicate>\n        <predicate operator=\"STARTSWITH\" parameter=\"dc:subjects\">\n          <field name=\"dc_subjects\" schema=\"default_search\"/>\n        </predicate>\n        <predicate operator=\"STARTSWITH\" parameter=\"dc:coverage\">\n          <field name=\"dc_coverage\" schema=\"default_search\"/>\n        </predicate>\n        <predicate operator=\"STARTSWITH\" parameter=\"ecm:path\">\n          <field name=\"ecm_path\" schema=\"default_search\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"ecm:tag\">\n          <field name=\"ecm_tags\" schema=\"default_search\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"collectionMember:collectionIds\">\n          <field name=\"ecm_collections\" schema=\"default_search\"/>\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"dc_nature_agg\" parameter=\"dc:nature\" type=\"terms\">\n          <field name=\"dc_nature_agg\" schema=\"default_search\"/>\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"dc_subjects_agg\" parameter=\"dc:subjects\" type=\"terms\">\n          <field name=\"dc_subjects_agg\" schema=\"default_search\"/>\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"dc_coverage_agg\" parameter=\"dc:coverage\" type=\"terms\">\n          <field name=\"dc_coverage_agg\" schema=\"default_search\"/>\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"dc_creator_agg\" parameter=\"dc:creator\" type=\"terms\">\n          <field name=\"dc_creator_agg\" schema=\"default_search\"/>\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"common_size_agg\" parameter=\"file:content.length\" type=\"range\">\n          <field name=\"common_size_agg\" schema=\"default_search\"/>\n          <ranges>\n            <range key=\"tiny\" to=\"102400\"/>\n            <range from=\"102401\" key=\"small\" to=\"1048576\"/>\n            <range from=\"1048577\" key=\"medium\" to=\"10485760\"/>\n            <range from=\"10485761\" key=\"big\" to=\"104857600\"/>\n            <range from=\"104857601\" key=\"huge\"/>\n          </ranges>\n        </aggregate>\n        <aggregate id=\"dc_modified_agg\" parameter=\"dc:modified\" type=\"date_range\">\n          <field name=\"dc_modified_agg\" schema=\"default_search\"/>\n          <properties>\n            <property name=\"format\">\"dd-MM-yyyy\"</property>\n          </properties>\n          <dateRanges>\n            <dateRange fromDate=\"now-24H\" key=\"last24h\" toDate=\"now\"/>\n            <dateRange fromDate=\"now-7d\" key=\"lastWeek\" toDate=\"now-24H\"/>\n            <dateRange fromDate=\"now-1M\" key=\"lastMonth\" toDate=\"now-7d\"/>\n            <dateRange fromDate=\"now-1y\" key=\"lastYear\" toDate=\"now-1M\"/>\n            <dateRange key=\"priorToLastYear\" toDate=\"now-1y\"/>\n          </dateRanges>\n        </aggregate>\n      </aggregates>\n      <quickFilters>\n        <quickFilter name=\"noFolder\">\n          <clause>ecm:mixinType != 'Folderish'</clause>\n        </quickFilter>\n        <quickFilter name=\"mostRecent\">\n          <sort ascending=\"false\" column=\"dc:modified\"/>\n        </quickFilter>\n        <quickFilter name=\"onlyValidated\">\n          <clause>ecm:currentLifeCycleState = 'approved'</clause>\n          <sort ascending=\"false\" column=\"dc:modified\"/>\n        </quickFilter>\n      </quickFilters>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"default_trash_search\">\n      <trackUsage>true</trackUsage>\n      <searchDocumentType>DefaultSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          ecm:primaryType NOT IN ('Domain', 'SectionRoot', 'TemplateRoot', 'WorkspaceRoot', 'Favorites')\n          AND ecm:mixinType != 'HiddenInNavigation'\n          AND NOT (ecm:mixinType = 'Collection' AND ecm:name = 'Locally Edited')\n          AND ecm:isCheckedInVersion = 0\n          AND ecm:isTrashed = 1\n          AND ecm:parentId IS NOT NULL\n          AND SORTED_COLUMN IS NOT NULL\n        </fixedPart>\n        <predicate operator=\"FULLTEXT\" parameter=\"ecm:fulltext\">\n          <field name=\"ecm_fulltext\" schema=\"default_search\"/>\n        </predicate>\n        <predicate operator=\"STARTSWITH\" parameter=\"ecm:path\">\n          <field name=\"ecm_path\" schema=\"default_search\"/>\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"dc_creator_agg\" parameter=\"dc:creator\" type=\"terms\">\n          <field name=\"dc_creator_agg\" schema=\"default_search\"/>\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"common_size_agg\" parameter=\"file:content.length\" type=\"range\">\n          <field name=\"common_size_agg\" schema=\"default_search\"/>\n          <ranges>\n            <range key=\"tiny\" to=\"102400\"/>\n            <range from=\"102401\" key=\"small\" to=\"1048576\"/>\n            <range from=\"1048577\" key=\"medium\" to=\"10485760\"/>\n            <range from=\"10485761\" key=\"big\" to=\"104857600\"/>\n            <range from=\"104857601\" key=\"huge\"/>\n          </ranges>\n        </aggregate>\n      </aggregates>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"simple_search\">\n      <trackUsage>true</trackUsage>\n      <searchDocumentType>DefaultSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          ecm:mixinType != 'HiddenInNavigation' AND\n          ecm:isVersion = 0\n          AND ecm:isTrashed = 0\n          AND ecm:parentId IS NOT NULL\n          AND SORTED_COLUMN IS NOT NULL\n        </fixedPart>\n        <predicate operator=\"FULLTEXT\" parameter=\"ecm:fulltext\">\n          <field name=\"ecm_fulltext\" schema=\"default_search\"/>\n        </predicate>\n      </whereClause>\n      <!-- sort column=\"dc:title\" ascending=\"true\" / sort by fulltext relevance -->\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"nxql_search\">\n      <trackUsage>true</trackUsage>\n      <searchDocumentType>DefaultSearch</searchDocumentType>\n      <pattern escapeParameters=\"false\" quoteParameters=\"false\">?</pattern>\n      <!-- sort column=\"dc:title\" ascending=\"true\" / sort by fulltext relevance -->\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\" name=\"expired_search\">\n      <trackUsage>true</trackUsage>\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <searchDocumentType>ExpiredSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          ecm:isVersion = 0 AND\n          ecm:mixinType !=\n          'HiddenInNavigation' AND ecm:isTrashed = 0\n        </fixedPart>\n        <predicate operator=\"FULLTEXT\" parameter=\"dc:title\">\n          <field name=\"title\" schema=\"expired_search\"/>\n        </predicate>\n        <predicate operator=\"&lt;\" parameter=\"dc:expired\">\n          <field name=\"expired_max\" schema=\"expired_search\"/>\n        </predicate>\n        <predicate operator=\">\" parameter=\"dc:expired\">\n          <field name=\"expired_min\" schema=\"expired_search\"/>\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"dc_creator_agg\" parameter=\"dc:creator\" type=\"terms\">\n          <field name=\"dc_creator_agg\" schema=\"expired_search\"/>\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"dc_expired_agg\" parameter=\"dc:expired\" type=\"date_histogram\">\n          <field name=\"dc_expired_agg\" schema=\"expired_search\"/>\n          <properties>\n            <property name=\"interval\">month</property>\n            <property name=\"format\">MM-yyyy</property>\n            <property name=\"order\">key asc</property>\n          </properties>\n        </aggregate>\n      </aggregates>\n      <sort ascending=\"true\" column=\"dc:expired\"/>\n      <pageSize>20</pageSize>\n      <quickFilters>\n        <quickFilter name=\"approved\">\n          <clause>ecm:currentLifeCycleState = 'approved'</clause>\n        </quickFilter>\n      </quickFilters>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.default.pageproviders",
          "name": "org.nuxeo.ecm.platform.search.default.pageproviders",
          "requirements": [],
          "resolutionOrder": 848,
          "services": [],
          "startOrder": 474,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.search.default.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n\n    <coreQueryPageProvider name=\"default_search\">\n      <trackUsage>true</trackUsage>\n      <searchDocumentType>DefaultSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          ecm:primaryType NOT IN ('Domain', 'SectionRoot', 'TemplateRoot', 'WorkspaceRoot', 'Favorites')\n          AND ecm:mixinType != 'HiddenInNavigation'\n          AND NOT (ecm:mixinType = 'Collection' AND ecm:name = 'Locally Edited')\n          AND ecm:isVersion = 0\n          AND ecm:isTrashed = 0\n          AND ecm:parentId IS NOT NULL\n          AND SORTED_COLUMN IS NOT NULL\n        </fixedPart>\n        <predicate parameter=\"ecm:fulltext\" operator=\"FULLTEXT\">\n          <field schema=\"default_search\" name=\"ecm_fulltext\" />\n        </predicate>\n        <predicate parameter=\"dc:creator\" operator=\"IN\">\n          <field schema=\"default_search\" name=\"dc_creator\" />\n        </predicate>\n        <predicate parameter=\"dc:created\" operator=\"BETWEEN\">\n          <field schema=\"default_search\" name=\"dc_created_min\" />\n          <field schema=\"default_search\" name=\"dc_created_max\" />\n        </predicate>\n        <predicate parameter=\"dc:modified\" operator=\"BETWEEN\">\n          <field schema=\"default_search\" name=\"dc_modified_min\" />\n          <field schema=\"default_search\" name=\"dc_modified_max\" />\n        </predicate>\n        <predicate parameter=\"dc:nature\" operator=\"IN\">\n          <field schema=\"default_search\" name=\"dc_nature\" />\n        </predicate>\n        <predicate parameter=\"dc:subjects\" operator=\"STARTSWITH\">\n          <field schema=\"default_search\" name=\"dc_subjects\" />\n        </predicate>\n        <predicate parameter=\"dc:coverage\" operator=\"STARTSWITH\">\n          <field schema=\"default_search\" name=\"dc_coverage\" />\n        </predicate>\n        <predicate parameter=\"ecm:path\" operator=\"STARTSWITH\">\n          <field schema=\"default_search\" name=\"ecm_path\" />\n        </predicate>\n        <predicate parameter=\"ecm:tag\" operator=\"IN\">\n          <field schema=\"default_search\" name=\"ecm_tags\" />\n        </predicate>\n        <predicate parameter=\"collectionMember:collectionIds\"\n                   operator=\"IN\">\n          <field schema=\"default_search\" name=\"ecm_collections\" />\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"dc_nature_agg\" type=\"terms\" parameter=\"dc:nature\">\n          <field schema=\"default_search\" name=\"dc_nature_agg\" />\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"dc_subjects_agg\" type=\"terms\" parameter=\"dc:subjects\">\n          <field schema=\"default_search\" name=\"dc_subjects_agg\" />\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"dc_coverage_agg\" type=\"terms\" parameter=\"dc:coverage\">\n          <field schema=\"default_search\" name=\"dc_coverage_agg\" />\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"dc_creator_agg\" type=\"terms\" parameter=\"dc:creator\">\n          <field schema=\"default_search\" name=\"dc_creator_agg\" />\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"common_size_agg\" type=\"range\" parameter=\"file:content.length\">\n          <field schema=\"default_search\" name=\"common_size_agg\" />\n          <ranges>\n            <range key=\"tiny\" to=\"102400\"/>\n            <range key=\"small\" from=\"102401\" to=\"1048576\"/>\n            <range key=\"medium\" from=\"1048577\" to=\"10485760\"/>\n            <range key=\"big\" from=\"10485761\" to=\"104857600\" />\n            <range key=\"huge\" from=\"104857601\" />\n          </ranges>\n        </aggregate>\n        <aggregate id=\"dc_modified_agg\" type=\"date_range\" parameter=\"dc:modified\">\n          <field schema=\"default_search\" name=\"dc_modified_agg\" />\n          <properties>\n            <property name=\"format\">\"dd-MM-yyyy\"</property>\n          </properties>\n          <dateRanges>\n            <dateRange key=\"last24h\" fromDate=\"now-24H\" toDate=\"now\"/>\n            <dateRange key=\"lastWeek\" fromDate=\"now-7d\" toDate=\"now-24H\"/>\n            <dateRange key=\"lastMonth\" fromDate=\"now-1M\" toDate=\"now-7d\"/>\n            <dateRange key=\"lastYear\" fromDate=\"now-1y\" toDate=\"now-1M\"/>\n            <dateRange key=\"priorToLastYear\" toDate=\"now-1y\"/>\n          </dateRanges>\n        </aggregate>\n      </aggregates>\n      <quickFilters>\n        <quickFilter name=\"noFolder\">\n          <clause>ecm:mixinType != 'Folderish'</clause>\n        </quickFilter>\n        <quickFilter name=\"mostRecent\">\n          <sort column=\"dc:modified\" ascending=\"false\" />\n        </quickFilter>\n        <quickFilter name=\"onlyValidated\">\n          <clause>ecm:currentLifeCycleState = 'approved'</clause>\n          <sort column=\"dc:modified\" ascending=\"false\" />\n        </quickFilter>\n      </quickFilters>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"default_trash_search\">\n      <trackUsage>true</trackUsage>\n      <searchDocumentType>DefaultSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          ecm:primaryType NOT IN ('Domain', 'SectionRoot', 'TemplateRoot', 'WorkspaceRoot', 'Favorites')\n          AND ecm:mixinType != 'HiddenInNavigation'\n          AND NOT (ecm:mixinType = 'Collection' AND ecm:name = 'Locally Edited')\n          AND ecm:isCheckedInVersion = 0\n          AND ecm:isTrashed = 1\n          AND ecm:parentId IS NOT NULL\n          AND SORTED_COLUMN IS NOT NULL\n        </fixedPart>\n        <predicate parameter=\"ecm:fulltext\" operator=\"FULLTEXT\">\n          <field schema=\"default_search\" name=\"ecm_fulltext\" />\n        </predicate>\n        <predicate parameter=\"ecm:path\" operator=\"STARTSWITH\">\n          <field schema=\"default_search\" name=\"ecm_path\" />\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"dc_creator_agg\" type=\"terms\" parameter=\"dc:creator\">\n          <field schema=\"default_search\" name=\"dc_creator_agg\" />\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"common_size_agg\" type=\"range\" parameter=\"file:content.length\">\n          <field schema=\"default_search\" name=\"common_size_agg\" />\n          <ranges>\n            <range key=\"tiny\" to=\"102400\"/>\n            <range key=\"small\" from=\"102401\" to=\"1048576\"/>\n            <range key=\"medium\" from=\"1048577\" to=\"10485760\"/>\n            <range key=\"big\" from=\"10485761\" to=\"104857600\" />\n            <range key=\"huge\" from=\"104857601\" />\n          </ranges>\n        </aggregate>\n      </aggregates>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"simple_search\">\n      <trackUsage>true</trackUsage>\n      <searchDocumentType>DefaultSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          ecm:mixinType != 'HiddenInNavigation' AND\n          ecm:isVersion = 0\n          AND ecm:isTrashed = 0\n          AND ecm:parentId IS NOT NULL\n          AND SORTED_COLUMN IS NOT NULL\n        </fixedPart>\n        <predicate parameter=\"ecm:fulltext\" operator=\"FULLTEXT\">\n          <field schema=\"default_search\" name=\"ecm_fulltext\" />\n        </predicate>\n      </whereClause>\n      <!-- sort column=\"dc:title\" ascending=\"true\" / sort by fulltext relevance -->\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"nxql_search\">\n      <trackUsage>true</trackUsage>\n      <searchDocumentType>DefaultSearch</searchDocumentType>\n      <pattern quoteParameters=\"false\" escapeParameters=\"false\">?</pattern>\n      <!-- sort column=\"dc:title\" ascending=\"true\" / sort by fulltext relevance -->\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"expired_search\" class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\">\n      <trackUsage>true</trackUsage>\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <searchDocumentType>ExpiredSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          ecm:isVersion = 0 AND\n          ecm:mixinType !=\n          'HiddenInNavigation' AND ecm:isTrashed = 0\n        </fixedPart>\n        <predicate parameter=\"dc:title\" operator=\"FULLTEXT\">\n          <field schema=\"expired_search\" name=\"title\" />\n        </predicate>\n        <predicate parameter=\"dc:expired\" operator=\"&lt;\">\n          <field schema=\"expired_search\" name=\"expired_max\" />\n        </predicate>\n        <predicate parameter=\"dc:expired\" operator=\"&gt;\">\n          <field schema=\"expired_search\" name=\"expired_min\" />\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"dc_creator_agg\" type=\"terms\" parameter=\"dc:creator\">\n          <field schema=\"expired_search\" name=\"dc_creator_agg\" />\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"dc_expired_agg\" type=\"date_histogram\" parameter=\"dc:expired\">\n          <field schema=\"expired_search\" name=\"dc_expired_agg\" />\n          <properties>\n            <property name=\"interval\">month</property>\n            <property name=\"format\">MM-yyyy</property>\n            <property name=\"order\">key asc</property>\n          </properties>\n        </aggregate>\n      </aggregates>\n      <sort column=\"dc:expired\" ascending=\"true\" />\n      <pageSize>20</pageSize>\n      <quickFilters>\n        <quickFilter name=\"approved\">\n          <clause>ecm:currentLifeCycleState = 'approved'</clause>\n        </quickFilter>\n      </quickFilters>\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/search-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Core IO registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO registered marshallers set.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.marshallers/Contributions/org.nuxeo.ecm.platform.search.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.search.marshallers--marshallers",
              "registrationOrder": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.platform.search.core.SavedSearchRequestReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.search.core.SavedSearchWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.search.core.SavedSearchListReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.search.core.SavedSearchListWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.marshallers",
          "name": "org.nuxeo.ecm.platform.search.marshallers",
          "requirements": [],
          "resolutionOrder": 849,
          "services": [],
          "startOrder": 476,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.search.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    <register class=\"org.nuxeo.ecm.platform.search.core.SavedSearchRequestReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.search.core.SavedSearchWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.search.core.SavedSearchListReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.search.core.SavedSearchListWriter\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-search-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.search/org.nuxeo.ecm.platform.search.core",
      "id": "org.nuxeo.ecm.platform.search.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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Search Core\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.search.core;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/savedsearch-service.xml,OSGI-INF/savedsearch-c\r\n ore-types-contrib.xml,OSGI-INF/savedsearch-adapter-contrib.xml,OSGI-INF\r\n /savedsearch-pageprovider-contrib.xml,OSGI-INF/search-core-types-contri\r\n b.xml,OSGI-INF/search-ui-types-contrib.xml,OSGI-INF/search-pageprovider\r\n -contrib.xml,OSGI-INF/marshallers-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 849,
      "minResolutionOrder": 842,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-admin-center-analytics",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.admin.center.analytics.dashboards",
          "org.nuxeo.admin.center.jsf",
          "org.nuxeo.admin.center.monitoring",
          "org.nuxeo.admin.center.oauth.opensocial"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin",
        "id": "grp:org.nuxeo.admin",
        "name": "org.nuxeo.admin",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.admin.center.analytics.dashboards",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center.analytics.dashboards/org.nuxeo.admin.center.analytics.actions/Contributions/org.nuxeo.admin.center.analytics.actions--actions",
              "id": "org.nuxeo.admin.center.analytics.actions--actions",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action enabled=\"true\" id=\"RepositoryAnalytics\" label=\"tab.useractivity.repositoryAnalytics\" link=\"/analytics/repositoryAnalytics.xhtml\" order=\"40\" type=\"admin_rest_document_link\">\n      <category>UsersActivity_sub_tab</category>\n      <filter-id>only_for_manager</filter-id>\n      <properties>\n        <!-- disable ajax support to avoid multiple calls to document.registerElement -->\n        <property name=\"ajaxSupport\">false</property>\n      </properties>\n    </action>\n\n    <action enabled=\"true\" id=\"SearchAnalytics\" label=\"tab.useractivity.searchAnalytics\" link=\"/analytics/searchAnalytics.xhtml\" order=\"50\" type=\"admin_rest_document_link\">\n      <category>UsersActivity_sub_tab</category>\n      <filter-id>only_for_manager</filter-id>\n      <properties>\n        <!-- disable ajax support to avoid multiple calls to document.registerElement -->\n        <property name=\"ajaxSupport\">false</property>\n      </properties>\n    </action>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center.analytics.dashboards/org.nuxeo.admin.center.analytics.actions",
          "name": "org.nuxeo.admin.center.analytics.actions",
          "requirements": [],
          "resolutionOrder": 28,
          "services": [],
          "startOrder": 35,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.admin.center.analytics.actions\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\" point=\"actions\">\n\n    <action id=\"RepositoryAnalytics\" link=\"/analytics/repositoryAnalytics.xhtml\"\n            type=\"admin_rest_document_link\"\n            label=\"tab.useractivity.repositoryAnalytics\" order=\"40\"\n            enabled=\"${elasticsearch.enabled:=false}\">\n      <category>UsersActivity_sub_tab</category>\n      <filter-id>only_for_manager</filter-id>\n      <properties>\n        <!-- disable ajax support to avoid multiple calls to document.registerElement -->\n        <property name=\"ajaxSupport\">false</property>\n      </properties>\n    </action>\n\n    <action id=\"SearchAnalytics\" link=\"/analytics/searchAnalytics.xhtml\"\n            type=\"admin_rest_document_link\"\n            label=\"tab.useractivity.searchAnalytics\" order=\"50\"\n            enabled=\"${audit.elasticsearch.enabled:=false}\">\n      <category>UsersActivity_sub_tab</category>\n      <filter-id>only_for_manager</filter-id>\n      <properties>\n        <!-- disable ajax support to avoid multiple calls to document.registerElement -->\n        <property name=\"ajaxSupport\">false</property>\n      </properties>\n    </action>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-admin-center-analytics-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.admin/org.nuxeo.admin.center.analytics.dashboards",
      "id": "org.nuxeo.admin.center.analytics.dashboards",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Analytics Dashboards\r\nBundle-SymbolicName: org.nuxeo.admin.center.analytics.dashboards;singlet\r\n on:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/actions-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 28,
      "minResolutionOrder": 28,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-apidoc-repo",
      "artifactVersion": "2023.0.3",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.apidoc.core",
          "org.nuxeo.apidoc.repo",
          "org.nuxeo.apidoc.webengine"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc",
        "id": "grp:org.nuxeo.apidoc",
        "name": "org.nuxeo.apidoc",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# About Explorer\n\nThese modules provide an API to browse the Nuxeo distribution tree:\n\n    - BundleGroup (maven group or artificial grouping)\n      - Bundle\n        - Component\n          - Service\n          - Extension Points\n          - Contributions\n    - Operations\n    - Packages\n\nThe Nuxeo Distribution can be:\n\n- live: in memory (meaning runtime introspection)\n- persisted: saved in Nuxeo Repository as a tree of Documents\n\nThe following documentation items are also extracted:\n\n- documentation that is built-in Nuxeo Runtime descriptors\n- readme files that may be embedded inside the jar\n\n## What it can be used for\n\n- browse you distribution\n- check that a given contribution is deployed\n- play with Nuxeo Runtime\n\n## Configuration\n\nThe template `explorer-sitemode` enables the nuxeo.conf property `org.nuxeo.apidoc.site.mode` and\ndefines an anonymous user.\nThe property `org.nuxeo.apidoc.site.mode` comes with a more user friendly design and hides the current\n\"live\" distribution from display and API.\n\nThe template `explorer-virtualadmin` disables the usual `Administrator` user creation at database\ninitialization and adds a virtual admin user with name `apidocAdmin`, whose password can be changed using\nnuxeo.conf property `org.nuxeo.apidoc.apidocAdmin.password`.\n\nThe template `explorer-disable-validation` disables validation on documents: it is used as an optimization\nto speed up distributions imports, but should not be used on a Nuxeo instance not dedicated to the explorer\npackage usage.\n\n## Modules\n\nThis plugin is composed of 3 bundles:\n\n- nuxeo-apidoc-core: for the low level API on the live runtime\n- nuxeo-apidoc-repo: for the persistence of exported content on the Nuxeo repository\n- nuxeo-apidoc-webengine: for JAX-RS API and Webview\n",
            "digest": "a5a70df9144c861d8a679d1fccf67ef8",
            "encoding": "UTF-8",
            "length": 1761,
            "mimeType": "text/plain",
            "name": "ReadMe.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.apidoc.repo",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      These contributions provide document types that handle persistence of introspected distributions.\n    \n",
              "documentationHtml": "<p>\nThese contributions provide document types that handle persistence of introspected distributions.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.doctypeContrib/Contributions/org.nuxeo.apidoc.doctypeContrib--doctype",
              "id": "org.nuxeo.apidoc.doctypeContrib--doctype",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.0.3",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <documentation>\n      These contributions provide document types that handle persistence of introspected distributions.\n    </documentation>\n\n    <doctype extends=\"Document\" name=\"NXExplorerFolder\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Folderish\"/>\n      <facet name=\"Orderable\"/>\n    </doctype>\n\n    <doctype extends=\"NXExplorerFolder\" name=\"NXDistribution\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"file\"/>\n      <schema name=\"nxdistribution\"/>\n\n      <facet name=\"Commentable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Folderish\"/>\n\n      <subtypes>\n        <type>NXExplorerFolder</type>\n        <type>NXBundleGroup</type>\n        <type>NXBundle</type>\n        <type>NXOperation</type>\n        <type>NXPackage</type>\n      </subtypes>\n      <prefetch>dublincore</prefetch>\n    </doctype>\n\n    <doctype extends=\"NXExplorerFolder\" name=\"NXBundleGroup\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"file\"/>\n      <schema name=\"files\"/>\n      <schema name=\"nxbundlegroup\"/>\n\n      <facet name=\"Commentable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Folderish\"/>\n\n      <subtypes>\n        <type>NXBundleGroup</type>\n      </subtypes>\n      <prefetch/>\n    </doctype>\n\n\n    <doctype extends=\"NXExplorerFolder\" name=\"NXBundle\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"file\"/>\n      <schema name=\"nxbundle\"/>\n\n      <facet name=\"Commentable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Folderish\"/>\n      <subtypes>\n        <type>NXComponent</type>\n        <type>NXService</type>\n        <type>NXExtensionPoint</type>\n        <type>NXContribution</type>\n      </subtypes>\n      <prefetch/>\n    </doctype>\n\n    <doctype extends=\"NXExplorerFolder\" name=\"NXComponent\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"file\"/>\n      <schema name=\"nxcomponent\"/>\n\n      <facet name=\"Commentable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Folderish\"/>\n      <subtypes>\n        <type>NXService</type>\n        <type>NXExtensionPoint</type>\n        <type>NXContribution</type>\n      </subtypes>\n      <prefetch/>\n    </doctype>\n\n    <doctype extends=\"NXExplorerFolder\" name=\"NXExtensionPoint\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"file\"/>\n      <schema name=\"nxextensionpoint\"/>\n      <schema name=\"apidoccommon\"/>\n\n      <facet name=\"Commentable\"/>\n      <facet name=\"Versionable\"/>\n      <facet name=\"Folderish\"/>\n      <prefetch/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"NXContribution\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"file\"/>\n      <schema name=\"nxcontribution\"/>\n      <schema name=\"apidoccommon\"/>\n\n      <facet name=\"Commentable\"/>\n      <facet name=\"Versionable\"/>\n      <prefetch/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"NXService\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"file\"/>\n      <schema name=\"nxservice\"/>\n\n      <facet name=\"Commentable\"/>\n      <facet name=\"Versionable\"/>\n      <prefetch/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"NXOperation\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"file\"/>\n\n      <schema name=\"nxoperation\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"Versionable\"/>\n      <prefetch/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"NXPackage\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n\n      <schema name=\"nxpackage\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"Versionable\"/>\n      <prefetch/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.doctypeContrib",
          "name": "org.nuxeo.apidoc.doctypeContrib",
          "requirements": [],
          "resolutionOrder": 44,
          "services": [],
          "startOrder": 41,
          "version": "2023.0.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.apidoc.doctypeContrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <documentation>\n      These contributions provide document types that handle persistence of introspected distributions.\n    </documentation>\n\n    <doctype name=\"NXExplorerFolder\" extends=\"Document\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Folderish\"/>\n      <facet name=\"Orderable\"/>\n    </doctype>\n\n    <doctype name=\"NXDistribution\" extends=\"NXExplorerFolder\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"file\" />\n      <schema name=\"nxdistribution\" />\n\n      <facet name=\"Commentable\" />\n      <facet name=\"Versionable\" />\n      <facet name=\"Folderish\" />\n\n      <subtypes>\n        <type>NXExplorerFolder</type>\n        <type>NXBundleGroup</type>\n        <type>NXBundle</type>\n        <type>NXOperation</type>\n        <type>NXPackage</type>\n      </subtypes>\n      <prefetch>dublincore</prefetch>\n    </doctype>\n\n    <doctype name=\"NXBundleGroup\" extends=\"NXExplorerFolder\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"file\" />\n      <schema name=\"files\" />\n      <schema name=\"nxbundlegroup\" />\n\n      <facet name=\"Commentable\" />\n      <facet name=\"Versionable\" />\n      <facet name=\"Folderish\" />\n\n      <subtypes>\n        <type>NXBundleGroup</type>\n      </subtypes>\n      <prefetch></prefetch>\n    </doctype>\n\n\n    <doctype name=\"NXBundle\" extends=\"NXExplorerFolder\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"file\" />\n      <schema name=\"nxbundle\" />\n\n      <facet name=\"Commentable\" />\n      <facet name=\"Versionable\" />\n      <facet name=\"Folderish\" />\n      <subtypes>\n        <type>NXComponent</type>\n        <type>NXService</type>\n        <type>NXExtensionPoint</type>\n        <type>NXContribution</type>\n      </subtypes>\n      <prefetch></prefetch>\n    </doctype>\n\n    <doctype name=\"NXComponent\" extends=\"NXExplorerFolder\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"file\" />\n      <schema name=\"nxcomponent\" />\n\n      <facet name=\"Commentable\" />\n      <facet name=\"Versionable\" />\n      <facet name=\"Folderish\" />\n      <subtypes>\n        <type>NXService</type>\n        <type>NXExtensionPoint</type>\n        <type>NXContribution</type>\n      </subtypes>\n      <prefetch></prefetch>\n    </doctype>\n\n    <doctype name=\"NXExtensionPoint\" extends=\"NXExplorerFolder\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"file\" />\n      <schema name=\"nxextensionpoint\" />\n      <schema name=\"apidoccommon\" />\n\n      <facet name=\"Commentable\" />\n      <facet name=\"Versionable\" />\n      <facet name=\"Folderish\" />\n      <prefetch></prefetch>\n    </doctype>\n\n    <doctype name=\"NXContribution\" extends=\"Document\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"file\" />\n      <schema name=\"nxcontribution\" />\n      <schema name=\"apidoccommon\" />\n\n      <facet name=\"Commentable\" />\n      <facet name=\"Versionable\" />\n      <prefetch></prefetch>\n    </doctype>\n\n    <doctype name=\"NXService\" extends=\"Document\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"file\" />\n      <schema name=\"nxservice\" />\n\n      <facet name=\"Commentable\" />\n      <facet name=\"Versionable\" />\n      <prefetch></prefetch>\n    </doctype>\n\n    <doctype name=\"NXOperation\" extends=\"Document\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"file\" />\n\n      <schema name=\"nxoperation\" />\n      <facet name=\"Commentable\" />\n      <facet name=\"Versionable\" />\n      <prefetch></prefetch>\n    </doctype>\n\n    <doctype name=\"NXPackage\" extends=\"Document\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n\n      <schema name=\"nxpackage\" />\n      <facet name=\"Commentable\" />\n      <facet name=\"Versionable\" />\n      <prefetch></prefetch>\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/doctype-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.lifecycle.contrib/Contributions/org.nuxeo.apidoc.lifecycle.contrib--lifecycle",
              "id": "org.nuxeo.apidoc.lifecycle.contrib--lifecycle",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.0.3",
              "xml": "<extension point=\"lifecycle\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n    <lifecycle defaultInitial=\"project\" name=\"explorer_default\">\n      <transitions>\n        <transition destinationState=\"approved\" name=\"approve\">\n          <description>Approve the content</description>\n        </transition>\n        <transition destinationState=\"obsolete\" name=\"obsolete\">\n          <description>Content becomes obsolete</description>\n        </transition>\n        <transition destinationState=\"deleted\" name=\"delete\">\n          <description>Move document to trash (temporary delete)</description>\n        </transition>\n        <transition destinationState=\"project\" name=\"undelete\">\n          <description>Recover the document from trash</description>\n        </transition>\n        <transition destinationState=\"project\" name=\"backToProject\">\n          <description>Recover the document from trash</description>\n        </transition>\n      </transitions>\n      <states>\n        <state description=\"Default state\" initial=\"true\" name=\"project\">\n          <transitions>\n            <transition>approve</transition>\n            <transition>obsolete</transition>\n            <transition>delete</transition>\n          </transitions>\n        </state>\n        <state description=\"Content has been validated\" name=\"approved\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state description=\"Content is obsolete\" name=\"obsolete\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state description=\"Document is deleted\" name=\"deleted\">\n          <transitions>\n            <transition>undelete</transition>\n          </transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.lifecycle.contrib/Contributions/org.nuxeo.apidoc.lifecycle.contrib--types",
              "id": "org.nuxeo.apidoc.lifecycle.contrib--types",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2023.0.3",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"NXExplorerFolder\">explorer_default</type>\n      <type name=\"NXDistribution\">explorer_default</type>\n      <type name=\"NXBundleGroup\">explorer_default</type>\n      <type name=\"NXBundle\">explorer_default</type>\n      <type name=\"NXComponent\">explorer_default</type>\n      <type name=\"NXService\">explorer_default</type>\n      <type name=\"NXExtensionPoint\">explorer_default</type>\n      <type name=\"NXContribution\">explorer_default</type>\n      <type name=\"NXOperation\">explorer_default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.lifecycle.contrib",
          "name": "org.nuxeo.apidoc.lifecycle.contrib",
          "requirements": [],
          "resolutionOrder": 45,
          "services": [],
          "startOrder": 42,
          "version": "2023.0.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.apidoc.lifecycle.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"lifecycle\">\n\n    <lifecycle name=\"explorer_default\" defaultInitial=\"project\">\n      <transitions>\n        <transition name=\"approve\" destinationState=\"approved\">\n          <description>Approve the content</description>\n        </transition>\n        <transition name=\"obsolete\" destinationState=\"obsolete\">\n          <description>Content becomes obsolete</description>\n        </transition>\n        <transition name=\"delete\" destinationState=\"deleted\">\n          <description>Move document to trash (temporary delete)</description>\n        </transition>\n        <transition name=\"undelete\" destinationState=\"project\">\n          <description>Recover the document from trash</description>\n        </transition>\n        <transition name=\"backToProject\" destinationState=\"project\">\n          <description>Recover the document from trash</description>\n        </transition>\n      </transitions>\n      <states>\n        <state name=\"project\" description=\"Default state\" initial=\"true\">\n          <transitions>\n            <transition>approve</transition>\n            <transition>obsolete</transition>\n            <transition>delete</transition>\n          </transitions>\n        </state>\n        <state name=\"approved\" description=\"Content has been validated\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state name=\"obsolete\" description=\"Content is obsolete\">\n          <transitions>\n            <transition>delete</transition>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state name=\"deleted\" description=\"Document is deleted\">\n          <transitions>\n            <transition>undelete</transition>\n          </transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" point=\"types\">\n    <types>\n      <type name=\"NXExplorerFolder\">explorer_default</type>\n      <type name=\"NXDistribution\">explorer_default</type>\n      <type name=\"NXBundleGroup\">explorer_default</type>\n      <type name=\"NXBundle\">explorer_default</type>\n      <type name=\"NXComponent\">explorer_default</type>\n      <type name=\"NXService\">explorer_default</type>\n      <type name=\"NXExtensionPoint\">explorer_default</type>\n      <type name=\"NXContribution\">explorer_default</type>\n      <type name=\"NXOperation\">explorer_default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/life-cycle-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent",
          "declaredStartOrder": null,
          "documentation": "<p>\n      This component handles the introspection of the current live Runtime as a distribution.\n    </p>\n<p>\n      It can also persist this introspection as Nuxeo documents, to handle import and export of external distributions.\n    </p>\n",
          "documentationHtml": "<p>\n</p><p>\nThis component handles the introspection of the current live Runtime as a distribution.\n</p>\n<p>\nIt can also persist this introspection as Nuxeo documents, to handle import and export of external distributions.\n</p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent",
              "descriptors": [
                "org.nuxeo.apidoc.plugin.PluginDescriptor"
              ],
              "documentation": "<p>\n        A plugin can introspect and persist information related to the current runtime environment.\n      </p>\n<p>\n        Sample contribution:\n        <code>\n        <extension point=\"plugins\" target=\"org.nuxeo.apidoc.snapshot.SnapshotManagerComponent\">\n            <plugin class=\"org.nuxeo.apidoc.seam.plugin.SeamPlugin\"\n                id=\"seam\" snapshotClass=\"org.nuxeo.apidoc.seam.introspection.SeamRuntimeSnapshot\">\n                <ui>\n                    <label>Seam Components</label>\n                    <viewType>seam</viewType>\n                    <homeView>listSeamComponents</homeView>\n                    <styleClass>seam</styleClass>\n                </ui>\n            </plugin>\n        </extension>\n    </code>\n</p>\n<p>\n        The class should implement the\n        <b>org.nuxeo.apidoc.plugin.Plugin</b>\n        interface.\n      </p>\n<p>\n        UI elements are used for rendering on webengine pages. The view type should match a webengine resource type,\n        and\n        the module holding this resource should be contributed to the main webengine module as a fragment using:\n        <code>\n          Fragment-Host: org.nuxeo.apidoc.webengine\n        </code>\n</p>\n",
              "documentationHtml": "<p>\n</p><p>\nA plugin can introspect and persist information related to the current runtime environment.\n</p>\n<p>\nSample contribution:\n</p><p></p><pre><code>        &lt;extension point&#61;&#34;plugins&#34; target&#61;&#34;org.nuxeo.apidoc.snapshot.SnapshotManagerComponent&#34;&gt;\n            &lt;plugin class&#61;&#34;org.nuxeo.apidoc.seam.plugin.SeamPlugin&#34;\n                id&#61;&#34;seam&#34; snapshotClass&#61;&#34;org.nuxeo.apidoc.seam.introspection.SeamRuntimeSnapshot&#34;&gt;\n                &lt;ui&gt;\n                    &lt;label&gt;Seam Components&lt;/label&gt;\n                    &lt;viewType&gt;seam&lt;/viewType&gt;\n                    &lt;homeView&gt;listSeamComponents&lt;/homeView&gt;\n                    &lt;styleClass&gt;seam&lt;/styleClass&gt;\n                &lt;/ui&gt;\n            &lt;/plugin&gt;\n        &lt;/extension&gt;\n</code></pre><p>\n</p>\n<p>\nThe class should implement the\n<b>org.nuxeo.apidoc.plugin.Plugin</b>\ninterface.\n</p>\n<p>\nUI elements are used for rendering on webengine pages. The view type should match a webengine resource type,\nand\nthe module holding this resource should be contributed to the main webengine module as a fragment using:\n</p><p></p><pre><code>          Fragment-Host: org.nuxeo.apidoc.webengine\n</code></pre><p>\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent/ExtensionPoints/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--plugins",
              "id": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--plugins",
              "label": "plugins (org.nuxeo.apidoc.snapshot.SnapshotManagerComponent)",
              "name": "plugins",
              "version": "2023.0.3"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent",
              "descriptors": [
                "org.nuxeo.apidoc.export.api.ExporterDescriptor"
              ],
              "documentation": "\n      Extension point for pluggable export generation.\n    \n",
              "documentationHtml": "<p>\nExtension point for pluggable export generation.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent/ExtensionPoints/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--exporters",
              "id": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--exporters",
              "label": "exporters (org.nuxeo.apidoc.snapshot.SnapshotManagerComponent)",
              "name": "exporters",
              "version": "2023.0.3"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--exporters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent/Contributions/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--exporters",
              "id": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--exporters",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.apidoc.snapshot.SnapshotManagerComponent",
                "name": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent",
                "type": "service"
              },
              "version": "2023.0.3",
              "xml": "<extension point=\"exporters\" target=\"org.nuxeo.apidoc.snapshot.SnapshotManagerComponent\">\n    <exporter class=\"org.nuxeo.apidoc.export.graphs.plugins.JsonGraphExporter\" id=\"jsonGraph\">\n      <title>Json Graph</title>\n      <description>Json dependency graph</description>\n      <filename>graph.json</filename>\n      <mimetype>application/json</mimetype>\n      <display>\n        <on>home</on>\n        <on>bundle</on>\n        <on>package</on>\n      </display>\n    </exporter>\n    <exporter class=\"org.nuxeo.apidoc.export.stats.JsonContributionStatsExporter\" id=\"jsonContributionStats\">\n      <title>Json Contribution Stats</title>\n      <description>Json statistics for contributions</description>\n      <filename>contribution_stats.json</filename>\n      <mimetype>application/json</mimetype>\n      <display>\n        <on>home</on>\n        <on>bundle</on>\n        <on>package</on>\n        <on>chart</on>\n      </display>\n      <properties>\n        <property name=\"scriptingCodeType\">\n          org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--operation\n        </property>\n        <property name=\"javaCodeType\">\n          org.nuxeo.ecm.core.operation.OperationServiceComponent--operations,\n          org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--exporters\n        </property>\n      </properties>\n    </exporter>\n    <exporter class=\"org.nuxeo.apidoc.export.stats.CSVContributionStatsExporter\" id=\"csvContributionStats\">\n      <title>CSV Contribution Stats</title>\n      <description>CSV statistics for contributions</description>\n      <filename>contribution_stats.csv</filename>\n      <mimetype>text/csv</mimetype>\n      <display>\n        <on>home</on>\n        <on>bundle</on>\n        <on>package</on>\n      </display>\n      <properties>\n        <property name=\"scriptingCodeType\">\n          org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--operation\n        </property>\n        <property name=\"javaCodeType\">\n          org.nuxeo.ecm.core.operation.OperationServiceComponent--operations,\n          org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--exporters\n        </property>\n      </properties>\n    </exporter>\n    <exporter class=\"org.nuxeo.apidoc.export.graphs.plugins.DOTGraphExporter\" id=\"dotGraph\">\n      <title>DOT Graph</title>\n      <description>Dependency graph exported in DOT format</description>\n      <filename>graph.dot</filename>\n      <mimetype>application/octet-stream</mimetype>\n      <display>\n        <on>home</on>\n      </display>\n    </exporter>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      URL base for Javadoc Links.\n    \n",
              "documentationHtml": "<p>\nURL base for Javadoc Links.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent/Contributions/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--configuration",
              "id": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--configuration",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.0.3",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      URL base for Javadoc Links.\n    </documentation>\n    <property name=\"org.nuxeo.apidoc.javadoc.url\">\n      https://community.nuxeo.com/api/\n    </property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      URL base for Connect Links (for Marketplace Packages).\n    \n",
              "documentationHtml": "<p>\nURL base for Connect Links (for Marketplace Packages).\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent/Contributions/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--configuration1",
              "id": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--configuration1",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.0.3",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      URL base for Connect Links (for Marketplace Packages).\n    </documentation>\n    <property name=\"org.nuxeo.apidoc.connect.url\">\n      https://connect.nuxeo.com/nuxeo/site/\n    </property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Default groups for application managers and readers.\n    \n",
              "documentationHtml": "<p>\nDefault groups for application managers and readers.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent/Contributions/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--configuration2",
              "id": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--configuration2",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.0.3",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Default groups for application managers and readers.\n    </documentation>\n    <property name=\"org.nuxeo.apidoc.apidocmanagers.group\">\n      ApidocManagers\n    </property>\n    <property name=\"org.nuxeo.apidoc.apidocreaders.group\">\n      Everyone\n    </property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Properties controlling sensitive configuration exposure, when extracted from runtime contributions by\n      explorer logics.\n\n      @since 20.0.0\n    \n",
              "documentationHtml": "<p>\nProperties controlling sensitive configuration exposure, when extracted from runtime contributions by\nexplorer logics.\n</p><p>\n&#64;since 20.0.0\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent/Contributions/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--configuration3",
              "id": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--configuration3",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.0.3",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Properties controlling sensitive configuration exposure, when extracted from runtime contributions by\n      explorer logics.\n\n      @since 20.0.0\n    </documentation>\n    <property name=\"org.nuxeo.apidoc.secure.xml.keywords\">\n      password, Password, secret, apiKey, TMPDIR, TMP, TEMP, TEMPDIR\n    </property>\n    <property name=\"org.nuxeo.apidoc.secure.xml.keywords.whitelisted\">\n      passwordField, passwordHashAlgorithm\n    </property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent",
          "name": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent",
          "requirements": [],
          "resolutionOrder": 46,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent/Services/org.nuxeo.apidoc.snapshot.SnapshotManager",
              "id": "org.nuxeo.apidoc.snapshot.SnapshotManager",
              "overriden": false,
              "version": "2023.0.3"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent/Services/org.nuxeo.apidoc.snapshot.SnapshotListener",
              "id": "org.nuxeo.apidoc.snapshot.SnapshotListener",
              "overriden": false,
              "version": "2023.0.3"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.apidoc.snapshot.SnapshotManagerComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.snapshot.SnapshotManagerComponent/Services/org.nuxeo.apidoc.search.ArtifactSearcher",
              "id": "org.nuxeo.apidoc.search.ArtifactSearcher",
              "overriden": false,
              "version": "2023.0.3"
            }
          ],
          "startOrder": 777,
          "version": "2023.0.3",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.apidoc.snapshot.SnapshotManagerComponent\">\n  <documentation>\n    <p>\n      This component handles the introspection of the current live Runtime as a distribution.\n    </p>\n    <p>\n      It can also persist this introspection as Nuxeo documents, to handle import and export of external distributions.\n    </p>\n  </documentation>\n  <implementation class=\"org.nuxeo.apidoc.snapshot.SnapshotManagerComponent\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.apidoc.snapshot.SnapshotManager\"/>\n    <provide interface=\"org.nuxeo.apidoc.snapshot.SnapshotListener\"/>\n    <provide interface=\"org.nuxeo.apidoc.search.ArtifactSearcher\"/>\n  </service>\n\n  <extension-point name=\"plugins\">\n    <documentation>\n      <p>\n        A plugin can introspect and persist information related to the current runtime environment.\n      </p>\n      <p>\n        Sample contribution:\n        <code>\n          <extension target=\"org.nuxeo.apidoc.snapshot.SnapshotManagerComponent\" point=\"plugins\">\n            <plugin id=\"seam\" class=\"org.nuxeo.apidoc.seam.plugin.SeamPlugin\" snapshotClass=\"org.nuxeo.apidoc.seam.introspection.SeamRuntimeSnapshot\">\n              <ui>\n                <label>Seam Components</label>\n                <viewType>seam</viewType>\n                <homeView>listSeamComponents</homeView>\n                <styleClass>seam</styleClass>\n              </ui>\n            </plugin>\n          </extension>\n        </code>\n      </p>\n      <p>\n        The class should implement the\n        <b>org.nuxeo.apidoc.plugin.Plugin</b>\n        interface.\n      </p>\n      <p>\n        UI elements are used for rendering on webengine pages. The view type should match a webengine resource type,\n        and\n        the module holding this resource should be contributed to the main webengine module as a fragment using:\n        <code>\n          Fragment-Host: org.nuxeo.apidoc.webengine\n        </code>\n      </p>\n    </documentation>\n    <object class=\"org.nuxeo.apidoc.plugin.PluginDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"exporters\">\n    <documentation>\n      Extension point for pluggable export generation.\n    </documentation>\n    <object class=\"org.nuxeo.apidoc.export.api.ExporterDescriptor\"/>\n  </extension-point>\n\n  <extension target=\"org.nuxeo.apidoc.snapshot.SnapshotManagerComponent\" point=\"exporters\">\n    <exporter id=\"jsonGraph\" class=\"org.nuxeo.apidoc.export.graphs.plugins.JsonGraphExporter\">\n      <title>Json Graph</title>\n      <description>Json dependency graph</description>\n      <filename>graph.json</filename>\n      <mimetype>application/json</mimetype>\n      <display>\n        <on>home</on>\n        <on>bundle</on>\n        <on>package</on>\n      </display>\n    </exporter>\n    <exporter id=\"jsonContributionStats\" class=\"org.nuxeo.apidoc.export.stats.JsonContributionStatsExporter\">\n      <title>Json Contribution Stats</title>\n      <description>Json statistics for contributions</description>\n      <filename>contribution_stats.json</filename>\n      <mimetype>application/json</mimetype>\n      <display>\n        <on>home</on>\n        <on>bundle</on>\n        <on>package</on>\n        <on>chart</on>\n      </display>\n      <properties>\n        <property name=\"scriptingCodeType\">\n          org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--operation\n        </property>\n        <property name=\"javaCodeType\">\n          org.nuxeo.ecm.core.operation.OperationServiceComponent--operations,\n          org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--exporters\n        </property>\n      </properties>\n    </exporter>\n    <exporter id=\"csvContributionStats\" class=\"org.nuxeo.apidoc.export.stats.CSVContributionStatsExporter\">\n      <title>CSV Contribution Stats</title>\n      <description>CSV statistics for contributions</description>\n      <filename>contribution_stats.csv</filename>\n      <mimetype>text/csv</mimetype>\n      <display>\n        <on>home</on>\n        <on>bundle</on>\n        <on>package</on>\n      </display>\n      <properties>\n        <property name=\"scriptingCodeType\">\n          org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--operation\n        </property>\n        <property name=\"javaCodeType\">\n          org.nuxeo.ecm.core.operation.OperationServiceComponent--operations,\n          org.nuxeo.apidoc.snapshot.SnapshotManagerComponent--exporters\n        </property>\n      </properties>\n    </exporter>\n    <exporter id=\"dotGraph\" class=\"org.nuxeo.apidoc.export.graphs.plugins.DOTGraphExporter\">\n      <title>DOT Graph</title>\n      <description>Dependency graph exported in DOT format</description>\n      <filename>graph.dot</filename>\n      <mimetype>application/octet-stream</mimetype>\n      <display>\n        <on>home</on>\n      </display>\n    </exporter>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      URL base for Javadoc Links.\n    </documentation>\n    <property name=\"org.nuxeo.apidoc.javadoc.url\">\n      https://community.nuxeo.com/api/\n    </property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      URL base for Connect Links (for Marketplace Packages).\n    </documentation>\n    <property name=\"org.nuxeo.apidoc.connect.url\">\n      https://connect.nuxeo.com/nuxeo/site/\n    </property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Default groups for application managers and readers.\n    </documentation>\n    <property name=\"org.nuxeo.apidoc.apidocmanagers.group\">\n      ApidocManagers\n    </property>\n    <property name=\"org.nuxeo.apidoc.apidocreaders.group\">\n      Everyone\n    </property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Properties controlling sensitive configuration exposure, when extracted from runtime contributions by\n      explorer logics.\n\n      @since 20.0.0\n    </documentation>\n    <property name=\"org.nuxeo.apidoc.secure.xml.keywords\">\n      password, Password, secret, apiKey, TMPDIR, TMP, TEMP, TEMPDIR\n    </property>\n    <property name=\"org.nuxeo.apidoc.secure.xml.keywords.whitelisted\">\n      passwordField, passwordHashAlgorithm\n    </property>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/snapshot-service-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      These contributions provide a mapping between live introspections and persisted representations of a\n      distribution.\n    \n",
              "documentationHtml": "<p>\nThese contributions provide a mapping between live introspections and persisted representations of a\ndistribution.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.adapterContrib/Contributions/org.nuxeo.apidoc.adapterContrib--adapters",
              "id": "org.nuxeo.apidoc.adapterContrib--adapters",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2023.0.3",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <documentation>\n      These contributions provide a mapping between live introspections and persisted representations of a\n      distribution.\n    </documentation>\n\n    <adapter class=\"org.nuxeo.apidoc.api.BundleGroup\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXBundleGroup\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.BundleInfo\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXBundle\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.ComponentInfo\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXComponent\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.ExtensionPointInfo\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXExtensionPoint\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.ExtensionInfo\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXContribution\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.ServiceInfo\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXService\"/>\n    <adapter class=\"org.nuxeo.apidoc.snapshot.DistributionSnapshot\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXDistribution\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.OperationInfo\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXOperation\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.PackageInfo\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXPackage\"/>\n\n    <adapter class=\"org.nuxeo.apidoc.api.NuxeoArtifact\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXBundleGroup\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.NuxeoArtifact\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXBundle\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.NuxeoArtifact\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXComponent\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.NuxeoArtifact\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXExtensionPoint\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.NuxeoArtifact\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXContribution\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.NuxeoArtifact\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXService\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.NuxeoArtifact\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXOperation\"/>\n    <adapter class=\"org.nuxeo.apidoc.api.NuxeoArtifact\" factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" type=\"NXPackage\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.adapterContrib",
          "name": "org.nuxeo.apidoc.adapterContrib",
          "requirements": [],
          "resolutionOrder": 47,
          "services": [],
          "startOrder": 40,
          "version": "2023.0.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.apidoc.adapterContrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\" point=\"adapters\">\n    <documentation>\n      These contributions provide a mapping between live introspections and persisted representations of a\n      distribution.\n    </documentation>\n\n    <adapter type=\"NXBundleGroup\" class=\"org.nuxeo.apidoc.api.BundleGroup\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXBundle\" class=\"org.nuxeo.apidoc.api.BundleInfo\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXComponent\" class=\"org.nuxeo.apidoc.api.ComponentInfo\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXExtensionPoint\" class=\"org.nuxeo.apidoc.api.ExtensionPointInfo\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXContribution\" class=\"org.nuxeo.apidoc.api.ExtensionInfo\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXService\" class=\"org.nuxeo.apidoc.api.ServiceInfo\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXDistribution\" class=\"org.nuxeo.apidoc.snapshot.DistributionSnapshot\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXOperation\" class=\"org.nuxeo.apidoc.api.OperationInfo\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXPackage\" class=\"org.nuxeo.apidoc.api.PackageInfo\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n\n    <adapter type=\"NXBundleGroup\" class=\"org.nuxeo.apidoc.api.NuxeoArtifact\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXBundle\" class=\"org.nuxeo.apidoc.api.NuxeoArtifact\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXComponent\" class=\"org.nuxeo.apidoc.api.NuxeoArtifact\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXExtensionPoint\" class=\"org.nuxeo.apidoc.api.NuxeoArtifact\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXContribution\" class=\"org.nuxeo.apidoc.api.NuxeoArtifact\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXService\" class=\"org.nuxeo.apidoc.api.NuxeoArtifact\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXOperation\" class=\"org.nuxeo.apidoc.api.NuxeoArtifact\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n    <adapter type=\"NXPackage\" class=\"org.nuxeo.apidoc.api.NuxeoArtifact\"\n      factory=\"org.nuxeo.apidoc.adapters.AdapterFactory\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      These contributions are used for latest distribution flag update and XML attributes extractions in\n      extension points.\n    \n",
              "documentationHtml": "<p>\nThese contributions are used for latest distribution flag update and XML attributes extractions in\nextension points.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.listener.contrib/Contributions/org.nuxeo.apidoc.listener.contrib--listener",
              "id": "org.nuxeo.apidoc.listener.contrib--listener",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.0.3",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <documentation>\n      These contributions are used for latest distribution flag update and XML attributes extractions in\n      extension points.\n    </documentation>\n\n    <listener async=\"false\" class=\"org.nuxeo.apidoc.listener.LatestDistributionsListener\" name=\"latestDistributionsListener\" postCommit=\"false\">\n      <documentation>\n        Updates latest distribution flag.\n      </documentation>\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n\n    <listener async=\"false\" class=\"org.nuxeo.apidoc.listener.AttributesExtractorStater\" name=\"AttributesExtractorStater\" postCommit=\"false\">\n      <documentation>\n        Listener in charge of triggering AttributesExtractorScheduler.\n      </documentation>\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n\n    <listener async=\"false\" class=\"org.nuxeo.apidoc.listener.AttributesExtractorScheduler\" name=\"AttributesExtractorScheduler\" postCommit=\"false\" priority=\"20\">\n      <description>\n        Schedules a work for XML attributes extraction.\n      </description>\n      <event>documentCreated</event>\n      <event>documentModified</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.listener.contrib",
          "name": "org.nuxeo.apidoc.listener.contrib",
          "requirements": [],
          "resolutionOrder": 48,
          "services": [],
          "startOrder": 43,
          "version": "2023.0.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.apidoc.listener.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <documentation>\n      These contributions are used for latest distribution flag update and XML attributes extractions in\n      extension points.\n    </documentation>\n\n    <listener name=\"latestDistributionsListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.apidoc.listener.LatestDistributionsListener\">\n      <documentation>\n        Updates latest distribution flag.\n      </documentation>\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n\n    <listener name=\"AttributesExtractorStater\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.apidoc.listener.AttributesExtractorStater\">\n      <documentation>\n        Listener in charge of triggering AttributesExtractorScheduler.\n      </documentation>\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n\n    <listener name=\"AttributesExtractorScheduler\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.apidoc.listener.AttributesExtractorScheduler\" priority=\"20\">\n      <description>\n        Schedules a work for XML attributes extraction.\n      </description>\n      <event>documentCreated</event>\n      <event>documentModified</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.schemaContrib/Contributions/org.nuxeo.apidoc.schemaContrib--schema",
              "id": "org.nuxeo.apidoc.schemaContrib--schema",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.0.3",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <schema name=\"nxbundle\" prefix=\"nxbundle\" src=\"schemas/nxbundle.xsd\"/>\n    <schema name=\"nxbundlegroup\" prefix=\"nxbundlegroup\" src=\"schemas/nxbundlegroup.xsd\"/>\n    <schema name=\"nxcomponent\" prefix=\"nxcomponent\" src=\"schemas/nxcomponent.xsd\"/>\n    <schema name=\"nxcontribution\" prefix=\"nxcontribution\" src=\"schemas/nxcontribution.xsd\"/>\n    <schema name=\"nxdistribution\" prefix=\"nxdistribution\" src=\"schemas/nxdistribution.xsd\"/>\n    <schema name=\"nxextensionpoint\" prefix=\"nxextensionpoint\" src=\"schemas/nxextensionpoint.xsd\"/>\n    <schema name=\"nxservice\" prefix=\"nxservice\" src=\"schemas/nxservice.xsd\"/>\n    <schema name=\"nxoperation\" prefix=\"nxop\" src=\"schemas/nxoperation.xsd\"/>\n    <schema name=\"nxpackage\" prefix=\"nxpackage\" src=\"schemas/nxpackage.xsd\"/>\n    <schema name=\"apidoccommon\" prefix=\"adc\" src=\"schemas/apidoccommon.xsd\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo/org.nuxeo.apidoc.schemaContrib",
          "name": "org.nuxeo.apidoc.schemaContrib",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 85,
          "services": [],
          "startOrder": 44,
          "version": "2023.0.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.apidoc.schemaContrib\">\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n\n    <schema name=\"nxbundle\" src=\"schemas/nxbundle.xsd\" prefix=\"nxbundle\" />\n    <schema name=\"nxbundlegroup\" src=\"schemas/nxbundlegroup.xsd\" prefix=\"nxbundlegroup\" />\n    <schema name=\"nxcomponent\" src=\"schemas/nxcomponent.xsd\" prefix=\"nxcomponent\" />\n    <schema name=\"nxcontribution\" src=\"schemas/nxcontribution.xsd\" prefix=\"nxcontribution\" />\n    <schema name=\"nxdistribution\" src=\"schemas/nxdistribution.xsd\" prefix=\"nxdistribution\" />\n    <schema name=\"nxextensionpoint\" src=\"schemas/nxextensionpoint.xsd\" prefix=\"nxextensionpoint\" />\n    <schema name=\"nxservice\" src=\"schemas/nxservice.xsd\" prefix=\"nxservice\" />\n    <schema name=\"nxoperation\" src=\"schemas/nxoperation.xsd\" prefix=\"nxop\" />\n    <schema name=\"nxpackage\" src=\"schemas/nxpackage.xsd\" prefix=\"nxpackage\" />\n    <schema name=\"apidoccommon\" src=\"schemas/apidoccommon.xsd\" prefix=\"adc\" />\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/schema-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-apidoc-repo-2023.0.3.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.repo",
      "id": "org.nuxeo.apidoc.repo",
      "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: 1\r\nBundle-Version: 0.0.1\r\nBundle-Name: nuxeo api documentation repository\r\nBundle-SymbolicName: org.nuxeo.apidoc.repo;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/schema-contrib.xml, OSGI-INF/doctype-contrib.x\r\n ml, OSGI-INF/life-cycle-contrib.xml, OSGI-INF/snapshot-service-framewor\r\n k.xml, OSGI-INF/adapter-contrib.xml, OSGI-INF/listener-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 85,
      "minResolutionOrder": 44,
      "packages": [
        "platform-explorer"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "# About Explorer\n\nThese modules provide an API to browse the Nuxeo distribution tree:\n\n    - BundleGroup (maven group or artificial grouping)\n      - Bundle\n        - Component\n          - Service\n          - Extension Points\n          - Contributions\n    - Operations\n    - Packages\n\nThe Nuxeo Distribution can be:\n\n- live: in memory (meaning runtime introspection)\n- persisted: saved in Nuxeo Repository as a tree of Documents\n\nThe following documentation items are also extracted:\n\n- documentation that is built-in Nuxeo Runtime descriptors\n- readme files that may be embedded inside the jar\n\n## What it can be used for\n\n- browse you distribution\n- check that a given contribution is deployed\n- play with Nuxeo Runtime\n\n## Configuration\n\nThe template `explorer-sitemode` enables the nuxeo.conf property `org.nuxeo.apidoc.site.mode` and\ndefines an anonymous user.\nThe property `org.nuxeo.apidoc.site.mode` comes with a more user friendly design and hides the current\n\"live\" distribution from display and API.\n\nThe template `explorer-virtualadmin` disables the usual `Administrator` user creation at database\ninitialization and adds a virtual admin user with name `apidocAdmin`, whose password can be changed using\nnuxeo.conf property `org.nuxeo.apidoc.apidocAdmin.password`.\n\nThe template `explorer-disable-validation` disables validation on documents: it is used as an optimization\nto speed up distributions imports, but should not be used on a Nuxeo instance not dedicated to the explorer\npackage usage.\n\n## Modules\n\nThis plugin is composed of 3 bundles:\n\n- nuxeo-apidoc-core: for the low level API on the live runtime\n- nuxeo-apidoc-repo: for the persistence of exported content on the Nuxeo repository\n- nuxeo-apidoc-webengine: for JAX-RS API and Webview\n",
        "digest": "a5a70df9144c861d8a679d1fccf67ef8",
        "encoding": "UTF-8",
        "length": 1761,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2023.0.3"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-task-automation",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.task.api",
          "org.nuxeo.ecm.platform.task.automation",
          "org.nuxeo.ecm.platform.task.core",
          "org.nuxeo.ecm.platform.task.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task",
        "id": "grp:org.nuxeo.ecm.platform.task",
        "name": "org.nuxeo.ecm.platform.task",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.task.automation",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.automation/org.nuxeo.ecm.automation.task.contrib/Contributions/org.nuxeo.ecm.automation.task.contrib--operations",
              "id": "org.nuxeo.ecm.automation.task.contrib--operations",
              "registrationOrder": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.automation.task.CreateTask\"/>\n    <operation class=\"org.nuxeo.ecm.automation.task.GetUserTasks\"/>\n    <operation class=\"org.nuxeo.ecm.automation.task.UserTaskPageProviderOperation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.automation/org.nuxeo.ecm.automation.task.contrib/Contributions/org.nuxeo.ecm.automation.task.contrib--listener",
              "id": "org.nuxeo.ecm.automation.task.contrib--listener",
              "registrationOrder": 37,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"false\" class=\"org.nuxeo.ecm.automation.task.event.TaskEndedEventListener\" name=\"automationTaskListener\" postCommit=\"false\" priority=\"200\">\n      <event>workflowTaskCompleted</event>\n      <event>workflowTaskRejected</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.automation/org.nuxeo.ecm.automation.task.contrib",
          "name": "org.nuxeo.ecm.automation.task.contrib",
          "requirements": [],
          "resolutionOrder": 518,
          "services": [],
          "startOrder": 95,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.automation.task.contrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n    <operation class=\"org.nuxeo.ecm.automation.task.CreateTask\" />\n    <operation class=\"org.nuxeo.ecm.automation.task.GetUserTasks\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.task.UserTaskPageProviderOperation\" />\n  </extension>\n\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"automationTaskListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.automation.task.event.TaskEndedEventListener\"\n      priority=\"200\">\n      <event>workflowTaskCompleted</event>\n      <event>workflowTaskRejected</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.automation/org.nuxeo.ecm.automation.task.pageprovider.contrib/Contributions/org.nuxeo.ecm.automation.task.pageprovider.contrib--providers",
              "id": "org.nuxeo.ecm.automation.task.pageprovider.contrib--providers",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.task.providers.UserTaskPageProvider\" name=\"user_tasks\">\n      <property name=\"locale\">#{localeSelector.localeString}</property>\n      <pageSize>20</pageSize>\n      <sort ascending=\"true\" column=\"nt:dueDate\"/>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.automation/org.nuxeo.ecm.automation.task.pageprovider.contrib",
          "name": "org.nuxeo.ecm.automation.task.pageprovider.contrib",
          "requirements": [],
          "resolutionOrder": 519,
          "services": [],
          "startOrder": 96,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.automation.task.pageprovider.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <genericPageProvider name=\"user_tasks\"\n      class=\"org.nuxeo.ecm.platform.task.providers.UserTaskPageProvider\">\n      <property name=\"locale\">#{localeSelector.localeString}</property>\n      <pageSize>20</pageSize>\n      <sort ascending=\"true\" column=\"nt:dueDate\"/>\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageproviders-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-task-automation-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.automation",
      "id": "org.nuxeo.ecm.platform.task.automation",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240130-105248\r\nBundle-Name: Nuxeo ECM task Automation\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.task.automation;singleton:=t\r\n rue\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/operations-contrib.xml,OSGI-INF/pageproviders-\r\n contrib.xml\r\nRequire-Bundle: org.nuxeo.ecm.core.api, org.nuxeo.ecm.platform.task.api,\r\n  org.nuxeo.ecm.automation.core\r\n\r\n",
      "maxResolutionOrder": 519,
      "minResolutionOrder": 518,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.platform.task.api",
        "org.nuxeo.ecm.automation.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-suggestbox-jsf",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.suggestbox.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox",
        "id": "grp:org.nuxeo.ecm.platform.suggestbox",
        "name": "org.nuxeo.ecm.platform.suggestbox",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.suggestbox.jsf",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Disable the default simple search from Nuxeo and adds a\n      suggestion search box instead.\n    \n",
              "documentationHtml": "<p>\nDisable the default simple search from Nuxeo and adds a\nsuggestion search box instead.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.jsf/org.nuxeo.ecm.platform.suggestbox.actions/Contributions/org.nuxeo.ecm.platform.suggestbox.actions--actions",
              "id": "org.nuxeo.ecm.platform.suggestbox.actions--actions",
              "registrationOrder": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <documentation>\n      Disable the default simple search from Nuxeo and adds a\n      suggestion search box instead.\n    </documentation>\n\n    <!-- disable suggest box for now, see NXP-15081 -->\n    <action enabled=\"false\" id=\"simple_search_box\"/>\n\n    <action id=\"suggest_search_box\" order=\"1\" type=\"template\">\n      <category>SEARCH_ACTIONS</category>\n      <filter-id>isSearchEnabled</filter-id>\n      <properties>\n        <property name=\"template\">/search/suggestbox.xhtml</property>\n        <property name=\"disableMultipartForm\">true</property>\n        <property name=\"minChars\">1</property>\n        <property name=\"multiple\">false</property>\n        <property name=\"operationId\">Search.SuggestersLauncher</property>\n        <property name=\"placeholder\">label.suggestion.placeholder</property>\n        <property name=\"readonly\">false</property>\n        <property name=\"selectionFormatter\">nuxeo.suggestbox.selectedFormatter</property>\n        <property name=\"suggestionFormatter\">nuxeo.suggestbox.suggestedFormatter</property>\n        <property name=\"onAddEntryHandler\">nuxeo.suggestbox.entryHandler</property>\n        <property name=\"autocomplete\">true</property>\n        <property name=\"dropdownCssClass\">nx-header-s2-dd</property>\n        <property name=\"containerCssClass\">nx-header-s2-ct</property>\n        <property name=\"width\">300px</property>\n        <property name=\"translatePlaceholder\">true</property>\n        <property name=\"onEnterKeyHandler\">nxSuggestHandleEnterKey</property>\n      </properties>\n    </action>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.jsf/org.nuxeo.ecm.platform.suggestbox.actions",
          "name": "org.nuxeo.ecm.platform.suggestbox.actions",
          "requirements": [
            "org.nuxeo.ecm.platform.actions"
          ],
          "resolutionOrder": 666,
          "services": [],
          "startOrder": 482,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.suggestbox.actions\">\n\n  <require>org.nuxeo.ecm.platform.actions</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <documentation>\n      Disable the default simple search from Nuxeo and adds a\n      suggestion search box instead.\n    </documentation>\n\n    <!-- disable suggest box for now, see NXP-15081 -->\n    <action id=\"simple_search_box\" enabled=\"false\" />\n\n    <action id=\"suggest_search_box\" order=\"1\" type=\"template\">\n      <category>SEARCH_ACTIONS</category>\n      <filter-id>isSearchEnabled</filter-id>\n      <properties>\n        <property name=\"template\">/search/suggestbox.xhtml</property>\n        <property name=\"disableMultipartForm\">true</property>\n        <property name=\"minChars\">1</property>\n        <property name=\"multiple\">false</property>\n        <property name=\"operationId\">Search.SuggestersLauncher</property>\n        <property name=\"placeholder\">label.suggestion.placeholder</property>\n        <property name=\"readonly\">false</property>\n        <property name=\"selectionFormatter\">nuxeo.suggestbox.selectedFormatter</property>\n        <property name=\"suggestionFormatter\">nuxeo.suggestbox.suggestedFormatter</property>\n        <property name=\"onAddEntryHandler\">nuxeo.suggestbox.entryHandler</property>\n        <property name=\"autocomplete\">true</property>\n        <property name=\"dropdownCssClass\">nx-header-s2-dd</property>\n        <property name=\"containerCssClass\">nx-header-s2-ct</property>\n        <property name=\"width\">300px</property>\n        <property name=\"translatePlaceholder\">true</property>\n        <property name=\"onEnterKeyHandler\">nxSuggestHandleEnterKey</property>\n      </properties>\n    </action>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/suggestbox-actions-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-suggestbox-jsf-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.suggestbox/org.nuxeo.ecm.platform.suggestbox.jsf",
      "id": "org.nuxeo.ecm.platform.suggestbox.jsf",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: Nuxeo Platform Suggestbox JSF\r\nNuxeo-Component: OSGI-INF/suggestbox-actions-contrib.xml\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.suggestbox.jsf;singleton:=tr\r\n ue\r\n\r\n",
      "maxResolutionOrder": 666,
      "minResolutionOrder": 666,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-ui-select2",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.ui",
          "org.nuxeo.ecm.platform.ui.select2",
          "org.nuxeo.ecm.platform.uidgen.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui",
        "id": "grp:org.nuxeo.ecm.platform.ui",
        "name": "org.nuxeo.ecm.platform.ui",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.ui.select2",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.LayoutStore--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2/org.nuxeo.ecm.platform.ui.select2.widgettype.contrib/Contributions/org.nuxeo.ecm.platform.ui.select2.widgettype.contrib--widgets",
              "id": "org.nuxeo.ecm.platform.ui.select2.widgettype.contrib--widgets",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "name": "org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\">\n\n    <widget name=\"select2_idProperty\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Id Property</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the Document property that should be\n          used to\n          define the ID of entry.\n          If unset Document.uid will be\n          used, otherwise\n          Document.properties['idProperty'].\n        </label>\n      </helpLabels>\n      <fields>\n        <field>idProperty</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_idFunction\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Id Function</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the JavaScript function that will be called by\n          select2 to get the id from\n          the suggested objects. The target function should\n          take as input the\n          javascript object as returned by Automation and should\n          return the id to be\n          submitted. Use the \"Inline Javascript\" property field\n          to define your own\n          function.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>idFunction</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_labelProperty\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Label Property</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the Document property that should be\n          used to\n          define the Label of entry.\n          If unset Document.title\n          will be used,\n          otherwise\n          Document.properties['labelProperty'].\n        </label>\n      </helpLabels>\n      <fields>\n        <field>labelProperty</field>\n      </fields>\n    </widget>\n\n\n    <widget name=\"select2_operationId\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Operation Id</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          ID of the Automation Operation that will be\n          used to\n          fetch the suggestions.\n          If unset,\n          Repository.PageProvider (or Document.PageProvider for Nuxeo Platform 6.0) will be used.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>operationId</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_initOperationId\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Init Operation Id</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          ID of the Automation Operation that will be\n          used to\n          fetch the initial Document from the stored value..\n          If unsed, simple uid\n          resolution will be used.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>initOperationId</field>\n      </fields>\n    </widget>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2/org.nuxeo.ecm.platform.ui.select2.widgettype.contrib/Contributions/org.nuxeo.ecm.platform.ui.select2.widgettype.contrib--widgettypes",
              "id": "org.nuxeo.ecm.platform.ui.select2.widgettype.contrib--widgettypes",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"select2Widget\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Single generic suggestion (advanced)</title>\n        <description>\n          <p>Document Suggestion Widget based on Select2 JS library. Nuxeo\n            Automation is used to manage Select2 data binding.\n          </p>\n        </description>\n        <categories>\n          <category>dev</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"select2_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_operationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_initOperationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">\n                    documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idFunction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_labelProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"select2_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_query</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_queryDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderPageSize\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_operationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_initOperationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idFunction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_labelProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_additionalParam</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownOnArrow</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/select2_widget_template.xhtml\n      </property>\n    </widgetType>\n\n\n    <widgetType name=\"select2WidgetMultiple\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Multiple generic suggestion (advanced)</title>\n        <description>\n          <p>Multiple Document Suggestion Widget based on Select2 JS library.\n            Nuxeo\n            Automation is used to manage Select2 data binding.\n          </p>\n        </description>\n        <categories>\n          <category>dev</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"select2Multiple_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_operationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_initOperationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">\n                    documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idFunction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_labelProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"select2Multiple_widget_type_properties_edit\">\n              <rows>\n              <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_closeOnSelect</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_query</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_queryDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderPageSize\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_operationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_initOperationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idFunction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_labelProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_additionalParam</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_separator</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/select2_multiple_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2/org.nuxeo.ecm.platform.ui.select2.widgettype.contrib",
          "name": "org.nuxeo.ecm.platform.ui.select2.widgettype.contrib",
          "requirements": [],
          "resolutionOrder": 533,
          "services": [],
          "startOrder": 527,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.select2.widgettype.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n    point=\"widgets\">\n\n    <widget name=\"select2_idProperty\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Id Property</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the Document property that should be\n          used to\n          define the ID of entry.\n          If unset Document.uid will be\n          used, otherwise\n          Document.properties['idProperty'].\n        </label>\n      </helpLabels>\n      <fields>\n        <field>idProperty</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_idFunction\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Id Function</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the JavaScript function that will be called by\n          select2 to get the id from\n          the suggested objects. The target function should\n          take as input the\n          javascript object as returned by Automation and should\n          return the id to be\n          submitted. Use the \"Inline Javascript\" property field\n          to define your own\n          function.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>idFunction</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_labelProperty\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Label Property</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          Name of the Document property that should be\n          used to\n          define the Label of entry.\n          If unset Document.title\n          will be used,\n          otherwise\n          Document.properties['labelProperty'].\n        </label>\n      </helpLabels>\n      <fields>\n        <field>labelProperty</field>\n      </fields>\n    </widget>\n\n\n    <widget name=\"select2_operationId\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Operation Id</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          ID of the Automation Operation that will be\n          used to\n          fetch the suggestions.\n          If unset,\n          Repository.PageProvider (or Document.PageProvider for Nuxeo Platform 6.0) will be used.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>operationId</field>\n      </fields>\n    </widget>\n\n    <widget name=\"select2_initOperationId\" type=\"text\">\n      <categories>\n        <category>widgetTypeConf</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">Init Operation Id</label>\n      </labels>\n      <helpLabels>\n        <label mode=\"any\">\n          ID of the Automation Operation that will be\n          used to\n          fetch the initial Document from the stored value..\n          If unsed, simple uid\n          resolution will be used.\n        </label>\n      </helpLabels>\n      <fields>\n        <field>initOperationId</field>\n      </fields>\n    </widget>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\"\n    point=\"widgettypes\">\n\n    <widgetType name=\"select2Widget\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Single generic suggestion (advanced)</title>\n        <description>\n          <p>Document Suggestion Widget based on Select2 JS library. Nuxeo\n            Automation is used to manage Select2 data binding.\n          </p>\n        </description>\n        <categories>\n          <category>dev</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>false</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"select2_widget_type_properties_view\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_operationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_initOperationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">\n                    documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idFunction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_labelProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"select2_widget_type_properties_edit\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_query</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_queryDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderPageSize\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_operationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_initOperationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idFunction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_labelProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_additionalParam</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownOnArrow</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/select2_widget_template.xhtml\n      </property>\n    </widgetType>\n\n\n    <widgetType name=\"select2WidgetMultiple\">\n      <configuration>\n        <sinceVersion>5.7.3</sinceVersion>\n        <title>Multiple generic suggestion (advanced)</title>\n        <description>\n          <p>Multiple Document Suggestion Widget based on Select2 JS library.\n            Nuxeo\n            Automation is used to manage Select2 data binding.\n          </p>\n        </description>\n        <categories>\n          <category>dev</category>\n        </categories>\n        <supportedModes>\n          <mode>view</mode>\n          <mode>edit</mode>\n        </supportedModes>\n        <fields>\n          <list>true</list>\n          <complex>false</complex>\n          <supportedTypes>\n            <type>string</type>\n          </supportedTypes>\n        </fields>\n        <properties>\n          <layouts mode=\"view\">\n            <layout name=\"select2Multiple_widget_type_properties_any\">\n              <rows>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_operationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_initOperationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">\n                    documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idFunction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_labelProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n          <layouts mode=\"edit\">\n            <layout name=\"select2Multiple_widget_type_properties_edit\">\n              <rows>\n              <row>\n                  <widget category=\"widgetTypeConf\">required</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">placeholder</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_width</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_orderable</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_frequency</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_closeOnSelect</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_minChars</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_query</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_queryDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderName\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_pageProviderPageSize\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_repository</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">documentSuggestion_documentSchemas\n                  </widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_helpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">suggestion_hideHelpLabel</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_operationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_initOperationId</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_idFunction</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_labelProperty</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">ajaxReRender</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_containerCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_dropdownCssClass</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejs</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_inlinejsDemoPreview</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_selectionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_suggestionFormatter</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_additionalParam</widget>\n                </row>\n                <row>\n                  <widget category=\"widgetTypeConf\">select2_separator</widget>\n                </row>\n              </rows>\n            </layout>\n          </layouts>\n        </properties>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">\n        /widgets/select2_multiple_widget_template.xhtml\n      </property>\n    </widgetType>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/widgettypes-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2/org.nuxeo.ecm.platform.ui.select2.actions/Contributions/org.nuxeo.ecm.platform.ui.select2.actions--actions",
              "id": "org.nuxeo.ecm.platform.ui.select2.actions--actions",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"addEntryFromSuggestDirectoryWidget\" label=\"label.directorySuggestion.addNewEntry\" type=\"template\">\n      <properties>\n        <property name=\"template\">\n          /incl/action/suggest_add_new_directory_entry_action.xhtml\n        </property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2/org.nuxeo.ecm.platform.ui.select2.actions/Contributions/org.nuxeo.ecm.platform.ui.select2.actions--filters",
              "id": "org.nuxeo.ecm.platform.ui.select2.actions--filters",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"canAddEntryFromSuggestDirectoryWidget\">\n      <documentation>\n        <p>\n          Filter used by the \"suggestOneDirectory\" and \"suggestManyDirectory\"\n          widget types to check wether the \"Add new entry\" button should be\n          displayed.\n        </p>\n        <p>\n          This filter is a combination of default filters controlling access to\n          the \"Vocabularies\" tab in Admin Center and read-only configuration set\n          on the directory.\n        </p>\n        <p>\n          This filter is evaluated in a context where the variable\n          'directoryName' is set to the currently selected directory name.\n        </p>\n        @since 5.9.1\n      </documentation>\n      <rule grant=\"true\">\n        <condition>currentUser.administrator</condition>\n        <condition>currentUser.isMemberOf('powerusers')</condition>\n      </rule>\n      <rule grant=\"false\">\n        <condition>#{directoryUIActions.isReadOnly(directoryName)}</condition>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2/org.nuxeo.ecm.platform.ui.select2.actions",
          "name": "org.nuxeo.ecm.platform.ui.select2.actions",
          "requirements": [],
          "resolutionOrder": 534,
          "services": [],
          "startOrder": 525,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.select2.actions\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"addEntryFromSuggestDirectoryWidget\" type=\"template\"\n      label=\"label.directorySuggestion.addNewEntry\">\n      <properties>\n        <property name=\"template\">\n          /incl/action/suggest_add_new_directory_entry_action.xhtml\n        </property>\n        <property name=\"ajaxSupport\">true</property>\n      </properties>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"canAddEntryFromSuggestDirectoryWidget\">\n      <documentation>\n        <p>\n          Filter used by the \"suggestOneDirectory\" and \"suggestManyDirectory\"\n          widget types to check wether the \"Add new entry\" button should be\n          displayed.\n        </p>\n        <p>\n          This filter is a combination of default filters controlling access to\n          the \"Vocabularies\" tab in Admin Center and read-only configuration set\n          on the directory.\n        </p>\n        <p>\n          This filter is evaluated in a context where the variable\n          'directoryName' is set to the currently selected directory name.\n        </p>\n        @since 5.9.1\n      </documentation>\n      <rule grant=\"true\">\n        <condition>currentUser.administrator</condition>\n        <condition>currentUser.isMemberOf('powerusers')</condition>\n      </rule>\n      <rule grant=\"false\">\n        <condition>#{directoryUIActions.isReadOnly(directoryName)}</condition>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that allows displaying emails in user suggestion\n      widgets. This parameter replace the nuxeo-email-suggestion addon provided\n      in Nuxeo 5.5 and 5.6.\n    \n",
              "documentationHtml": "<p>\nProperty that allows displaying emails in user suggestion\nwidgets. This parameter replace the nuxeo-email-suggestion addon provided\nin Nuxeo 5.5 and 5.6.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2/org.nuxeo.ecm.platform.select2.properties/Contributions/org.nuxeo.ecm.platform.select2.properties--configuration",
              "id": "org.nuxeo.ecm.platform.select2.properties--configuration",
              "registrationOrder": 40,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that allows displaying emails in user suggestion\n      widgets. This parameter replace the nuxeo-email-suggestion addon provided\n      in Nuxeo 5.5 and 5.6.\n    </documentation>\n    <property name=\"nuxeo.ui.displayEmailInUserSuggestion\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2/org.nuxeo.ecm.platform.select2.properties",
          "name": "org.nuxeo.ecm.platform.select2.properties",
          "requirements": [],
          "resolutionOrder": 535,
          "services": [],
          "startOrder": 479,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.select2.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that allows displaying emails in user suggestion\n      widgets. This parameter replace the nuxeo-email-suggestion addon provided\n      in Nuxeo 5.5 and 5.6.\n    </documentation>\n    <property name=\"nuxeo.ui.displayEmailInUserSuggestion\">false</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/select2-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2/org.nuxeo.ecm.platform.ui.select2.theme.contrib/Contributions/org.nuxeo.ecm.platform.ui.select2.theme.contrib--resources",
              "id": "org.nuxeo.ecm.platform.ui.select2.theme.contrib--resources",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <resource name=\"select2.css\">\n      <uri>/css/select2.css</uri>\n    </resource>\n    <resource name=\"nuxeo-select2.scss\" type=\"css\">\n      <path>themes/sass/nuxeo-select2.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n\n    <resource name=\"nuxeo-select2.js\" type=\"jsfjs\">\n      <uri>org.nuxeo.select2:nuxeo-select2.min.js</uri>\n      <require>select2.js</require>\n    </resource>\n    <resource name=\"nuxeo-select2-init.js\" type=\"jsfjs\">\n      <uri>org.nuxeo.select2:nuxeo-select2-init.min.js</uri>\n      <require>nuxeo-select2.js</require>\n    </resource>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--bundles",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2/org.nuxeo.ecm.platform.ui.select2.theme.contrib/Contributions/org.nuxeo.ecm.platform.ui.select2.theme.contrib--bundles",
              "id": "org.nuxeo.ecm.platform.ui.select2.theme.contrib--bundles",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"bundles\" target=\"org.nuxeo.ecm.platform.WebResources\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>select2.css</resource>\n        <resource>nuxeo-select2.scss</resource>\n        <resource>nuxeo-select2.js</resource>\n        <resource>nuxeo-select2-init.js</resource>\n      </resources>\n    </bundle>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2/org.nuxeo.ecm.platform.ui.select2.theme.contrib",
          "name": "org.nuxeo.ecm.platform.ui.select2.theme.contrib",
          "requirements": [
            "org.nuxeo.theme.nuxeo.webapp"
          ],
          "resolutionOrder": 657,
          "services": [],
          "startOrder": 526,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.select2.theme.contrib\">\n\n  <require>org.nuxeo.theme.nuxeo.webapp</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\n    <resource name=\"select2.css\">\n      <uri>/css/select2.css</uri>\n    </resource>\n    <resource name=\"nuxeo-select2.scss\" type=\"css\">\n      <path>themes/sass/nuxeo-select2.scss</path>\n      <processors>\n        <processor>sassCss</processor>\n      </processors>\n    </resource>\n\n    <resource name=\"nuxeo-select2.js\" type=\"jsfjs\">\n      <uri>org.nuxeo.select2:nuxeo-select2.min.js</uri>\n      <require>select2.js</require>\n    </resource>\n    <resource name=\"nuxeo-select2-init.js\" type=\"jsfjs\">\n      <uri>org.nuxeo.select2:nuxeo-select2-init.min.js</uri>\n      <require>nuxeo-select2.js</require>\n    </resource>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"bundles\">\n    <bundle name=\"nuxeo_includes\">\n      <resources append=\"true\">\n        <resource>select2.css</resource>\n        <resource>nuxeo-select2.scss</resource>\n        <resource>nuxeo-select2.js</resource>\n        <resource>nuxeo-select2-init.js</resource>\n      </resources>\n    </bundle>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/theme-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-ui-select2-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.ui/org.nuxeo.ecm.platform.ui.select2",
      "id": "org.nuxeo.ecm.platform.ui.select2",
      "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: 0.0.0.SNAPSHOT\r\nBundle-Vendor: Nuxeo\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo ECM Select2 Integration\r\nNuxeo-Component: OSGI-INF/widgettypes-contrib.xml,OSGI-INF/theme-contrib\r\n .xml,OSGI-INF/actions-contrib.xml,OSGI-INF/select2-properties.xml\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.ui.select2;singleton:=true\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\n\r\n",
      "maxResolutionOrder": 657,
      "minResolutionOrder": 533,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-importer-jaxrs",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.importer.core",
          "org.nuxeo.ecm.platform.importer.jaxrs"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer",
        "id": "grp:org.nuxeo.ecm.platform.importer",
        "name": "org.nuxeo.ecm.platform.importer",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Platform Importer\n\n## About Nuxeo Platform Importer\n\nThe file importer comes as a Java library (with nuxeo runtime service) and a sample JAX-RS interface to launch, monitor and abort import jobs.\nThis project is an on-going project, supported by Nuxeo\n\n## Building\n### How to Build Nuxeo Platform Importer\nBuild the Nuxeo Platform Importer with Maven:\n```$ mvn install -Dmaven.test.skip=true```\n\n## Deploying\nNuxeo Platform Importer is available as two package add-ons [from the Nuxeo Marketplace]\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-platform-importer\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-scan-importer\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Platform Importer is available in our Documentation Center: http://doc.nuxeo.com/x/gYBVAQ\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Nuxeo Platform Importer component:\nhttps://jira.nuxeo.com/browse/NXP/component/10621\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "83bb2a4c6415c9f07db3ab17fa99510c",
            "encoding": "UTF-8",
            "length": 1753,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.importer.jaxrs",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent--importerConfiguration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer/org.nuxeo.ecm.platform.importer.jaxrs/org.nuxeo.ecm.platform.importer.service.jaxrs.contrib/Contributions/org.nuxeo.ecm.platform.importer.service.jaxrs.contrib--importerConfiguration",
              "id": "org.nuxeo.ecm.platform.importer.service.jaxrs.contrib--importerConfiguration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent",
                "name": "org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"importerConfiguration\" target=\"org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent\">\n   <importerConfig sourceNodeClass=\"org.nuxeo.ecm.platform.importer.source.FileWithMetadataSourceNode\">\n       <documentModelFactory documentModelFactoryClass=\"org.nuxeo.ecm.platform.importer.factories.DefaultDocumentModelFactory\" folderishType=\"Folder\" leafType=\"File\"/>\n       <enablePerfLogging>true</enablePerfLogging>\n   </importerConfig>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer/org.nuxeo.ecm.platform.importer.jaxrs/org.nuxeo.ecm.platform.importer.service.jaxrs.contrib",
          "name": "org.nuxeo.ecm.platform.importer.service.jaxrs.contrib",
          "requirements": [],
          "resolutionOrder": 216,
          "services": [],
          "startOrder": 338,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.importer.service.jaxrs.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.importer.service.DefaultImporterComponent\" point=\"importerConfiguration\">\n   <importerConfig sourceNodeClass =\"org.nuxeo.ecm.platform.importer.source.FileWithMetadataSourceNode\" >\n       <documentModelFactory leafType=\"File\" folderishType=\"Folder\" documentModelFactoryClass=\"org.nuxeo.ecm.platform.importer.factories.DefaultDocumentModelFactory\" />\n       <enablePerfLogging>true</enablePerfLogging>\n   </importerConfig>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/importer-service-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-importer-jaxrs-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer/org.nuxeo.ecm.platform.importer.jaxrs",
      "id": "org.nuxeo.ecm.platform.importer.jaxrs",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM JAXRS Importer\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.importer.jaxrs;singleton:=tr\r\n ue\r\nRequire-Bundle: org.nuxeo.ecm.webengine.core\r\nNuxeo-WebModule: org.nuxeo.ecm.platform.importer.executor.jaxrs.Importer\r\n App\r\nNuxeo-Component: OSGI-INF/importer-service-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 216,
      "minResolutionOrder": 216,
      "packages": [
        "nuxeo-platform-importer"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Platform Importer\n\n## About Nuxeo Platform Importer\n\nThe file importer comes as a Java library (with nuxeo runtime service) and a sample JAX-RS interface to launch, monitor and abort import jobs.\nThis project is an on-going project, supported by Nuxeo\n\n## Building\n### How to Build Nuxeo Platform Importer\nBuild the Nuxeo Platform Importer with Maven:\n```$ mvn install -Dmaven.test.skip=true```\n\n## Deploying\nNuxeo Platform Importer is available as two package add-ons [from the Nuxeo Marketplace]\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-platform-importer\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-scan-importer\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Platform Importer is available in our Documentation Center: http://doc.nuxeo.com/x/gYBVAQ\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Nuxeo Platform Importer component:\nhttps://jira.nuxeo.com/browse/NXP/component/10621\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "83bb2a4c6415c9f07db3ab17fa99510c",
        "encoding": "UTF-8",
        "length": 1753,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.webengine.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-publisher-web",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.publisher.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher",
        "id": "grp:org.nuxeo.ecm.platform.publisher",
        "name": "org.nuxeo.ecm.platform.publisher",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.publisher.web",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Configuration for the Nuxeo EP tree used in Manage publication tab.\n\n      Displays only Folderish objects, not marked as hidden in navigation\n    \n",
              "documentationHtml": "<p>\nConfiguration for the Nuxeo EP tree used in Manage publication tab.\n</p><p>\nDisplays only Folderish objects, not marked as hidden in navigation\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.treeManager--plugin",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.web/org.nuxeo.ecm.platform.publisher.treeManager.contrib/Contributions/org.nuxeo.ecm.platform.publisher.treeManager.contrib--plugin",
              "id": "org.nuxeo.ecm.platform.publisher.treeManager.contrib--plugin",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.treeManager",
                "name": "org.nuxeo.ecm.platform.treeManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"plugin\" target=\"org.nuxeo.ecm.platform.treeManager\">\n\n    <documentation>\n      Configuration for the Nuxeo EP tree used in Manage publication tab.\n\n      Displays only Folderish objects, not marked as hidden in navigation\n    </documentation>\n\n    <treeManagerPlugin name=\"publication\">\n      <excludedFacets>\n        <facet name=\"HiddenInNavigation\"/>\n      </excludedFacets>\n      <includedFacets>\n        <facet name=\"Folderish\"/>\n      </includedFacets>\n    </treeManagerPlugin>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.web/org.nuxeo.ecm.platform.publisher.treeManager.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.treeManager.contrib",
          "requirements": [],
          "resolutionOrder": 459,
          "services": [],
          "startOrder": 412,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.publisher.treeManager.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.treeManager\" point=\"plugin\">\n\n    <documentation>\n      Configuration for the Nuxeo EP tree used in Manage publication tab.\n\n      Displays only Folderish objects, not marked as hidden in navigation\n    </documentation>\n\n    <treeManagerPlugin name=\"publication\">\n      <excludedFacets>\n        <facet name=\"HiddenInNavigation\" />\n      </excludedFacets>\n      <includedFacets>\n        <facet name=\"Folderish\" />\n      </includedFacets>\n    </treeManagerPlugin>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxtreemanager-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.web/org.nuxeo.ecm.platform.publisher.web.actions/Contributions/org.nuxeo.ecm.platform.publisher.web.actions--actions",
              "id": "org.nuxeo.ecm.platform.publisher.web.actions--actions",
              "registrationOrder": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action icon=\"\" id=\"CURRENT_SELECTION_UNPUBLISH\" label=\"command.document.unpublish\" link=\"#{publishActions.unpublishDocumentsFromCurrentSelection}\">\n      <category>CURRENT_SELECTION_SECTIONS_LIST</category>\n      <filter id=\"can_unpublish\">\n        <rule grant=\"true\">\n          <permission>AddChildren</permission>\n          <facet>PublishSpace</facet>\n          <condition>#{documentActions.canUnpublish}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/action_publish.gif\" id=\"WORKLIST_PUBLISH\" label=\"command.clipboard.publish\" link=\"#{publishActions.publishWorkList()}\">\n      <category>DEFAULT_LIST</category>\n      <filter id=\"canPublishWorkList\">\n        <rule grant=\"false\">\n          <condition>#{clipboardActions.workListEmpty}</condition>\n        </rule>\n        <rule grant=\"true\">\n          <facet>PublishSpace</facet>\n          <permission>CanAskForPublishing</permission>\n        </rule>\n      </filter>\n    </action>\n\n    <action icon=\"/icons/file.gif\" id=\"TAB_PUBLISH\" label=\"action.publish.content\" link=\"/incl/tabs/document_publish.xhtml\" order=\"53\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>publish_document</filter-id>\n      <filter-id>mutable_document</filter-id>\n    </action>\n\n    <action icon=\"/icons/file.gif\" id=\"TAB_ADMIN_PUBLICATION_TREES\" label=\"action.admin.publication.tree\" link=\"/incl/tabs/admin_publication_trees.xhtml\" order=\"110\" type=\"rest_document_link\">\n      <category>TAB_MANAGE_sub_tab</category>\n      <filter-id>admin_publication_trees_filter</filter-id>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.web/org.nuxeo.ecm.platform.publisher.web.actions/Contributions/org.nuxeo.ecm.platform.publisher.web.actions--filters",
              "id": "org.nuxeo.ecm.platform.publisher.web.actions--filters",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"publish_document\">\n      <rule grant=\"true\">\n        <facet>Publishable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"admin_publication_trees_filter\">\n      <rule grant=\"true\">\n        <permission>Write</permission>\n        <schema>publishing</schema>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.web/org.nuxeo.ecm.platform.publisher.web.actions",
          "name": "org.nuxeo.ecm.platform.publisher.web.actions",
          "requirements": [
            "org.nuxeo.ecm.platform.actions"
          ],
          "resolutionOrder": 668,
          "services": [],
          "startOrder": 414,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.publisher.web.actions\">\n\n  <!-- make sure action buttons are always in the same order -->\n  <require>org.nuxeo.ecm.platform.actions</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"CURRENT_SELECTION_UNPUBLISH\" link=\"#{publishActions.unpublishDocumentsFromCurrentSelection}\"\n      label=\"command.document.unpublish\" icon=\"\">\n      <category>CURRENT_SELECTION_SECTIONS_LIST</category>\n      <filter id=\"can_unpublish\">\n        <rule grant=\"true\">\n          <permission>AddChildren</permission>\n          <facet>PublishSpace</facet>\n          <condition>#{documentActions.canUnpublish}</condition>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"WORKLIST_PUBLISH\" link=\"#{publishActions.publishWorkList()}\"\n      label=\"command.clipboard.publish\" icon=\"/icons/action_publish.gif\">\n      <category>DEFAULT_LIST</category>\n      <filter id=\"canPublishWorkList\">\n        <rule grant=\"false\">\n          <condition>#{clipboardActions.workListEmpty}</condition>\n        </rule>\n        <rule grant=\"true\">\n          <facet>PublishSpace</facet>\n          <permission>CanAskForPublishing</permission>\n        </rule>\n      </filter>\n    </action>\n\n    <action id=\"TAB_PUBLISH\" link=\"/incl/tabs/document_publish.xhtml\"\n      order=\"53\" label=\"action.publish.content\" icon=\"/icons/file.gif\" type=\"rest_document_link\">\n      <category>VIEW_ACTION_LIST</category>\n      <filter-id>publish_document</filter-id>\n      <filter-id>mutable_document</filter-id>\n    </action>\n\n    <action id=\"TAB_ADMIN_PUBLICATION_TREES\" link=\"/incl/tabs/admin_publication_trees.xhtml\"\n      order=\"110\" label=\"action.admin.publication.tree\" icon=\"/icons/file.gif\"\n      type=\"rest_document_link\">\n      <category>TAB_MANAGE_sub_tab</category>\n      <filter-id>admin_publication_trees_filter</filter-id>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"publish_document\">\n      <rule grant=\"true\">\n        <facet>Publishable</facet>\n      </rule>\n    </filter>\n\n    <filter id=\"admin_publication_trees_filter\">\n      <rule grant=\"true\">\n        <permission>Write</permission>\n        <schema>publishing</schema>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-publisher-web-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.web",
      "id": "org.nuxeo.ecm.platform.publisher.web",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM Publisher Service Web\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.publisher.web;singleton:=tru\r\n e\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: web,stateless\r\nRequire-Bundle: org.nuxeo.ecm.platform.publisher.api, org.nuxeo.ecm.weba\r\n pp.core\r\nNuxeo-Component: OSGI-INF/actions-contrib.xml,OSGI-INF/nxtreemanager-con\r\n trib.xml\r\n\r\n",
      "maxResolutionOrder": 668,
      "minResolutionOrder": 459,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.publisher.api",
        "org.nuxeo.ecm.webapp.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-io-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.io.api",
          "org.nuxeo.ecm.platform.io.core",
          "org.nuxeo.ecm.platform.io.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io",
        "id": "grp:org.nuxeo.ecm.platform.io",
        "name": "org.nuxeo.ecm.platform.io",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.io.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.io.impl.IOManagerComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.io.IOManager",
              "descriptors": [
                "org.nuxeo.ecm.platform.io.descriptors.IOResourceAdapterDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io/org.nuxeo.ecm.platform.io.core/org.nuxeo.ecm.platform.io.IOManager/ExtensionPoints/org.nuxeo.ecm.platform.io.IOManager--adapters",
              "id": "org.nuxeo.ecm.platform.io.IOManager--adapters",
              "label": "adapters (org.nuxeo.ecm.platform.io.IOManager)",
              "name": "adapters",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io/org.nuxeo.ecm.platform.io.core/org.nuxeo.ecm.platform.io.IOManager",
          "name": "org.nuxeo.ecm.platform.io.IOManager",
          "requirements": [],
          "resolutionOrder": 399,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.io.IOManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io/org.nuxeo.ecm.platform.io.core/org.nuxeo.ecm.platform.io.IOManager/Services/org.nuxeo.ecm.platform.io.api.IOManager",
              "id": "org.nuxeo.ecm.platform.io.api.IOManager",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 852,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.io.IOManager\">\n\n  <implementation class=\"org.nuxeo.ecm.platform.io.impl.IOManagerComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.io.api.IOManager\" />\n  </service>\n\n  <extension-point name=\"adapters\">\n    <object\n      class=\"org.nuxeo.ecm.platform.io.descriptors.IOResourceAdapterDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/io-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io/org.nuxeo.ecm.platform.io.core/org.nuxeo.ecm.platform.io.operations/Contributions/org.nuxeo.ecm.platform.io.operations--operations",
              "id": "org.nuxeo.ecm.platform.io.operations--operations",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <operation class=\"org.nuxeo.ecm.platform.io.operation.ExportDocument\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io/org.nuxeo.ecm.platform.io.core/org.nuxeo.ecm.platform.io.operations",
          "name": "org.nuxeo.ecm.platform.io.operations",
          "requirements": [],
          "resolutionOrder": 400,
          "services": [],
          "startOrder": 339,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.io.operations\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n\n    <operation class=\"org.nuxeo.ecm.platform.io.operation.ExportDocument\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-io-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io/org.nuxeo.ecm.platform.io.core",
      "id": "org.nuxeo.ecm.platform.io.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: 1\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nBundle-Name: Nuxeo Platform IO Core Fragment\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.io.core;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: web,stateful\r\nNuxeo-Component: OSGI-INF/io-framework.xml,OSGI-INF/operations-contrib.x\r\n ml\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nImport-Package: org.apache.commons.logging,org.nuxeo.common.utils,org.nu\r\n xeo.common.xmap.annotation,org.nuxeo.ecm.core.api,org.nuxeo.ecm.core.ap\r\n i.repository,org.nuxeo.ecm.core.io,org.nuxeo.ecm.core.io.exceptions,org\r\n .nuxeo.ecm.core.io.impl,org.nuxeo.ecm.platform.io.api,org.nuxeo.runtime\r\n ,org.nuxeo.runtime.api,org.nuxeo.runtime.model,org.nuxeo.runtime.servic\r\n es.streaming\r\n\r\n",
      "maxResolutionOrder": 400,
      "minResolutionOrder": 399,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-io-client",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.io.api",
          "org.nuxeo.ecm.platform.io.core",
          "org.nuxeo.ecm.platform.io.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io",
        "id": "grp:org.nuxeo.ecm.platform.io",
        "name": "org.nuxeo.ecm.platform.io",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.io.web",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "IO client action contributions.\n",
          "documentationHtml": "<p>\nIO client action contributions.</p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io/org.nuxeo.ecm.platform.io.web/org.nuxeo.ecm.platform.io.web/Contributions/org.nuxeo.ecm.platform.io.web--actions",
              "id": "org.nuxeo.ecm.platform.io.web--actions",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <!-- old export icon for non folderish docs => disabled -->\n    <action enabled=\"false\" icon=\"/icons/zip.png\" id=\"xmlExport\" label=\"action.xml.export\" link=\"#{importExportAction.doExportDocument()}\" order=\"17\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>not_folder</filter-id>\n    </action>\n\n    <!-- old export icon for non folderish docs => disabled -->\n    <action enabled=\"false\" icon=\"/icons/zip.png\" id=\"xmlTreeExport\" label=\"action.xmltree.export\" link=\"#{importExportAction.doExportFolder()}\" order=\"17\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>folder</filter-id>\n    </action>\n\n    <!-- deprecated since 7.2. Exports are now exposed as renditions, see NXP-16585 -->\n    <action enabled=\"false\" icon=\"/icons/export.png\" id=\"exportView\" label=\"label.exportview\" link=\"export\" order=\"80\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n    </action>\n\n    <action icon=\"/icons/xml.png\" id=\"exportViewXMLExport\" label=\"label.exportview.xmlExport\" link=\"#{importExportAction.documentXMLExportURL}\" order=\"10\">\n      <category>DOCUMENT_EXPORT_VIEW_ACTION</category>\n    </action>\n\n    <action icon=\"/icons/zip_export.png\" id=\"exportViewZIPExport\" label=\"label.exportview.zipExport\" link=\"#{importExportAction.documentZIPTreeExportURL}\" order=\"20\">\n      <category>DOCUMENT_EXPORT_VIEW_ACTION</category>\n      <filter-id>not_folder</filter-id>\n    </action>\n\n    <action icon=\"/icons/zip_tree_export.png\" id=\"exportViewTreeZIPExport\" label=\"label.exportview.zipTreeExport\" link=\"#{importExportAction.documentZIPTreeExportURL}\" order=\"30\">\n      <category>DOCUMENT_EXPORT_VIEW_ACTION</category>\n      <filter-id>folder</filter-id>\n    </action>\n\n    <action icon=\"/icons/action_export_zip.gif\" id=\"WORKLIST_XMLEXPORT\" label=\"command.clipboard.xmlZipExport\" link=\"#{importExportAction.exportCurrentList()}\">\n      <category>DEFAULT_LIST</category>\n      <filter id=\"currentWorkListIsNotEmptyXML\">\n        <rule grant=\"false\">\n          <condition>#{clipboardActions.workListEmpty}</condition>\n        </rule>\n      </filter>\n    </action>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io/org.nuxeo.ecm.platform.io.web/org.nuxeo.ecm.platform.io.web",
          "name": "org.nuxeo.ecm.platform.io.web",
          "requirements": [],
          "resolutionOrder": 398,
          "services": [],
          "startOrder": 340,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<component name=\"org.nuxeo.ecm.platform.io.web\">\n\n  <documentation>IO client action contributions.</documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <!-- old export icon for non folderish docs => disabled -->\n    <action id=\"xmlExport\" link=\"#{importExportAction.doExportDocument()}\"\n      order=\"17\" label=\"action.xml.export\" icon=\"/icons/zip.png\"\n      enabled=\"false\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>not_folder</filter-id>\n    </action>\n\n    <!-- old export icon for non folderish docs => disabled -->\n    <action id=\"xmlTreeExport\" link=\"#{importExportAction.doExportFolder()}\"\n      order=\"17\" label=\"action.xmltree.export\" icon=\"/icons/zip.png\"\n      enabled=\"false\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n      <filter-id>folder</filter-id>\n    </action>\n\n    <!-- deprecated since 7.2. Exports are now exposed as renditions, see NXP-16585 -->\n    <action enabled=\"false\" id=\"exportView\" link=\"export\" order=\"80\" label=\"label.exportview\"\n      icon=\"/icons/export.png\">\n      <category>DOCUMENT_UPPER_ACTION</category>\n    </action>\n\n    <action id=\"exportViewXMLExport\"\n      link=\"#{importExportAction.documentXMLExportURL}\" order=\"10\"\n      label=\"label.exportview.xmlExport\" icon=\"/icons/xml.png\">\n      <category>DOCUMENT_EXPORT_VIEW_ACTION</category>\n    </action>\n\n    <action id=\"exportViewZIPExport\"\n      link=\"#{importExportAction.documentZIPTreeExportURL}\" order=\"20\"\n      label=\"label.exportview.zipExport\" icon=\"/icons/zip_export.png\">\n      <category>DOCUMENT_EXPORT_VIEW_ACTION</category>\n      <filter-id>not_folder</filter-id>\n    </action>\n\n    <action id=\"exportViewTreeZIPExport\"\n      link=\"#{importExportAction.documentZIPTreeExportURL}\" order=\"30\"\n      label=\"label.exportview.zipTreeExport\"\n      icon=\"/icons/zip_tree_export.png\">\n      <category>DOCUMENT_EXPORT_VIEW_ACTION</category>\n      <filter-id>folder</filter-id>\n    </action>\n\n    <action id=\"WORKLIST_XMLEXPORT\"\n      link=\"#{importExportAction.exportCurrentList()}\"\n      label=\"command.clipboard.xmlZipExport\"\n      icon=\"/icons/action_export_zip.gif\">\n      <category>DEFAULT_LIST</category>\n      <filter id=\"currentWorkListIsNotEmptyXML\">\n        <rule grant=\"false\">\n          <condition>#{clipboardActions.workListEmpty}</condition>\n        </rule>\n      </filter>\n    </action>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-io-client-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.io/org.nuxeo.ecm.platform.io.web",
      "id": "org.nuxeo.ecm.platform.io.web",
      "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: 2023.7.9-t20240205-105127\r\nBundle-Name: Nuxeo ECM IO Web Client\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.io.web;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: web,stateless\r\nEclipse-LazyStart: false\r\nNuxeo-Component: OSGI-INF/actions-contrib.xml\r\nRequire-Bundle: org.nuxeo.ecm.webapp.core\r\n\r\n",
      "maxResolutionOrder": 398,
      "minResolutionOrder": 398,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.webapp.core"
      ],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-login-token-rest",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.restapi.io",
          "org.nuxeo.ecm.platform.restapi.server",
          "org.nuxeo.ecm.platform.restapi.server.login.tokenauth",
          "org.nuxeo.ecm.platform.restapi.server.search"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi",
        "id": "grp:org.nuxeo.ecm.platform.restapi",
        "name": "org.nuxeo.ecm.platform.restapi",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.restapi.server.login.tokenauth",
      "components": [],
      "fileName": "nuxeo-platform-login-token-rest-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server.login.tokenauth",
      "id": "org.nuxeo.ecm.platform.restapi.server.login.tokenauth",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: nuxeo-platform-login-token-rest\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.restapi.server.login.tokenau\r\n th;singleton:=true\r\nFragment-Host: org.nuxeo.ecm.platform.restapi.server\r\nBundle-Vendor: Nuxeo\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-dmk-adaptor",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.audit.io",
          "org.nuxeo.ecm.default.config",
          "org.nuxeo.ecm.jwt",
          "org.nuxeo.ecm.permissions",
          "org.nuxeo.ecm.platform",
          "org.nuxeo.ecm.platform.api",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.convert",
          "org.nuxeo.ecm.platform.csv.export",
          "org.nuxeo.ecm.platform.dublincore",
          "org.nuxeo.ecm.platform.filemanager",
          "org.nuxeo.ecm.platform.htmlsanitizer",
          "org.nuxeo.ecm.platform.mail",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.threed",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.ecm.webdav",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "org.nuxeo.mongodb.audit",
          "org.nuxeo.search.ui",
          "org.nuxeo.usermapper"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform",
        "id": "grp:org.nuxeo.ecm.platform",
        "name": "org.nuxeo.ecm.platform",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Platform Importer\n\n## About Nuxeo Platform Importer\n\nThe file importer comes as a Java library (with nuxeo runtime service) and a sample JAX-RS interface to launch, monitor and abort import jobs.\nThis project is an on-going project, supported by Nuxeo\n\n## Building\n### How to Build Nuxeo Platform Importer\nBuild the Nuxeo Platform Importer with Maven:\n```$ mvn install -Dmaven.test.skip=true```\n\n## Deploying\nNuxeo Platform Importer is available as two package add-ons [from the Nuxeo Marketplace]\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-platform-importer\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-scan-importer\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Platform Importer is available in our Documentation Center: http://doc.nuxeo.com/x/gYBVAQ\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Nuxeo Platform Importer component:\nhttps://jira.nuxeo.com/browse/NXP/component/10621\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "83bb2a4c6415c9f07db3ab17fa99510c",
            "encoding": "UTF-8",
            "length": 1753,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.dmk-adaptor",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.dmk.DmkComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.dmk-adaptor",
              "descriptors": [
                "org.nuxeo.dmk.DmkProtocol"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.dmk-adaptor/org.nuxeo.dmk-adaptor/ExtensionPoints/org.nuxeo.dmk-adaptor--protocols",
              "id": "org.nuxeo.dmk-adaptor--protocols",
              "label": "protocols (org.nuxeo.dmk-adaptor)",
              "name": "protocols",
              "version": "2023.7.9"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.dmk-adaptor--protocols",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.dmk-adaptor/org.nuxeo.dmk-adaptor/Contributions/org.nuxeo.dmk-adaptor--protocols",
              "id": "org.nuxeo.dmk-adaptor--protocols",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.dmk-adaptor",
                "name": "org.nuxeo.dmk-adaptor",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"protocols\" target=\"org.nuxeo.dmk-adaptor\">\n   <protocol name=\"html\">\n     <port>8081</port>\n   </protocol>\n   <protocol name=\"http\">\n     <port>6868</port>\n   </protocol>\n   <protocol name=\"https\">\n     <port>6869</port>\n   </protocol>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.dmk-adaptor/org.nuxeo.dmk-adaptor",
          "name": "org.nuxeo.dmk-adaptor",
          "requirements": [],
          "resolutionOrder": 183,
          "services": [],
          "startOrder": 785,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.dmk-adaptor\">\n\n  <implementation class=\"org.nuxeo.dmk.DmkComponent\" />\n\n  <extension-point name=\"protocols\">\n    <object class=\"org.nuxeo.dmk.DmkProtocol\"/>\n  </extension-point>\n\n  <extension target=\"org.nuxeo.dmk-adaptor\" point=\"protocols\">\n   <protocol name=\"html\">\n     <port>8081</port>\n   </protocol>\n   <protocol name=\"http\">\n     <port>6868</port>\n   </protocol>\n   <protocol name=\"https\">\n     <port>6869</port>\n   </protocol>\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/dmk-adaptor.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-dmk-adaptor-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.dmk-adaptor",
      "id": "org.nuxeo.dmk-adaptor",
      "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: 5.7.0.qualifier\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: dmk-adaptor\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.dmk-adaptor\r\nNuxeo-Component: OSGI-INF/dmk-adaptor.xml\r\n\r\n",
      "maxResolutionOrder": 183,
      "minResolutionOrder": 183,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-diff-jsf",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.diff.content",
          "org.nuxeo.diff.core",
          "org.nuxeo.diff.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff",
        "id": "grp:org.nuxeo.diff",
        "name": "org.nuxeo.diff",
        "parentIds": [
          "grp:org.nuxeo.ecm"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Diff\n\nThis repo hosts the source code of a plugin for Nuxeo Platform that allows to render a diff between two documents or two versions of a document.\nThe comparison takes into account all the properties shared by the documents, which means that if a comparison is done between two documents of a different type, only the schemas in common will be \"diffed\".\nThe comparison also takes into account blob-type properties.\n\n\n## Building and deploying\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Diff Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-diff).\n\n## Configuring\n\n### Diff display\n\nThe `DiffDisplayService` offers several extension points to configure the document diff display.\nMost of the code samples exposed here can be found in the [diff-display-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-display-contrib.xml) and [diff-widgets-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-widgets-contrib.xml) files.\n\n#### Configuring groups of properties to display with the diffDisplay extension point.\n\nA `diffDisplay` contribution represents a number of `diffBlocks` that you want to display when asking for a document comparison.\nIt is bound to a document type.\nA `diffBlock` contribution represents a number of properties (fields) that you want to display (see next section).\n\nWhen asking for the comparison between 2 versions of a document, the `diffDisplay` bound to the document type or a super type is used.\nIf no `diffDisplay` is found for this type or a super type a fall back is done on the default diff display mode: one block per document schema and for each block all the fields of the schema that are different.\n\n*Beware that in this case the order of the schemas and of the fields is undefined.*\n\nWhen asking for the comparison between 2 documents:\n- If they are of the same type: if  a `diffDisplay` is found for this type or a super type then it is used, else a fall back is done on the default diff display mode.\n- If they are of different types: if  a `diffDisplay` is found for a common super type then it is used, else a fall back is done on the default diff display mode.\n\nFor example, this is the `diffDisplay` contribution bound to the _File_ type:\n```xml\n<diffDisplay type=\"File\">\n  <diffBlocks>\n    <diffBlock name=\"heading\" />\n    <diffBlock name=\"dublincore\" />\n    <diffBlock name=\"files\" />\n  </diffDisplay>\n</diffBlocks>\n```\n\n_Note that the order of the diffBlocks is taken into account when rendering the diff display._\n\n#### Configuring a group of properties to display with the diffBlock extension point\n\nA `diffBlock` contribution represents a number of `fields` that you want to display. It is rendered as a foldable box.\nThe `label` attribute of a `diffBlock` contribution is used as the title of the foldable box.\nA `field` is defined by its `schema` and its `name`.\n\nFor example, this is the \"heading\" `diffBlock` contribution:\n```xml\n<diffBlock name=\"heading\" label=\"label.diffBlock.heading\">\n  <fields>\n    <field schema=\"dublincore\" name=\"title\" />\n    <field schema=\"dublincore\" name=\"description\" />\n  </fields>\n</diffBlock>\n```\n_Note that the order of the fields is taken into account when rendering the diff block._\n\nFor complex properties, you can contribute inside the `field` element the property `items` that you want to display:\n```xml\n<field schema=\"complextypes\" name=\"complex\">\n  <items>\n    <item name=\"stringItem\" />\n    <item name=\"thirdItem\" />\n    <item name=\"fourthItem\" />\n  </items>\n</field>\n```\n\n_Note that the order of the items is taken into account when rendering the field._\n\nThis is used for the `files` field of the `files` diff block:\n```xml\n<field schema=\"files\" name=\"files\">\n  <items>\n    <!-- Display the file only, not the filename which is managed\n         by the file widget type -->\n    <item name=\"file\" displayContentDiffLinks=\"true\" />\n  </items>\n</field>\n```\n\nIf no `items` are specified, all the property items are displayed.\n\nFor content properties (that hold a blob) or string ones you can set the `displayContentDiffLinks` attribute to `true` on a `field` or an `item` to display the content diff links.\nThese links will open a fancybox showing the detailed content diff using the usual green and red colors to distinguish the added/removed parts of the content.\nFor now, 2 links are displayed: _Textual diff_ based on a text conversion and _Html diff_ based on an html conversion (keeps the content layout).\n\n#### Configuring property widgets with the widgets extension point\n\n##### Principle\n\nWhen rendering a `diffBlock`, the `DiffDisplayService` builds a layout definition on the fly, including a layout row for each `field` of the `diffBlock`.\nEach row contains a widget definition for the `field`, and the layout template renders 2 instances of this widget definition: one for the left document and one for the right document.\nThe content diff links, if displayed, are also rendered by a widget inside the layout row.\n\nHow is the widget definition built for a given `field`?\nA lookup is done in the `LayoutStore` service to find a specific widget definition named with the xpath of the property.\nIf such a definition is not found, a lookup is done to find a generic widget definition named with the type of the property.\n\nThis allows you to only contribute a specific widget definition if the generic one doesn't match your needs for a given field, typically if you need a custom template, label or custom properties.\n\n##### Example\n\nLets say we have contributed the following `diffBlock`:\n```xml\n<diffBlock name=\"myCustomBlock\" label=\"label.diffBlock.custom\">\n  <fields>\n    <field schema=\"file\" name=\"content\" />\n    <field schema=\"dublincore\" name=\"title\" />\n  </fields>\n</diffBlock>\n```\n\nand the following widgets to the `widgets` extension point of the `org.nuxeo.ecm.platform.forms.layout.LayoutStore` component:\n```xml\n<extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n  point=\"widgets\">\n\n  <widget name=\"file:content\" type=\"file\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <labels>\n      <label mode=\"any\">label.summary.download.file</label>\n    </labels>\n    <translated>true</translated>\n    <properties mode=\"any\">\n    </properties>\n  </widget>\n\n  <widget name=\"string\" type=\"template\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <properties mode=\"any\">\n      <property name=\"widgetType\">text</property>\n      <property name=\"template\">\n        /widgets/generic_diff_widget_template.xhtml\n      </property>\n    </properties>\n  </widget>\n\n</extension>\n```\n\nWhen rendering the \"myCustomBlock\" `diffBlock`, the `DiffDisplayService` will:\n\n- Look for a specific widget definition named \"file:content\" in the `LayoutStore`, find it and use it for the \"file:content\" field.\n\n- Look for a specific widget definition named \"dublincore:title\" in the `LayoutStore`, won't find it and therefore will look for a generic widget definition named with the field type, ie. \"string\", find it and use it for the dublincore:title field.\n\nIn this use case, the \"string\" generic widget definition is sufficient to display the \"dublincore:title\" field.\nIt uses a widget of type \"text\" with \"label.dublincore.title\" as a label and \"dublincore:title\" as a field definition.\nWe can easily understand here the interest of generic widgets: once you have the type and xpath of a property, the matching widget definition can be computed on the fly using the property type to guess the widget type (\"string\" => \"text\", \"date\" => \"datetime\", etc.) and the property xpath for the field definition and label.\n\nThe \"file:content\" specific widget definition is contributed here to use a custom label \"label.summary.download.file\" instead of the one that would have been generated for the \"content\" generic widget definition: \"label.file.content\".\n\n_Note that in both cases (generic and specific) you don't need to define the widget field definitions since they are automatically computed from the property xpath, except in particular cases like \"note:note\" where the \"mime-type\" field is needed._\n\n##### List and complex properties\n\nYou might already know that the widgets used to display list and complex properties have subwidgets.\nIn the case of a list property, a subwidget is needed for the list items; in the case of a complex property, a subwidget is needed for each item of the complex property.\nThe lookup done by the `DiffDisplayService_` for the first-level widgets is also done recursively for the subwidgets!\n\n###### List property\n\nFor a list property, lets take the example of \"dublincore:contributors\", which is a string list.\n\n- To display the list, nothing special is needed so the \"scalarList\" generic widget definition can be used.\n\n- To display a list item (a contributor, which is of type \"string\"), the \"string\" generic widget definition doesn't match our needs: it would display the contributor's username whereas we want to display its fullname (firstname lastname).\nSo we need a specific widget definition for the list items subwidget to use a custom template able to display the contributor's fullname.\nThe name of this widget definition must match the xpath of the list item property, ie. \"dublincore:contributors/item\".\n\nTherefore, two widget definitions are involved:\n\n- The \"scalarList\" generic widget definition:\n\n```xml\n<widget name=\"scalarList\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"displayAllItems\">false</property>\n    <property name=\"displayItemIndexes\">true</property>\n    <property name=\"template\">\n      /widgets/list_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"dublincore:contributors/item\" specific widget definition:\n\n```xml\n<widget name=\"dublincore:contributors/item\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.dublincore.contributors.item</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"template\">/widgets/contributors_item_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n###### Complex property\n\nFor a complex property, lets take the example of a \"complextypes:complex\" property with two items \"stringItem\" and \"directoryItem\".\n\"stringItem\" is a simple string, but \"directoryItem\" is a string that needs to be bound to the \"myDirectory\" directory.\n\n- To display the complex property, nothing special is needed so the \"complex\" generic widget definition can be used.\n\n- To display the \"directoryItem\" item, the \"string\" generic widget definition doesn't match our needs: it would display the directory entry code stored in the backend whereas we want to display its label.\nSo we need a specific widget definition for the \"directoryItem\" subwidget to use the \"selectOneDirectory\" widget type bound to the \"myDirectory\" directory.\nAs for a list item, the name of this widget definition must match the xpath of the complex property item, ie. \"complextypes:complex/directoryItem\".\n\nTherefore, two widget definitions are involved:\n\n- The \"complex\" generic widget definition:\n\n```xml\n<widget name=\"complex\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"template\">\n      /widgets/complex_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"complextypes:complex/directoryItem\" specific widget definition:\n\n```xml\n<widget name=\"complextypes:complex/directoryItem\" type=\"selectOneDirectory\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.complextypes.complex.directoryItem</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"directoryName\">myDirectory</property>\n    <property name=\"localize\">true</property>\n    <property name=\"ordering\">ordering,label</property>\n  </properties>\n</widget>\n```\n\n###### Useful widget properties\n\nYou can use the following properties on a list widget definition (typically \"scalarList\", \"complexList\" or \"files:files\"):\n\n`<property name=\"displayAllItems\">[true|false]</property>`\nIf set to `true`, all the list items will be displayed, otherwise only the different ones will be.\n\n`<property name=\"displayItemIndexes\">[true|false]</property>`\nIf set to `true`, a subwidget will be added to the widget definition to display the list item indexes.\n\nYou can use the following property on a complex widget definition (typically \"complex\"):\n\n`<property name=\"display\">[inline|*]</property>`\nIf set to `inline` the complex items will be displayed as a table with one line and one column per item, otherwise as a table with one column and one line per item.\n\n##### About the value bound to the diff widgets\n\nIf you take a look at [layout_diff_template.xhtml](nuxeo-diff-jsf/src/main/resources/web/nuxeo.war/layouts/layout_diff_template.xhtml), you will see that the `value` passed to the `<nxl:widget>` tag is `#{value.leftValue}` or `#{value.rightValue}`, `value` being the object passed to the `<nxl:layout>` tag `value` attribute: `diffDisplayBlock`, of type `DiffDisplayBlockImpl`.\nThe `leftValue` and `rightValue` members of `DiffDisplayBlockImpl` are of type `Map<String, Map<String, PropertyDiffDisplay>>`. The first level Map keys are schema names, the second level ones are field keys.\nFinally, the `PropertyDiffDisplay` object has two members: `value` and `styleClass`, `value` holding the value to display and `styleClass` the css style class to apply to the &lt;span&gt; wrapping the value.\n\nFor example if we compare two documents where only the \"dublincore:title\" property is different (\"My first doc\" and \"My second doc\") we could have the following `diffDisplayBlock` object:\n\n```java\ndiffDisplayBlock.getLeftValue() = {dublincore={title={value=\"My first doc\", styleClass=\"redBackgroundColor\"}}}\ndiffDisplayBlock.getRightValue() = {dublincore={title={value=\"My second doc\", styleClass=\"greenBackgroundColor\"}}}\n```\n\nOn the widget side, the field definitions must match the `diffDisplayBlock` object structure, that's why the generated field definitions of the widget used for \"dublincore:title\" would be:\n\n```xml\n<fields>\n  <field>dublincore:title/value</field>\n  <field>dublincore:title/styleClass</field>\n</fields>\n```\n\nThis is important to know when designing a custom template for a diff widget (ie. where field definitions are automatically generated): you can use `#{field_0}` for the value itself and `#{field_1`} for the css style class associated to the value.\nBy default, only the items of a complex property or of a list property where the `displayAllItems` widget property is `true` can have a styleClass equal to `redBackgroundColor` or `greenBackgroundColor` in order to highlight the different items among all.\n\n#### To summarize: what you need to contribute to have a nice diff result for your custom document types\n\n- A `diffDisplay` contribution for each document type.\n\n- The associated `diffBlock` contributions. Don't forget that you can specify the items you want to display for a complex property and the fields/items for which you want to display the content diff links.\n\n- The specific widgets needed when the generic ones don't match your needs. Typically for a date property if you need to change the date format, or for a property bound to a directory to specifiy the directory name. Also don't forget that you can contribute a specific widget for a complex property item or a list item, using the item xpath.\n\n- The labels for each `diffBlock`, each widget and each subwidget in your `messages*.properties` files.\nFor example:\n\n```\nlabel.diffBlock.custom=My custom diff block title\nlabel.customSchema.customField=Custom field\nlabel.customSchema.customField.firstComplexItem=First item of the complex custom field\n```\n\n### Content diff\n\nWork in progress!\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "56f1f6c0b7c5c1f67502f8718bf655e4",
            "encoding": "UTF-8",
            "length": 16731,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.diff.jsf",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.actions/Contributions/org.nuxeo.ecm.diff.actions--actions",
              "id": "org.nuxeo.ecm.diff.actions--actions",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <!-- Current selection actions -->\n    <action id=\"CURRENT_DOCUMENT_SELECTION_DIFF\" label=\"command.clipboard.diff\" link=\"#{diffActions.prepareCurrentDocumentSelectionDiff}\" order=\"100\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canDiffCurrentDocumentSelection</filter-id>\n    </action>\n\n    <!-- Trash actions -->\n    <action id=\"CURRENT_TRASH_SELECTION_DIFF\" label=\"command.clipboard.diff\" link=\"#{diffActions.prepareCurrentTrashSelectionDiff}\" order=\"100\">\n      <category>CURRENT_SELECTION_TRASH_LIST</category>\n      <filter-id>canDiffCurrentTrashSelection</filter-id>\n    </action>\n\n    <!-- Section actions -->\n    <action id=\"CURRENT_SECTION_SELECTION_DIFF\" label=\"command.clipboard.diff\" link=\"#{diffActions.prepareCurrentSectionSelectionDiff}\" order=\"100\">\n      <category>CURRENT_SELECTION_SECTIONS_LIST</category>\n      <filter-id>canDiffCurrentSectionSelection</filter-id>\n    </action>\n\n    <!-- Worklist actions -->\n    <action icon=\"/icons/action_diff.png\" id=\"CURRENT_DEFAULT_SELECTION_DIFF\" label=\"command.clipboard.diff\" link=\"#{diffActions.prepareCurrentDefaultSelectionDiff}\" order=\"100\">\n      <category>DEFAULT_LIST</category>\n      <filter-id>canDiffCurrentDefaultSelection</filter-id>\n    </action>\n\n    <!-- Version actions -->\n    <action id=\"CURRENT_VERSION_SELECTION_DIFF\" label=\"command.clipboard.diff\" link=\"#{diffActions.prepareCurrentVersionSelectionDiff}\" order=\"100\">\n      <category>CURRENT_VERSION_SELECTION_LIST</category>\n      <filter-id>canDiffCurrentVersionSelection</filter-id>\n    </action>\n\n    <action id=\"CURRENT_VERSION_DIFF\" label=\"command.versions.diffCurrent\" link=\"#{diffActions.prepareCurrentVersionDiff}\" order=\"100\">\n      <category>VERSION_LIST_ITEM</category>\n    </action>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.actions/Contributions/org.nuxeo.ecm.diff.actions--filters",
              "id": "org.nuxeo.ecm.diff.actions--filters",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <filter id=\"canDiffCurrentDocumentSelection\">\n      <rule grant=\"true\">\n        <condition>#{diffActions.canDiffCurrentDocumentSelection}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canDiffCurrentTrashSelection\">\n      <rule grant=\"true\">\n        <condition>#{diffActions.canDiffCurrentTrashSelection}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canDiffCurrentSectionSelection\">\n      <rule grant=\"true\">\n        <condition>#{diffActions.canDiffCurrentSectionSelection}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canDiffCurrentVersionSelection\">\n      <rule grant=\"true\">\n        <condition>#{diffActions.canDiffCurrentVersionSelection}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canDiffCurrentDefaultSelection\">\n      <rule grant=\"true\">\n        <condition>#{diffActions.canDiffCurrentDefaultSelection}\n        </condition>\n      </rule>\n    </filter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.actions",
          "name": "org.nuxeo.ecm.diff.actions",
          "requirements": [],
          "resolutionOrder": 178,
          "services": [],
          "startOrder": 185,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.actions\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <!-- Current selection actions -->\n    <action id=\"CURRENT_DOCUMENT_SELECTION_DIFF\"\n      link=\"#{diffActions.prepareCurrentDocumentSelectionDiff}\" label=\"command.clipboard.diff\"\n      order=\"100\">\n      <category>CURRENT_SELECTION_LIST</category>\n      <category>ORDERABLE_CURRENT_SELECTION_LIST</category>\n      <filter-id>canDiffCurrentDocumentSelection</filter-id>\n    </action>\n\n    <!-- Trash actions -->\n    <action id=\"CURRENT_TRASH_SELECTION_DIFF\" link=\"#{diffActions.prepareCurrentTrashSelectionDiff}\"\n      label=\"command.clipboard.diff\" order=\"100\">\n      <category>CURRENT_SELECTION_TRASH_LIST</category>\n      <filter-id>canDiffCurrentTrashSelection</filter-id>\n    </action>\n\n    <!-- Section actions -->\n    <action id=\"CURRENT_SECTION_SELECTION_DIFF\"\n      link=\"#{diffActions.prepareCurrentSectionSelectionDiff}\" label=\"command.clipboard.diff\"\n      order=\"100\">\n      <category>CURRENT_SELECTION_SECTIONS_LIST</category>\n      <filter-id>canDiffCurrentSectionSelection</filter-id>\n    </action>\n\n    <!-- Worklist actions -->\n    <action id=\"CURRENT_DEFAULT_SELECTION_DIFF\"\n      link=\"#{diffActions.prepareCurrentDefaultSelectionDiff}\" label=\"command.clipboard.diff\"\n      icon=\"/icons/action_diff.png\" order=\"100\">\n      <category>DEFAULT_LIST</category>\n      <filter-id>canDiffCurrentDefaultSelection</filter-id>\n    </action>\n\n    <!-- Version actions -->\n    <action id=\"CURRENT_VERSION_SELECTION_DIFF\"\n      link=\"#{diffActions.prepareCurrentVersionSelectionDiff}\" label=\"command.clipboard.diff\"\n      order=\"100\">\n      <category>CURRENT_VERSION_SELECTION_LIST</category>\n      <filter-id>canDiffCurrentVersionSelection</filter-id>\n    </action>\n\n    <action id=\"CURRENT_VERSION_DIFF\" link=\"#{diffActions.prepareCurrentVersionDiff}\"\n      label=\"command.versions.diffCurrent\" order=\"100\">\n      <category>VERSION_LIST_ITEM</category>\n    </action>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"filters\">\n\n    <filter id=\"canDiffCurrentDocumentSelection\">\n      <rule grant=\"true\">\n        <condition>#{diffActions.canDiffCurrentDocumentSelection}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canDiffCurrentTrashSelection\">\n      <rule grant=\"true\">\n        <condition>#{diffActions.canDiffCurrentTrashSelection}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canDiffCurrentSectionSelection\">\n      <rule grant=\"true\">\n        <condition>#{diffActions.canDiffCurrentSectionSelection}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canDiffCurrentVersionSelection\">\n      <rule grant=\"true\">\n        <condition>#{diffActions.canDiffCurrentVersionSelection}\n        </condition>\n      </rule>\n    </filter>\n\n    <filter id=\"canDiffCurrentDefaultSelection\">\n      <rule grant=\"true\">\n        <condition>#{diffActions.canDiffCurrentDefaultSelection}\n        </condition>\n      </rule>\n    </filter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/diff-actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.diff.service.impl.DiffDisplayServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    This service provides an extension point to manage\n    document diff display.\n\n    @author\n    Antoine Taillefer\n  \n",
          "documentationHtml": "<p>\nThis service provides an extension point to manage\ndocument diff display.\n</p><p>\nAntoine Taillefer\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.diff.service.DiffDisplayService",
              "descriptors": [
                "org.nuxeo.ecm.diff.service.impl.DiffExcludedFieldsDescriptor",
                "org.nuxeo.ecm.diff.service.impl.DiffComplexFieldDescriptor"
              ],
              "documentation": "<pre>\n        The diffDefaultDisplay extension point allows you to\n        contribute a diffExcludedFields contribution to define a\n        set of\n        fields from a given schema that will be\n        excluded from the default\n        diff display in the document diff view\n        (the default diff display\n        takes into account every different field of every common schema\n        between the compared\n        documents, in an undefined order).\n\n        If no\n        fields are specified, the whole schema is excluded.\n      </pre>\n<code>\n    <diffExcludedFields schema=\"common\"/>\n    <diffExcludedFields schema=\"dublincore\">\n        <fields>\n            <field name=\"subjects\"/>\n            <field name=\"modified\"/>\n        </fields>\n    </diffExcludedFields>\n</code>\n",
              "documentationHtml": "<p>\n</p><pre>\nThe diffDefaultDisplay extension point allows you to\ncontribute a diffExcludedFields contribution to define a\nset of\nfields from a given schema that will be\nexcluded from the default\ndiff display in the document diff view\n(the default diff display\ntakes into account every different field of every common schema\nbetween the compared\ndocuments, in an undefined order).\n<p>\nIf no\nfields are specified, the whole schema is excluded.\n</p></pre>\n<p></p><pre><code>    &lt;diffExcludedFields schema&#61;&#34;common&#34;/&gt;\n    &lt;diffExcludedFields schema&#61;&#34;dublincore&#34;&gt;\n        &lt;fields&gt;\n            &lt;field name&#61;&#34;subjects&#34;/&gt;\n            &lt;field name&#61;&#34;modified&#34;/&gt;\n        &lt;/fields&gt;\n    &lt;/diffExcludedFields&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.service.DiffDisplayService/ExtensionPoints/org.nuxeo.ecm.diff.service.DiffDisplayService--diffDefaultDisplay",
              "id": "org.nuxeo.ecm.diff.service.DiffDisplayService--diffDefaultDisplay",
              "label": "diffDefaultDisplay (org.nuxeo.ecm.diff.service.DiffDisplayService)",
              "name": "diffDefaultDisplay",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.diff.service.DiffDisplayService",
              "descriptors": [
                "org.nuxeo.ecm.diff.service.impl.DiffDisplayDescriptor"
              ],
              "documentation": "<pre>\n        A diffDisplay contribution defines which diffBlocks will be\n        displayed in the document diff view for a given\n        document type.\n        The order matters.\n\n        If the 2 diffed documents have the same type,\n        the diffDisplay matching this type\n        is used, otherwise or if such\n        a diffDisplay does not exist, the default diff display is used.\n        The default diff\n        display\n        takes into account every different field\n        of every common schema between the\n        compared documents, in an\n        undefined order.\n      </pre>\n<code>\n    <diffDisplay type=\"File\">\n        <diffBlocks>\n            <diffBlock name=\"dublincore\"/>\n            <diffBlock name=\"files\"/>\n        </diffBlocks>\n    </diffDisplay>\n    <diffDisplay enabled=\"false\" type=\"Note\"/>\n</code>\n",
              "documentationHtml": "<p>\n</p><pre>\nA diffDisplay contribution defines which diffBlocks will be\ndisplayed in the document diff view for a given\ndocument type.\nThe order matters.\n<p>\nIf the 2 diffed documents have the same type,\nthe diffDisplay matching this type\nis used, otherwise or if such\na diffDisplay does not exist, the default diff display is used.\nThe default diff\ndisplay\ntakes into account every different field\nof every common schema between the\ncompared documents, in an\nundefined order.\n</p></pre>\n<p></p><pre><code>    &lt;diffDisplay type&#61;&#34;File&#34;&gt;\n        &lt;diffBlocks&gt;\n            &lt;diffBlock name&#61;&#34;dublincore&#34;/&gt;\n            &lt;diffBlock name&#61;&#34;files&#34;/&gt;\n        &lt;/diffBlocks&gt;\n    &lt;/diffDisplay&gt;\n    &lt;diffDisplay enabled&#61;&#34;false&#34; type&#61;&#34;Note&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.service.DiffDisplayService/ExtensionPoints/org.nuxeo.ecm.diff.service.DiffDisplayService--diffDisplay",
              "id": "org.nuxeo.ecm.diff.service.DiffDisplayService--diffDisplay",
              "label": "diffDisplay (org.nuxeo.ecm.diff.service.DiffDisplayService)",
              "name": "diffDisplay",
              "version": "2023.7.9"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.diff.service.DiffDisplayService",
              "descriptors": [
                "org.nuxeo.ecm.diff.service.impl.DiffBlockDescriptor"
              ],
              "documentation": "<pre>\n        A diffBlock contribution defines which fields will be\n        displayed in the diff display block.\n        The order matters.\n\n        For\n        complex types, items can be\n        defined to specifiy which sub-fields\n        must be displayed and in which order.\n      </pre>\n<code>\n    <diffBlock label=\"label.diffBlock.dublincore\" name=\"dublincore\">\n        <fields>\n            <field name=\"description\" schema=\"dublincore\"/>\n            <field name=\"coverage\" schema=\"dublincore\"/>\n            <field name=\"created\" schema=\"dublincore\"/>\n            <field name=\"modified\" schema=\"dublincore\"/>\n        </fields>\n    </diffBlock>\n    <diffBlock label=\"label.diffBlock.files\" name=\"files\">\n        <fields>\n            <field displayContentDiffLinks=\"true\" name=\"content\" schema=\"file\"/>\n            <field name=\"files\" schema=\"files\">\n                <items>\n                    <!-- Display the file only, not the filename which is managed by the file widget type -->\n                    <item displayContentDiffLinks=\"true\" name=\"file\"/>\n                </items>\n            </field>\n        </fields>\n    </diffBlock>\n</code>\n",
              "documentationHtml": "<p>\n</p><pre>\nA diffBlock contribution defines which fields will be\ndisplayed in the diff display block.\nThe order matters.\n<p>\nFor\ncomplex types, items can be\ndefined to specifiy which sub-fields\nmust be displayed and in which order.\n</p></pre>\n<p></p><pre><code>    &lt;diffBlock label&#61;&#34;label.diffBlock.dublincore&#34; name&#61;&#34;dublincore&#34;&gt;\n        &lt;fields&gt;\n            &lt;field name&#61;&#34;description&#34; schema&#61;&#34;dublincore&#34;/&gt;\n            &lt;field name&#61;&#34;coverage&#34; schema&#61;&#34;dublincore&#34;/&gt;\n            &lt;field name&#61;&#34;created&#34; schema&#61;&#34;dublincore&#34;/&gt;\n            &lt;field name&#61;&#34;modified&#34; schema&#61;&#34;dublincore&#34;/&gt;\n        &lt;/fields&gt;\n    &lt;/diffBlock&gt;\n    &lt;diffBlock label&#61;&#34;label.diffBlock.files&#34; name&#61;&#34;files&#34;&gt;\n        &lt;fields&gt;\n            &lt;field displayContentDiffLinks&#61;&#34;true&#34; name&#61;&#34;content&#34; schema&#61;&#34;file&#34;/&gt;\n            &lt;field name&#61;&#34;files&#34; schema&#61;&#34;files&#34;&gt;\n                &lt;items&gt;\n                    &lt;!-- Display the file only, not the filename which is managed by the file widget type --&gt;\n                    &lt;item displayContentDiffLinks&#61;&#34;true&#34; name&#61;&#34;file&#34;/&gt;\n                &lt;/items&gt;\n            &lt;/field&gt;\n        &lt;/fields&gt;\n    &lt;/diffBlock&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.service.DiffDisplayService/ExtensionPoints/org.nuxeo.ecm.diff.service.DiffDisplayService--diffBlock",
              "id": "org.nuxeo.ecm.diff.service.DiffDisplayService--diffBlock",
              "label": "diffBlock (org.nuxeo.ecm.diff.service.DiffDisplayService)",
              "name": "diffBlock",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.service.DiffDisplayService",
          "name": "org.nuxeo.ecm.diff.service.DiffDisplayService",
          "requirements": [],
          "resolutionOrder": 179,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.diff.service.DiffDisplayService",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.service.DiffDisplayService/Services/org.nuxeo.ecm.diff.service.DiffDisplayService",
              "id": "org.nuxeo.ecm.diff.service.DiffDisplayService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 828,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.service.DiffDisplayService\">\n\n  <documentation>\n    This service provides an extension point to manage\n    document diff display.\n\n    @author\n    Antoine Taillefer\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.diff.service.impl.DiffDisplayServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.diff.service.DiffDisplayService\" />\n  </service>\n\n  <extension-point name=\"diffDefaultDisplay\">\n\n    <documentation>\n      <pre>\n        The diffDefaultDisplay extension point allows you to\n        contribute a diffExcludedFields contribution to define a\n        set of\n        fields from a given schema that will be\n        excluded from the default\n        diff display in the document diff view\n        (the default diff display\n        takes into account every different field of every common schema\n        between the compared\n        documents, in an undefined order).\n\n        If no\n        fields are specified, the whole schema is excluded.\n      </pre>\n      <code>\n        <diffExcludedFields schema=\"common\" />\n        <diffExcludedFields schema=\"dublincore\">\n          <fields>\n            <field name=\"subjects\" />\n            <field name=\"modified\" />\n          </fields>\n        </diffExcludedFields>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.diff.service.impl.DiffExcludedFieldsDescriptor\" />\n\n    <documentation>\n      <pre>\n        The diffDefaultDisplay extension point also allows you to\n        contribute a diffComplexField contribution to define\n        a set of\n        items from a given complex property that will be\n        included or\n        excluded from the default\n        diff display in the\n        document diff view.\n        Order matters for included items.\n      </pre>\n      <code>\n        <diffComplexField schema=\"complextypes\" name=\"complex\">\n          <includedItems>\n            <item name=\"dateItem\" />\n            <item name=\"stringItem\" />\n          </includedItems>\n        </diffComplexField>\n\n        <diffComplexField schema=\"complextypes\" name=\"complexList\">\n          <excludedItems>\n            <item name=\"stringItem\" />\n            <item name=\"dateItem\" />\n          </excludedItems>\n        </diffComplexField>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.diff.service.impl.DiffComplexFieldDescriptor\" />\n\n  </extension-point>\n\n\n  <extension-point name=\"diffDisplay\">\n    <documentation>\n\n      <pre>\n        A diffDisplay contribution defines which diffBlocks will be\n        displayed in the document diff view for a given\n        document type.\n        The order matters.\n\n        If the 2 diffed documents have the same type,\n        the diffDisplay matching this type\n        is used, otherwise or if such\n        a diffDisplay does not exist, the default diff display is used.\n        The default diff\n        display\n        takes into account every different field\n        of every common schema between the\n        compared documents, in an\n        undefined order.\n      </pre>\n\n      <code>\n        <diffDisplay type=\"File\">\n          <diffBlocks>\n            <diffBlock name=\"dublincore\" />\n            <diffBlock name=\"files\" />\n          </diffBlocks>\n        </diffDisplay>\n        <diffDisplay type=\"Note\" enabled=\"false\" />\n      </code>\n\n    </documentation>\n    <object class=\"org.nuxeo.ecm.diff.service.impl.DiffDisplayDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"diffBlock\">\n    <documentation>\n\n      <pre>\n        A diffBlock contribution defines which fields will be\n        displayed in the diff display block.\n        The order matters.\n\n        For\n        complex types, items can be\n        defined to specifiy which sub-fields\n        must be displayed and in which order.\n      </pre>\n\n      <code>\n        <diffBlock name=\"dublincore\" label=\"label.diffBlock.dublincore\">\n          <fields>\n            <field schema=\"dublincore\" name=\"description\" />\n            <field schema=\"dublincore\" name=\"coverage\" />\n            <field schema=\"dublincore\" name=\"created\" />\n            <field schema=\"dublincore\" name=\"modified\" />\n          </fields>\n        </diffBlock>\n        <diffBlock name=\"files\" label=\"label.diffBlock.files\">\n          <fields>\n            <field schema=\"file\" name=\"content\" displayContentDiffLinks=\"true\" />\n            <field schema=\"files\" name=\"files\">\n              <items>\n                <!-- Display the file only, not the filename which is managed by the file widget type -->\n                <item name=\"file\" displayContentDiffLinks=\"true\" />\n              </items>\n            </field>\n          </fields>\n        </diffBlock>\n      </code>\n\n    </documentation>\n    <object class=\"org.nuxeo.ecm.diff.service.impl.DiffBlockDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/diff-display-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.diff.service.DiffDisplayService--diffDefaultDisplay",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.service.DiffDisplayService.contrib/Contributions/org.nuxeo.ecm.diff.service.DiffDisplayService.contrib--diffDefaultDisplay",
              "id": "org.nuxeo.ecm.diff.service.DiffDisplayService.contrib--diffDefaultDisplay",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.diff.service.DiffDisplayService",
                "name": "org.nuxeo.ecm.diff.service.DiffDisplayService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"diffDefaultDisplay\" target=\"org.nuxeo.ecm.diff.service.DiffDisplayService\">\n\n    <diffExcludedFields schema=\"common\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.diff.service.DiffDisplayService--diffDisplay",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.service.DiffDisplayService.contrib/Contributions/org.nuxeo.ecm.diff.service.DiffDisplayService.contrib--diffDisplay",
              "id": "org.nuxeo.ecm.diff.service.DiffDisplayService.contrib--diffDisplay",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.diff.service.DiffDisplayService",
                "name": "org.nuxeo.ecm.diff.service.DiffDisplayService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"diffDisplay\" target=\"org.nuxeo.ecm.diff.service.DiffDisplayService\">\n\n    <diffDisplay type=\"Folder\">\n      <diffBlocks>\n        <diffBlock name=\"dublincore\"/>\n      </diffBlocks>\n    </diffDisplay>\n\n    <diffDisplay type=\"File\">\n      <diffBlocks>\n        <diffBlock name=\"dublincore\"/>\n        <diffBlock name=\"files\"/>\n      </diffBlocks>\n    </diffDisplay>\n\n    <diffDisplay type=\"Note\">\n      <diffBlocks>\n        <diffBlock name=\"dublincore\"/>\n        <diffBlock name=\"note\"/>\n        <diffBlock name=\"files\"/>\n      </diffBlocks>\n    </diffDisplay>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.diff.service.DiffDisplayService--diffBlock",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.service.DiffDisplayService.contrib/Contributions/org.nuxeo.ecm.diff.service.DiffDisplayService.contrib--diffBlock",
              "id": "org.nuxeo.ecm.diff.service.DiffDisplayService.contrib--diffBlock",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.diff.service.DiffDisplayService",
                "name": "org.nuxeo.ecm.diff.service.DiffDisplayService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"diffBlock\" target=\"org.nuxeo.ecm.diff.service.DiffDisplayService\">\n\n    <diffBlock name=\"dublincore\">\n      <properties mode=\"any\">\n        <property name=\"label\">label.diffBlock.dublincore</property>\n      </properties>\n      <fields>\n        <field name=\"description\" schema=\"dublincore\"/>\n        <!-- Display the \"dam_common\" schema fields in case the DAM package\n          is installed -->\n        <field name=\"author\" schema=\"dam_common\"/>\n        <field name=\"authoringDate\" schema=\"dam_common\"/>\n        <field name=\"nature\" schema=\"dublincore\"/>\n        <field name=\"subjects\" schema=\"dublincore\"/>\n        <field name=\"rights\" schema=\"dublincore\"/>\n        <field name=\"source\" schema=\"dublincore\"/>\n        <field name=\"coverage\" schema=\"dublincore\"/>\n        <field name=\"created\" schema=\"dublincore\"/>\n        <field name=\"modified\" schema=\"dublincore\"/>\n        <field name=\"format\" schema=\"dublincore\"/>\n        <field name=\"language\" schema=\"dublincore\"/>\n        <field name=\"expired\" schema=\"dublincore\"/>\n        <field name=\"creator\" schema=\"dublincore\"/>\n        <field name=\"contributors\" schema=\"dublincore\"/>\n        <field name=\"lastContributor\" schema=\"dublincore\"/>\n      </fields>\n      <templates>\n        <template mode=\"any\">/layouts/layout_diff_template.xhtml\n        </template>\n      </templates>\n    </diffBlock>\n\n    <diffBlock name=\"files\">\n      <properties mode=\"any\">\n        <property name=\"label\">label.diffBlock.files</property>\n      </properties>\n      <fields>\n        <field displayContentDiffLinks=\"true\" name=\"content\" schema=\"file\"/>\n        <field name=\"files\" schema=\"files\">\n          <items>\n            <!-- Display the file only, not the filename which is managed\n              by the file widget type -->\n            <item displayContentDiffLinks=\"true\" name=\"file\"/>\n          </items>\n        </field>\n      </fields>\n      <templates>\n        <template mode=\"any\">/layouts/layout_diff_template.xhtml\n        </template>\n      </templates>\n    </diffBlock>\n\n    <diffBlock name=\"note\">\n      <properties mode=\"any\">\n        <property name=\"label\">label.diffBlock.note</property>\n      </properties>\n      <fields>\n        <field displayContentDiffLinks=\"true\" name=\"note\" schema=\"note\"/>\n      </fields>\n      <templates>\n        <template mode=\"any\">/layouts/layout_diff_template.xhtml\n        </template>\n      </templates>\n    </diffBlock>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.service.DiffDisplayService.contrib",
          "name": "org.nuxeo.ecm.diff.service.DiffDisplayService.contrib",
          "requirements": [],
          "resolutionOrder": 180,
          "services": [],
          "startOrder": 190,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.service.DiffDisplayService.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.diff.service.DiffDisplayService\"\n    point=\"diffDefaultDisplay\">\n\n    <diffExcludedFields schema=\"common\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.diff.service.DiffDisplayService\"\n    point=\"diffDisplay\">\n\n    <diffDisplay type=\"Folder\">\n      <diffBlocks>\n        <diffBlock name=\"dublincore\" />\n      </diffBlocks>\n    </diffDisplay>\n\n    <diffDisplay type=\"File\">\n      <diffBlocks>\n        <diffBlock name=\"dublincore\" />\n        <diffBlock name=\"files\" />\n      </diffBlocks>\n    </diffDisplay>\n\n    <diffDisplay type=\"Note\">\n      <diffBlocks>\n        <diffBlock name=\"dublincore\" />\n        <diffBlock name=\"note\" />\n        <diffBlock name=\"files\" />\n      </diffBlocks>\n    </diffDisplay>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.diff.service.DiffDisplayService\"\n    point=\"diffBlock\">\n\n    <diffBlock name=\"dublincore\">\n      <properties mode=\"any\">\n        <property name=\"label\">label.diffBlock.dublincore</property>\n      </properties>\n      <fields>\n        <field schema=\"dublincore\" name=\"description\" />\n        <!-- Display the \"dam_common\" schema fields in case the DAM package\n          is installed -->\n        <field schema=\"dam_common\" name=\"author\" />\n        <field schema=\"dam_common\" name=\"authoringDate\" />\n        <field schema=\"dublincore\" name=\"nature\" />\n        <field schema=\"dublincore\" name=\"subjects\" />\n        <field schema=\"dublincore\" name=\"rights\" />\n        <field schema=\"dublincore\" name=\"source\" />\n        <field schema=\"dublincore\" name=\"coverage\" />\n        <field schema=\"dublincore\" name=\"created\" />\n        <field schema=\"dublincore\" name=\"modified\" />\n        <field schema=\"dublincore\" name=\"format\" />\n        <field schema=\"dublincore\" name=\"language\" />\n        <field schema=\"dublincore\" name=\"expired\" />\n        <field schema=\"dublincore\" name=\"creator\" />\n        <field schema=\"dublincore\" name=\"contributors\" />\n        <field schema=\"dublincore\" name=\"lastContributor\" />\n      </fields>\n      <templates>\n        <template mode=\"any\">/layouts/layout_diff_template.xhtml\n        </template>\n      </templates>\n    </diffBlock>\n\n    <diffBlock name=\"files\">\n      <properties mode=\"any\">\n        <property name=\"label\">label.diffBlock.files</property>\n      </properties>\n      <fields>\n        <field schema=\"file\" name=\"content\"\n          displayContentDiffLinks=\"true\" />\n        <field schema=\"files\" name=\"files\">\n          <items>\n            <!-- Display the file only, not the filename which is managed\n              by the file widget type -->\n            <item name=\"file\" displayContentDiffLinks=\"true\" />\n          </items>\n        </field>\n      </fields>\n      <templates>\n        <template mode=\"any\">/layouts/layout_diff_template.xhtml\n        </template>\n      </templates>\n    </diffBlock>\n\n    <diffBlock name=\"note\">\n      <properties mode=\"any\">\n        <property name=\"label\">label.diffBlock.note</property>\n      </properties>\n      <fields>\n        <field schema=\"note\" name=\"note\" displayContentDiffLinks=\"true\" />\n      </fields>\n      <templates>\n        <template mode=\"any\">/layouts/layout_diff_template.xhtml\n        </template>\n      </templates>\n    </diffBlock>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/diff-display-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager--widgettypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.widgets.contrib/Contributions/org.nuxeo.ecm.diff.widgets.contrib--widgettypes",
              "id": "org.nuxeo.ecm.diff.widgets.contrib--widgettypes",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "name": "org.nuxeo.ecm.platform.forms.layout.WebLayoutManager",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgettypes\" target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\">\n\n    <widgetType name=\"version_diff\">\n      <configuration>\n        <title>Diff between live document and a version</title>\n        <sinceVersion>5.7</sinceVersion>\n        <description>\n          <p>\n            The version_diff widget displays difference between the live document and a specific version. If\n            nothing is specified, last version is compared.\n          </p>\n          <p>\n            It accepts the following properties:\n            <ul>\n              <li>\n                versionLabel: the name of the expected label, defautl is \"lastVersion\"\n              </li>\n              <li>\n                propertyXPath: the property XPath, default is \"file:content\"\n              </li>\n              <li>\n                height: the iFrame height, default is \"400px\"\n              </li>\n            </ul>\n          </p>\n        </description>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <categories>\n          <category>summary</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/version_diff_widget_template.xhtml</property>\n    </widgetType>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.forms.layout.LayoutStore--widgets",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.widgets.contrib/Contributions/org.nuxeo.ecm.diff.widgets.contrib--widgets",
              "id": "org.nuxeo.ecm.diff.widgets.contrib--widgets",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "name": "org.nuxeo.ecm.platform.forms.layout.LayoutStore",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"widgets\" target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\">\n\n    <!-- Generic widgets: name = diff property type, see: org.nuxeo.ecm.diff.model.PropertyType -->\n    <widget name=\"string\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">text</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"boolean\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">checkbox</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"date\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">datetime</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"integer\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">int</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"long\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">int</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"double\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">double</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"content\" type=\"file\">\n      <categories>\n        <category>diff</category>\n      </categories>\n    </widget>\n\n    <widget name=\"complex\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"display\">inline</property>\n        <property name=\"template\">\n          /widgets/complex_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"scalarList\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"display\">inline</property>\n        <property name=\"displayAllItems\">false</property>\n        <property name=\"displayItemIndexes\">true</property>\n        <property name=\"template\">\n          /widgets/list_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"contentList\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"display\">inline</property>\n        <property name=\"displayAllItems\">false</property>\n        <property name=\"displayItemIndexes\">true</property>\n        <property name=\"template\">\n          /widgets/list_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"complexList\" type=\"list\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"display\">inline</property>\n        <property name=\"displayAllItems\">false</property>\n        <property name=\"displayItemIndexes\">true</property>\n        <property name=\"template\">\n          /widgets/list_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"contentDiffLinks\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/content_diff_links_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <!-- Specific widgets: name = property xpath -->\n    <widget name=\"dublincore:created\" type=\"datetime\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.created</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:modified\" type=\"datetime\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.modified</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:issued\" type=\"datetime\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.issueDate</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:valid\" type=\"datetime\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.validationDate</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:expired\" type=\"datetime\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.expired</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"note:note\" type=\"richtext_with_mimetype\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.note.note</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"translatedHtml\">\n          #{noteActions.translateImageLinks(field_0)}\n        </property>\n        <property name=\"cssClass\">note_content_block</property>\n      </properties>\n    </widget>\n\n    <widget name=\"file:content\" type=\"file\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.summary.download.file</label>\n      </labels>\n      <translated>true</translated>\n    </widget>\n\n    <widget name=\"files:files\" type=\"list\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.summary.download.attachments</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"display\">inline</property>\n        <property name=\"displayAllItems\">false</property>\n        <property name=\"displayItemIndexes\">true</property>\n        <property name=\"template\">\n          /widgets/list_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:nature\" type=\"selectOneDirectory\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.nature</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"directoryName\">nature</property>\n        <property name=\"localize\">true</property>\n        <property name=\"ordering\">ordering,label</property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:subjects/item\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.subjects.item</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/subjects_item_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:coverage\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.coverage</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/coverage_widget.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:contributors/item\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.contributors.item</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/contributors_item_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:lastContributor\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.lastContributor</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/single_user_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.widgets.contrib",
          "name": "org.nuxeo.ecm.diff.widgets.contrib",
          "requirements": [],
          "resolutionOrder": 181,
          "services": [],
          "startOrder": 194,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.widgets.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.WebLayoutManager\" point=\"widgettypes\">\n\n    <widgetType name=\"version_diff\">\n      <configuration>\n        <title>Diff between live document and a version</title>\n        <sinceVersion>5.7</sinceVersion>\n        <description>\n          <p>\n            The version_diff widget displays difference between the live document and a specific version. If\n            nothing is specified, last version is compared.\n          </p>\n          <p>\n            It accepts the following properties:\n            <ul>\n              <li>\n                versionLabel: the name of the expected label, defautl is \"lastVersion\"\n              </li>\n              <li>\n                propertyXPath: the property XPath, default is \"file:content\"\n              </li>\n              <li>\n                height: the iFrame height, default is \"400px\"\n              </li>\n            </ul>\n          </p>\n        </description>\n        <supportedModes>\n          <mode>view</mode>\n        </supportedModes>\n        <categories>\n          <category>summary</category>\n        </categories>\n      </configuration>\n      <handler-class>\n        org.nuxeo.ecm.platform.forms.layout.facelets.plugins.TemplateWidgetTypeHandler\n      </handler-class>\n      <property name=\"template\">/widgets/version_diff_widget_template.xhtml</property>\n    </widgetType>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n             point=\"widgets\">\n\n    <!-- Generic widgets: name = diff property type, see: org.nuxeo.ecm.diff.model.PropertyType -->\n    <widget name=\"string\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">text</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"boolean\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">checkbox</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"date\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">datetime</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"integer\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">int</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"long\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">int</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"double\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"widgetType\">double</property>\n        <property name=\"template\">\n          /widgets/generic_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"content\" type=\"file\">\n      <categories>\n        <category>diff</category>\n      </categories>\n    </widget>\n\n    <widget name=\"complex\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"display\">inline</property>\n        <property name=\"template\">\n          /widgets/complex_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"scalarList\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"display\">inline</property>\n        <property name=\"displayAllItems\">false</property>\n        <property name=\"displayItemIndexes\">true</property>\n        <property name=\"template\">\n          /widgets/list_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"contentList\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"display\">inline</property>\n        <property name=\"displayAllItems\">false</property>\n        <property name=\"displayItemIndexes\">true</property>\n        <property name=\"template\">\n          /widgets/list_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"complexList\" type=\"list\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"display\">inline</property>\n        <property name=\"displayAllItems\">false</property>\n        <property name=\"displayItemIndexes\">true</property>\n        <property name=\"template\">\n          /widgets/list_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"contentDiffLinks\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/content_diff_links_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <!-- Specific widgets: name = property xpath -->\n    <widget name=\"dublincore:created\" type=\"datetime\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.created</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:modified\" type=\"datetime\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.modified</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:issued\" type=\"datetime\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.issueDate</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:valid\" type=\"datetime\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.validationDate</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:expired\" type=\"datetime\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.expired</label>\n      </labels>\n      <translated>true</translated>\n      <properties widgetMode=\"any\">\n        <property name=\"pattern\">#{nxu:basicDateAndTimeFormatter()}\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"note:note\" type=\"richtext_with_mimetype\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.note.note</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"translatedHtml\">\n          #{noteActions.translateImageLinks(field_0)}\n        </property>\n        <property name=\"cssClass\">note_content_block</property>\n      </properties>\n    </widget>\n\n    <widget name=\"file:content\" type=\"file\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.summary.download.file</label>\n      </labels>\n      <translated>true</translated>\n    </widget>\n\n    <widget name=\"files:files\" type=\"list\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.summary.download.attachments</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"display\">inline</property>\n        <property name=\"displayAllItems\">false</property>\n        <property name=\"displayItemIndexes\">true</property>\n        <property name=\"template\">\n          /widgets/list_diff_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:nature\" type=\"selectOneDirectory\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.nature</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"directoryName\">nature</property>\n        <property name=\"localize\">true</property>\n        <property name=\"ordering\">ordering,label</property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:subjects/item\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.subjects.item</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/subjects_item_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:coverage\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.coverage</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/coverage_widget.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:contributors/item\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.contributors.item</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"template\">/widgets/contributors_item_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n    <widget name=\"dublincore:lastContributor\" type=\"template\">\n      <categories>\n        <category>diff</category>\n      </categories>\n      <labels>\n        <label mode=\"any\">label.dublincore.lastContributor</label>\n      </labels>\n      <translated>true</translated>\n      <properties mode=\"any\">\n        <property name=\"template\">\n          /widgets/single_user_widget_template.xhtml\n        </property>\n      </properties>\n    </widget>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/diff-widgets-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      GET\n      /nuxeo/restAPI/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}?conversionType=(conversionType)&amp;locale={locale}\n    \n",
              "documentationHtml": "<p>\nGET\n/nuxeo/restAPI/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}?conversionType&#61;(conversionType)&amp;locale&#61;{locale}\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService--restlets",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.content.restAPI.contrib/Contributions/org.nuxeo.ecm.diff.content.restAPI.contrib--restlets",
              "id": "org.nuxeo.ecm.diff.content.restAPI.contrib--restlets",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
                "name": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"restlets\" target=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\">\n\n    <documentation>\n      GET\n      /nuxeo/restAPI/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}?conversionType=(conversionType)&amp;locale={locale}\n    </documentation>\n\n    <restletPlugin class=\"org.nuxeo.ecm.diff.content.restlet.ContentDiffRestlet\" enabled=\"true\" name=\"contentDiff\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/\n        </urlPattern>\n        <urlPattern>/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}\n        </urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.content.restAPI.contrib",
          "name": "org.nuxeo.ecm.diff.content.restAPI.contrib",
          "requirements": [],
          "resolutionOrder": 182,
          "services": [],
          "startOrder": 189,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.content.restAPI.contrib\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\"\n    point=\"restlets\">\n\n    <documentation>\n      GET\n      /nuxeo/restAPI/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}?conversionType=(conversionType)&amp;locale={locale}\n    </documentation>\n\n    <restletPlugin name=\"contentDiff\"\n      class=\"org.nuxeo.ecm.diff.content.restlet.ContentDiffRestlet\"\n      enabled=\"true\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/\n        </urlPattern>\n        <urlPattern>/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}\n        </urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-diff-restAPI-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.theme.styling.service--pages",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.theme/Contributions/org.nuxeo.ecm.diff.theme--pages",
              "id": "org.nuxeo.ecm.diff.theme--pages",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.theme.styling.service",
                "name": "org.nuxeo.theme.styling.service",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"pages\" target=\"org.nuxeo.theme.styling.service\">\n\n    <page name=\"galaxy/default\">\n      <resources append=\"true\">\n        <resource>diff.css</resource>\n      </resources>\n    </page>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.theme/Contributions/org.nuxeo.ecm.diff.theme--resources",
              "id": "org.nuxeo.ecm.diff.theme--resources",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n\n    <resource name=\"diff.css\">\n      <path>themes/css/diff_result.css</path>\n    </resource>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf/org.nuxeo.ecm.diff.theme",
          "name": "org.nuxeo.ecm.diff.theme",
          "requirements": [
            "org.nuxeo.theme.nuxeo.webapp"
          ],
          "resolutionOrder": 660,
          "services": [],
          "startOrder": 193,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.theme\">\n\n  <require>org.nuxeo.theme.nuxeo.webapp</require>\n\n  <!-- Theme pages -->\n  <extension target=\"org.nuxeo.theme.styling.service\" point=\"pages\">\n\n    <page name=\"galaxy/default\">\n      <resources append=\"true\">\n        <resource>diff.css</resource>\n      </resources>\n    </page>\n\n  </extension>\n\n  <!-- Styles -->\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\n\n    <resource name=\"diff.css\">\n      <path>themes/css/diff_result.css</path>\n    </resource>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/diff-theme-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-diff-jsf-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm",
      "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.jsf",
      "id": "org.nuxeo.diff.jsf",
      "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: 5.6\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.diff.jsf\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.diff.jsf;singleton:=true\r\nNuxeo-Component: OSGI-INF/diff-actions-contrib.xml,OSGI-INF/diff-display\r\n -service.xml,OSGI-INF/diff-display-contrib.xml,OSGI-INF/diff-widgets-co\r\n ntrib.xml,OSGI-INF/diff-theme-contrib.xml,OSGI-INF/content-diff-restAPI\r\n -contrib.xml\r\n\r\n",
      "maxResolutionOrder": 660,
      "minResolutionOrder": 178,
      "packages": [
        "nuxeo-diff"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-video-rest",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.video",
          "org.nuxeo.ecm.platform.video.jsf",
          "org.nuxeo.ecm.platform.video.rest"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video",
        "id": "grp:org.nuxeo.ecm.platform.video",
        "name": "org.nuxeo.ecm.platform.video",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.video.rest",
      "components": [],
      "fileName": "nuxeo-platform-video-rest-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.video/org.nuxeo.ecm.platform.video.rest",
      "id": "org.nuxeo.ecm.platform.video.rest",
      "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: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Video REST\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.video.rest;singleton:=true\r\nFragment-Host: org.nuxeo.ecm.platform.restapi.server\r\nBundle-Vendor: Nuxeo\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-automation-io",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.automation.core",
          "org.nuxeo.ecm.automation.features",
          "org.nuxeo.ecm.automation.io",
          "org.nuxeo.ecm.automation.jsf",
          "org.nuxeo.ecm.automation.scripting",
          "org.nuxeo.ecm.automation.server"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.automation",
        "id": "grp:org.nuxeo.ecm.automation",
        "name": "org.nuxeo.ecm.automation",
        "parentIds": [],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.automation.io",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.automation.io.services.IOComponent--codecs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.io/org.nuxeo.ecm.automation.io.services.IOComponent.codec.contrib/Contributions/org.nuxeo.ecm.automation.io.services.IOComponent.codec.contrib--codecs",
              "id": "org.nuxeo.ecm.automation.io.services.IOComponent.codec.contrib--codecs",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.io.services.IOComponent",
                "name": "org.nuxeo.ecm.automation.io.services.IOComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"codecs\" target=\"org.nuxeo.ecm.automation.io.services.IOComponent\">\n    <codec class=\"org.nuxeo.ecm.automation.io.services.codec.DocumentModelCodec\"/>\n    <codec class=\"org.nuxeo.ecm.automation.io.services.codec.NuxeoPrincipalCodec\"/>\n    <codec class=\"org.nuxeo.ecm.automation.io.services.codec.BulkCodec\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.io/org.nuxeo.ecm.automation.io.services.IOComponent.codec.contrib",
          "name": "org.nuxeo.ecm.automation.io.services.IOComponent.codec.contrib",
          "requirements": [],
          "resolutionOrder": 67,
          "services": [],
          "startOrder": 88,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.automation.io.services.IOComponent.codec.contrib\">\n\n  <extension point=\"codecs\" target=\"org.nuxeo.ecm.automation.io.services.IOComponent\">\n    <codec class=\"org.nuxeo.ecm.automation.io.services.codec.DocumentModelCodec\" />\n    <codec class=\"org.nuxeo.ecm.automation.io.services.codec.NuxeoPrincipalCodec\" />\n    <codec class=\"org.nuxeo.ecm.automation.io.services.codec.BulkCodec\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/codec-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.automation.server.AutomationServer--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.io/org.nuxeo.ecm.automation.server.marshallers/Contributions/org.nuxeo.ecm.automation.server.marshallers--marshallers",
              "id": "org.nuxeo.ecm.automation.server.marshallers--marshallers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <marshaller>\n      <reader>org.nuxeo.ecm.automation.jaxrs.io.operations.JsonRequestReader</reader>\n      <reader>org.nuxeo.ecm.automation.jaxrs.io.operations.UrlEncodedFormRequestReader</reader>\n      <reader>org.nuxeo.ecm.automation.jaxrs.io.documents.BusinessAdapterReader</reader>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.operations.JsonAutomationInfoWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.documents.BlobsWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.JsonLoginInfoWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.operations.JsonOperationWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.operations.JsonHtmlOperationWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.JsonTreeWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.JsonAdapterWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.JsonRecordSetWriter</writer>\n      <!-- delegates marshalling to nuxeo-core-io MarshallerRegistry service -->\n      <writer>org.nuxeo.ecm.webengine.jaxrs.coreiodelegate.CoreIODelegate</writer>\n    </marshaller>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.io/org.nuxeo.ecm.automation.server.marshallers",
          "name": "org.nuxeo.ecm.automation.server.marshallers",
          "requirements": [
            "org.nuxeo.ecm.platform.contentview.json.marshallers"
          ],
          "resolutionOrder": 374,
          "services": [],
          "startOrder": 94,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.automation.server.marshallers\">\n  <!-- this is needed by JsonOperationWriter -->\n  <require>org.nuxeo.ecm.platform.contentview.json.marshallers</require>\n  <extension point=\"marshallers\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <marshaller>\n      <reader>org.nuxeo.ecm.automation.jaxrs.io.operations.JsonRequestReader</reader>\n      <reader>org.nuxeo.ecm.automation.jaxrs.io.operations.UrlEncodedFormRequestReader</reader>\n      <reader>org.nuxeo.ecm.automation.jaxrs.io.documents.BusinessAdapterReader</reader>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.operations.JsonAutomationInfoWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.documents.BlobsWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.JsonLoginInfoWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.operations.JsonOperationWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.operations.JsonHtmlOperationWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.JsonTreeWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.JsonAdapterWriter</writer>\n      <writer>org.nuxeo.ecm.automation.jaxrs.io.JsonRecordSetWriter</writer>\n      <!-- delegates marshalling to nuxeo-core-io MarshallerRegistry service -->\n      <writer>org.nuxeo.ecm.webengine.jaxrs.coreiodelegate.CoreIODelegate</writer>\n    </marshaller>\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/marshaller-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.automation.io.services.IOComponent",
          "declaredStartOrder": null,
          "documentation": "@author Damien Metzler (dmetzler@nuxeo.com)\n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.automation.io.services.IOComponent",
              "descriptors": [
                "org.nuxeo.ecm.automation.io.services.codec.CodecDescriptor"
              ],
              "documentation": "JSON codecs for adapting marshalling objects\n",
              "documentationHtml": "<p>\nJSON codecs for adapting marshalling objects</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.io/org.nuxeo.ecm.automation.io.services.IOComponent/ExtensionPoints/org.nuxeo.ecm.automation.io.services.IOComponent--codecs",
              "id": "org.nuxeo.ecm.automation.io.services.IOComponent--codecs",
              "label": "codecs (org.nuxeo.ecm.automation.io.services.IOComponent)",
              "name": "codecs",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.io/org.nuxeo.ecm.automation.io.services.IOComponent",
          "name": "org.nuxeo.ecm.automation.io.services.IOComponent",
          "requirements": [
            "org.nuxeo.ecm.webengine.core.service.json"
          ],
          "resolutionOrder": 934,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.automation.io.services.IOComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.io/org.nuxeo.ecm.automation.io.services.IOComponent/Services/org.nuxeo.ecm.automation.io.services.codec.ObjectCodecService",
              "id": "org.nuxeo.ecm.automation.io.services.codec.ObjectCodecService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 787,
          "version": "2023.7.9",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.automation.io.services.IOComponent\">\n\n  <require>org.nuxeo.ecm.webengine.core.service.json</require>\n\n\n  <documentation>@author Damien Metzler (dmetzler@nuxeo.com)</documentation>\n\n  <implementation class=\"org.nuxeo.ecm.automation.io.services.IOComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.automation.io.services.codec.ObjectCodecService\" />\n  </service>\n\n  <extension-point name=\"codecs\">\n    <documentation>JSON codecs for adapting marshalling objects</documentation>\n    <object class=\"org.nuxeo.ecm.automation.io.services.codec.CodecDescriptor\" />\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/codec-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-automation-io-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.automation",
      "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.io",
      "id": "org.nuxeo.ecm.automation.io",
      "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: 5.7.2.qualifier\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: nuxeo-automation-io\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.ecm.automation.io;singleton:=true\r\nNuxeo-Component: OSGI-INF/codec-service.xml,OSGI-INF/marshaller-contrib.\r\n xml,OSGI-INF/codec-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 934,
      "minResolutionOrder": 67,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-storage-mem",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.storage",
          "org.nuxeo.ecm.core.storage.dbs",
          "org.nuxeo.ecm.core.storage.mem",
          "org.nuxeo.ecm.core.storage.mongodb",
          "org.nuxeo.ecm.core.storage.sql",
          "org.nuxeo.ecm.core.storage.sql.management"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage",
        "id": "grp:org.nuxeo.ecm.core.storage",
        "name": "org.nuxeo.ecm.core.storage",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.core.storage.mem",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.storage.mem.MemRepositoryService",
          "declaredStartOrder": null,
          "documentation": "\n    Manages Memory repositories.\n  \n",
          "documentationHtml": "<p>\nManages Memory repositories.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.storage.mem.MemRepositoryService",
              "descriptors": [
                "org.nuxeo.ecm.core.storage.mem.MemRepositoryDescriptor"
              ],
              "documentation": "\n      Extension points to register Memory repositories. Example:\n      <code>\n    <repository isDefault=\"true\" label=\"Mem Repository\" name=\"default\">\n        <fulltext disabled=\"false\"/>\n    </repository>\n</code>\n",
              "documentationHtml": "<p>\nExtension points to register Memory repositories. Example:\n</p><p></p><pre><code>    &lt;repository isDefault&#61;&#34;true&#34; label&#61;&#34;Mem Repository&#34; name&#61;&#34;default&#34;&gt;\n        &lt;fulltext disabled&#61;&#34;false&#34;/&gt;\n    &lt;/repository&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.mem/org.nuxeo.ecm.core.storage.mem.MemRepositoryService/ExtensionPoints/org.nuxeo.ecm.core.storage.mem.MemRepositoryService--repository",
              "id": "org.nuxeo.ecm.core.storage.mem.MemRepositoryService--repository",
              "label": "repository (org.nuxeo.ecm.core.storage.mem.MemRepositoryService)",
              "name": "repository",
              "version": "2023.7.9"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.mem/org.nuxeo.ecm.core.storage.mem.MemRepositoryService",
          "name": "org.nuxeo.ecm.core.storage.mem.MemRepositoryService",
          "requirements": [
            "org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService"
          ],
          "resolutionOrder": 782,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.storage.mem.MemRepositoryService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.mem/org.nuxeo.ecm.core.storage.mem.MemRepositoryService/Services/org.nuxeo.ecm.core.storage.mem.MemRepositoryService",
              "id": "org.nuxeo.ecm.core.storage.mem.MemRepositoryService",
              "overriden": false,
              "version": "2023.7.9"
            }
          ],
          "startOrder": 820,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.mem.MemRepositoryService\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService</require>\n\n  <documentation>\n    Manages Memory repositories.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.storage.mem.MemRepositoryService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.storage.mem.MemRepositoryService\" />\n  </service>\n\n  <extension-point name=\"repository\">\n    <documentation>\n      Extension points to register Memory repositories. Example:\n      <code>\n        <repository name=\"default\" label=\"Mem Repository\" isDefault=\"true\">\n          <fulltext disabled=\"false\" />\n        </repository>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.storage.mem.MemRepositoryDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/mem-repository-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-storage-mem-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.mem",
      "id": "org.nuxeo.ecm.core.storage.mem",
      "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: 2023.7.9-t20240130-104757\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage.mem\r\nNuxeo-Component: OSGI-INF/mem-repository-service.xml\r\n\r\n",
      "maxResolutionOrder": 782,
      "minResolutionOrder": 782,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-web-resources-jsf",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.web.resources.api",
          "org.nuxeo.web.resources.core",
          "org.nuxeo.web.resources.jsf",
          "org.nuxeo.web.resources.rest",
          "org.nuxeo.web.resources.wro"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources",
        "id": "grp:org.nuxeo.web.resources",
        "name": "org.nuxeo.web.resources",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.web.resources.jsf",
      "components": [],
      "fileName": "nuxeo-web-resources-jsf-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.jsf",
      "id": "org.nuxeo.web.resources.jsf",
      "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: 1\r\nBundle-Version: 2023.7.9-t20240205-104837\r\nBundle-Name: Nuxeo Web Resources JSF\r\nBundle-SymbolicName: org.nuxeo.web.resources.jsf;singleton:=true\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [
        "nuxeo-jsf-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-comment-core",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.comment",
          "org.nuxeo.ecm.platform.comment.api",
          "org.nuxeo.ecm.platform.comment.core",
          "org.nuxeo.ecm.platform.comment.restapi",
          "org.nuxeo.ecm.platform.comment.web",
          "org.nuxeo.ecm.platform.comment.workflow"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment",
        "id": "grp:org.nuxeo.ecm.platform.comment",
        "name": "org.nuxeo.ecm.platform.comment",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.comment.core",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.relations.services.RelationService--graphs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.core/org.nuxeo.ecm.platform.comment.service.default.graph/Contributions/org.nuxeo.ecm.platform.comment.service.default.graph--graphs",
              "id": "org.nuxeo.ecm.platform.comment.service.default.graph--graphs",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.relations.services.RelationService",
                "name": "org.nuxeo.ecm.platform.relations.services.RelationService",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"graphs\" target=\"org.nuxeo.ecm.platform.relations.services.RelationService\">\n    <graph name=\"documentComments\" type=\"core\">\n      <option name=\"doctype\">CommentRelation</option>\n      <namespaces>\n        <namespace name=\"comment\">http://www.nuxeo.org/comments/uid</namespace>\n        <namespace name=\"isCommentFor\">\n          http://www.nuxeo.org/predicates/isCommentFor\n        </namespace>\n        <namespace name=\"document\">http://www.nuxeo.org/document/uid</namespace>\n      </namespaces>\n    </graph>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.core/org.nuxeo.ecm.platform.comment.service.default.graph",
          "name": "org.nuxeo.ecm.platform.comment.service.default.graph",
          "requirements": [],
          "resolutionOrder": 324,
          "services": [],
          "startOrder": 290,
          "version": "2023.7.9",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.service.default.graph\">\n\n  <extension target=\"org.nuxeo.ecm.platform.relations.services.RelationService\"\n    point=\"graphs\">\n    <graph name=\"documentComments\" type=\"core\">\n      <option name=\"doctype\">CommentRelation</option>\n      <namespaces>\n        <namespace name=\"comment\">http://www.nuxeo.org/comments/uid</namespace>\n        <namespace name=\"isCommentFor\">\n          http://www.nuxeo.org/predicates/isCommentFor\n        </namespace>\n        <namespace name=\"document\">http://www.nuxeo.org/document/uid</namespace>\n      </namespaces>\n    </graph>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-graph-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-comment-core-2023.7.9.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.core",
      "id": "org.nuxeo.ecm.platform.comment.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.9\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core,stateful\r\nBundle-Name: Nuxeo Comment Core\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: true\r\nNuxeo-Component: OSGI-INF/comment-graph-contrib.xml\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.comment.core;singleton=true\r\n\r\n",
      "maxResolutionOrder": 324,
      "minResolutionOrder": 324,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2023.7.9"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-directory-ldap",
      "artifactVersion": "2023.7.9",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.directory",
          "org.nuxeo.ecm.directory.api",
          "org.nuxeo.ecm.directory.ldap",
          "org.nuxeo.ecm.directory.multi",
          "org.nuxeo.ecm.directory.sql",
          "org.nuxeo.ecm.directory.types.contrib",
          "org.nuxeo.ecm.directory.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory",
        "id": "grp:org.nuxeo.ecm.directory",
        "name": "org.nuxeo.ecm.directory",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "2023.7"
      },
      "bundleId": "org.nuxeo.ecm.directory.ldap",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.management.CoreManagementComponent--probes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.ldap/org.nuxeo.ecm.directory.ldap.management/Contributions/org.nuxeo.ecm.directory.ldap.management--probes",
              "id": "org.nuxeo.ecm.directory.ldap.management--probes",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"probes\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n         <probe class=\"org.nuxeo.ecm.directory.ldap.management.LDAPDirectoriesProbe\" name=\"ldapDirectories\">\n            <label>LDAP probe</label>\n            <description>Test access on each declared LDAP Directory</description>\n         </probe>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.management.CoreManagementComponent--healthCheck",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.ldap/org.nuxeo.ecm.directory.ldap.management/Contributions/org.nuxeo.ecm.directory.ldap.management--healthCheck",
              "id": "org.nuxeo.ecm.directory.ldap.management--healthCheck",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2023.7.9",
              "xml": "<extension point=\"healthCheck\" target=\"org.nuxeo.ecm.core.management.CoreManagementCompon